diff --git a/MLPP/Stat/Stat.cpp b/MLPP/Stat/Stat.cpp index 5120e59..211e2b1 100644 --- a/MLPP/Stat/Stat.cpp +++ b/MLPP/Stat/Stat.cpp @@ -6,6 +6,9 @@ #include "Stat.hpp" #include "Activation/Activation.hpp" +#include "Data/Data.hpp" +#include +#include #include namespace MLPP{ @@ -25,6 +28,44 @@ namespace MLPP{ return sum / x.size(); } + double Stat::median(std::vector x){ + double center = double(x.size())/double(2); + std::vector original_vec = x; + sort(x.begin(), x.end()); + if(x.size() % 2 == 0){ + return mean({x[center - 1], x[center]}); + } + else{ + return x[center - 1 + 0.5]; + } + x = original_vec; + } + + std::vector Stat::mode(std::vector x){ + Data data; + std::vector x_set = data.vecToSet(x); + std::map element_num; + for(int i = 0; i < x_set.size(); i++){ + element_num[x[i]] = 0; + } + for(int i = 0; i < x.size(); i++){ + element_num[x[i]]++; + } + std::vector modes; + double max_num = element_num[x_set[0]]; + for(int i = 0; i < x_set.size(); i++){ + if(element_num[x_set[i]] > max_num){ + max_num = element_num[x_set[i]]; + modes.clear(); + modes.push_back(x_set[i]); + } + else if(element_num[x_set[i]] == max_num){ + modes.push_back(x_set[i]); + } + } + return modes; + } + double Stat::variance(std::vector x){ double sum = 0; for(int i = 0; i < x.size(); i++){ diff --git a/MLPP/Stat/Stat.hpp b/MLPP/Stat/Stat.hpp index 5997480..b1c01f8 100644 --- a/MLPP/Stat/Stat.hpp +++ b/MLPP/Stat/Stat.hpp @@ -18,6 +18,8 @@ namespace MLPP{ // Statistical Functions double mean(std::vector x); + double median(std::vector x); + std::vector mode(std::vector x); double variance(std::vector x); double covariance(std::vector x, std::vector y); double correlation(std::vector x, std::vector y); diff --git a/main.cpp b/main.cpp index 2b8c238..e8b0417 100644 --- a/main.cpp +++ b/main.cpp @@ -76,11 +76,13 @@ int main() { // std::vector outputSet = {0,1,1,0}; // // STATISTICS - // std::vector x = {1,2,3,4,5,6,7,8,9,10}; + // std::vector x = {1,2,3,4,5,6,7,8,9,1}; // std::vector y = {10,9,8,7,6,5,4,3,2,1}; // std::vector w = {0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1}; // std::cout << "Arithmetic Mean: " << stat.mean(x) << std::endl; + // std::cout << "Median: " << stat.median(x) << std::endl; + // alg.printVector(stat.mode(x)); // std::cout << "Variance: " << stat.variance(x) << std::endl; // std::cout << "Covariance: " << stat.covariance(x, y) << std::endl; // std::cout << "Correlation: " << stat.correlation(x, y) << std::endl;