diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7d3afbf1829dcb2f92d8083ab4456216fdcf44af..b586a4abe5f24db25d627cf8f6cd4f9d7045f357 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -80,6 +80,10 @@ if(BUILD_PARAMS) NAME NL_Optimization_Residuals COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} 2 ${MPIEXEC_PREFLAGS} "${CMAKE_BINARY_DIR}/bin/sisso++" "${CMAKE_SOURCE_DIR}/tests/exec_test/reparam/sisso.json" ${MPIEXEC_POSTFLAGS} ) + add_test( + NAME NL_Optimization_Residuals_Generate_Project + COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} 2 ${MPIEXEC_PREFLAGS} "${CMAKE_BINARY_DIR}/bin/sisso++" "${CMAKE_SOURCE_DIR}/tests/exec_test/reparam_gen_proj/sisso.json" ${MPIEXEC_POSTFLAGS} + ) endif() if(BUILD_PYTHON) diff --git a/src/descriptor_identifier/model/Model.cpp b/src/descriptor_identifier/model/Model.cpp index a0ff61393e7f7988d389599f0ddcbc85075ff323..f35b40b5e5dc523485b57cf3771329f623973644 100644 --- a/src/descriptor_identifier/model/Model.cpp +++ b/src/descriptor_identifier/model/Model.cpp @@ -123,6 +123,7 @@ std::vector<double> Model::eval(std::vector<std::vector<double>> x_in) const std::vector<double> Model::eval(std::map<std::string, std::vector<double>> x_in_dct) const { std::vector<std::vector<double>> x_in; + for(auto& feat :_feats) { for(auto& in_expr : feat->get_x_in_expr_list()) @@ -268,6 +269,7 @@ void Model::to_file(const std::string filename, const bool train) const void Model::write_matlab_fxn(std::string fxn_filename) { + if(fxn_filename.substr(fxn_filename.size() - 2, 2).compare(".m") != 0) { fxn_filename += ".m"; diff --git a/src/descriptor_identifier/model/ModelClassifier.hpp b/src/descriptor_identifier/model/ModelClassifier.hpp index 28ef2d60ffc6e4eaae3e9473f11fab4a1d670317..6126910ccda7c56d42766ae925f4eb8f86d56442 100644 --- a/src/descriptor_identifier/model/ModelClassifier.hpp +++ b/src/descriptor_identifier/model/ModelClassifier.hpp @@ -43,6 +43,9 @@ class ModelClassifier : public Model int _train_n_svm_misclassified; //!< The number of points misclassified by SVM (training set) int _test_n_svm_misclassified; //!< The number of points misclassified by SVM (test set) +protected: + using Model::eval; + public: /** diff --git a/src/descriptor_identifier/model/ModelLogRegressor.hpp b/src/descriptor_identifier/model/ModelLogRegressor.hpp index da7f5e097681e11adf2358a3824065f91e7d492d..dbad12bca49b975ddb78aec06256b77ee062d6dc 100644 --- a/src/descriptor_identifier/model/ModelLogRegressor.hpp +++ b/src/descriptor_identifier/model/ModelLogRegressor.hpp @@ -36,8 +36,9 @@ */ class ModelLogRegressor : public ModelRegressor { - public: + using Model::eval; + /** * @brief Default constructor */ diff --git a/src/descriptor_identifier/model/ModelRegressor.hpp b/src/descriptor_identifier/model/ModelRegressor.hpp index 8048428075d16fecfff9ab3cdb76f9d955b77043..73c047c589bd67dac340718dcdbc231bbfb0df3f 100644 --- a/src/descriptor_identifier/model/ModelRegressor.hpp +++ b/src/descriptor_identifier/model/ModelRegressor.hpp @@ -37,6 +37,8 @@ class ModelRegressor : public Model { public: + using Model::eval; + /** * @brief Default Constructor */ diff --git a/src/descriptor_identifier/solver/SISSOClassifier.cpp b/src/descriptor_identifier/solver/SISSOClassifier.cpp index f5f355f0376fb3232e24abe12af8ab882c23e347..5af8e3eec7183cf6f354a640d37cbcbdc0e70307 100644 --- a/src/descriptor_identifier/solver/SISSOClassifier.cpp +++ b/src/descriptor_identifier/solver/SISSOClassifier.cpp @@ -294,6 +294,8 @@ void SISSOClassifier::l0_regularization(const int n_dim) } _models.push_back(models); + + min_nodes.resize(_n_residual); _loss->reset_projection_prop(min_nodes); } diff --git a/src/descriptor_identifier/solver/SISSOLogRegressor.cpp b/src/descriptor_identifier/solver/SISSOLogRegressor.cpp index 992d2f734dabd6d60562f39e05be8dd0daef654d..de3e7b274679393427c3cf69213ffcdf5cb42dbf 100644 --- a/src/descriptor_identifier/solver/SISSOLogRegressor.cpp +++ b/src/descriptor_identifier/solver/SISSOLogRegressor.cpp @@ -84,6 +84,7 @@ void SISSOLogRegressor::add_models(const std::vector<std::vector<int>> indexes) _models.back().push_back(model); } + min_nodes.resize(_n_residual); _loss->reset_projection_prop(min_nodes); } diff --git a/src/descriptor_identifier/solver/SISSORegressor.cpp b/src/descriptor_identifier/solver/SISSORegressor.cpp index f51087220eb026957bd5300209df7062fdfce8c8..8ce5ea0582f9f041fc9725a991ddd4dfc9b79671 100644 --- a/src/descriptor_identifier/solver/SISSORegressor.cpp +++ b/src/descriptor_identifier/solver/SISSORegressor.cpp @@ -52,7 +52,7 @@ void SISSORegressor::add_models(const std::vector<std::vector<int>> indexes) ); _models.back().push_back(model); } - + min_nodes.resize(_n_residual); _loss->reset_projection_prop(min_nodes); } diff --git a/src/inputs/InputParser.cpp b/src/inputs/InputParser.cpp index c791f1e4129442458e63d060d31c210d97863f5f..5083725a37691fc872f48c2cd384e6f94a329674 100644 --- a/src/inputs/InputParser.cpp +++ b/src/inputs/InputParser.cpp @@ -92,7 +92,10 @@ InputParser::InputParser(pt::ptree ip, std::string fn, std::shared_ptr<MPI_Inter throw std::logic_error("The data file is an absolute path, but _data_file_relative_to_json is true."); } std::vector<std::string> filepath = str_utils::split_string_trim(fn, "/"); - _data_file = str_utils::join("/", filepath.data(), filepath.size() - 1) + "/" + _data_file; + if(filepath.size() > 1) + { + _data_file = str_utils::join("/", filepath.data(), filepath.size() - 1) + "/" + _data_file; + } } // Check if param ops are passed without being build with parameterized features @@ -819,11 +822,19 @@ void strip_comments(std::string& filename) { //Open input and output file std::vector<std::string> filepath = str_utils::split_string_trim(filename, "/"); - std::string newfn = str_utils::join("/", filepath.data(), filepath.size() - 1) + "/stripped_" + filepath.back(); + std::string new_fn; + if(filepath.size() > 1) + { + new_fn = str_utils::join("/", filepath.data(), filepath.size() - 1) + "/stripped_" + filepath.back(); + } + else + { + new_fn = "stripped_" + filename; + } std::fstream inputfile; inputfile.open(filename); std::ofstream inputcopy; - inputcopy.open(newfn); + inputcopy.open(new_fn); //search for '//' or '#', delete everything following, print remainder to new file std::string line; @@ -848,7 +859,7 @@ void strip_comments(std::string& filename) } inputcopy.close(); //update filename; - filename = newfn; + filename = new_fn; } pt::ptree get_prop_tree(std::string fn, std::shared_ptr<MPI_Interface> mpi_comm) @@ -860,7 +871,14 @@ pt::ptree get_prop_tree(std::string fn, std::shared_ptr<MPI_Interface> mpi_comm) else { std::vector<std::string> filepath = str_utils::split_string_trim(fn, "/"); - fn = str_utils::join("/", filepath.data(), filepath.size() - 1) + "/stripped_" + filepath.back(); + if(filepath.size() > 1) + { + fn = str_utils::join("/", filepath.data(), filepath.size() - 1) + "/stripped_" + filepath.back(); + } + else + { + fn = "stripped_" + fn; + } } mpi_comm->barrier(); diff --git a/src/loss_function/LossFunction.cpp b/src/loss_function/LossFunction.cpp index 8389333ebac0cb3581a62465e5be4a38a3c9a7a5..0932c7af6023e22ffda3c4d919b9920c35904b7d 100644 --- a/src/loss_function/LossFunction.cpp +++ b/src/loss_function/LossFunction.cpp @@ -30,6 +30,7 @@ LossFunction::LossFunction( int n_feat ) : _projection_prop(prop_train), + _projection_prop_std(prop_train), _prop_train(prop_train), _prop_test(prop_test), _prop_train_est(prop_train.size(), 0.0), @@ -51,6 +52,7 @@ LossFunction::LossFunction( LossFunction::LossFunction(std::shared_ptr<LossFunction> o) : _projection_prop(o->prop_project_copy()), + _projection_prop_std(o->prop_project_std_copy()), _prop_train(o->prop_train_copy()), _prop_test(o->prop_test_copy()), _prop_train_est(o->prop_train_est_copy()), diff --git a/src/loss_function/LossFunction.hpp b/src/loss_function/LossFunction.hpp index 12df655336e6022b37419b4c4b652e146ff93642..0379bfe329b27df0e13906f9e69238511af7505f 100644 --- a/src/loss_function/LossFunction.hpp +++ b/src/loss_function/LossFunction.hpp @@ -33,6 +33,7 @@ class LossFunction { protected: std::vector<double> _projection_prop; //!< The property vector used for projection + std::vector<double> _projection_prop_std; //!< The standardized property vector used for projection std::vector<double> _prop_train; //!< The value of the property to evaluate the loss function against for the training set std::vector<double> _prop_test; //!< The value of the property to evaluate the loss function against for the test set @@ -193,6 +194,11 @@ public: */ inline const std::vector<double>& prop_project() const {return _projection_prop;} + /** + * @brief Pointer to the head of the standardized property vector used for projection + */ + inline const double* prop_project_std_pointer() const {return _projection_prop_std.data();} + /** * @brief Copy of the value of the property to evaluate the loss function against for the training set */ @@ -218,6 +224,11 @@ public: */ inline const std::vector<double> prop_project_copy() const {return _projection_prop;} + /** + * @brief The standardized property vector used for projection + */ + inline const std::vector<double>& prop_project_std() const {return _projection_prop_std;} + /** * @brief Pointer to the head of the value of the property to evaluate the loss function against for the training set */ @@ -243,6 +254,11 @@ public: */ inline const double* prop_project_pointer() const {return _projection_prop.data();} + /** + * @brief Copy of the standardized property vector used for projection + */ + inline const std::vector<double> prop_project_std_copy() const {return _projection_prop_std;} + /** * @brief The error vector for the training set */ @@ -304,7 +320,6 @@ public: * @brief The number of classes in the calculation */ virtual inline int n_class(){return 0;} - }; #endif diff --git a/src/loss_function/LossFunctionConvexHull.cpp b/src/loss_function/LossFunctionConvexHull.cpp index a28bff6fc1d878f35c668c4cb8db82c763260702..171bf68df920550477be24bdcfc73a43604be7e3 100644 --- a/src/loss_function/LossFunctionConvexHull.cpp +++ b/src/loss_function/LossFunctionConvexHull.cpp @@ -116,6 +116,27 @@ void LossFunctionConvexHull::prepare_project() for(int pp = 0; pp < _n_project_prop; ++pp) { _convex_hull[pp] = ConvexHull1D(_task_sizes_train, &_projection_prop[pp * _n_samp]); + + int start = 0; + for(int tt = 0; tt < _n_task; ++tt) + { + double prop_mean = util_funcs::mean( + _projection_prop.data() + pp * _n_samp + start, + _task_sizes_train[tt] + ); + + double prop_std = util_funcs::stand_dev( + _projection_prop.data() + pp * _n_samp + start, + _task_sizes_train[tt] + ); + std::transform( + _projection_prop.begin() + pp * _n_samp + start, + _projection_prop.begin() + pp * _n_samp + start + _task_sizes_train[tt], + _projection_prop_std.begin() + pp * _task_sizes_train[tt] + start * _n_project_prop, + [prop_mean, prop_std](double p){return (p - prop_mean) / prop_std;} + ); + start += _task_sizes_train[tt]; + } } } diff --git a/src/loss_function/LossFunctionConvexHull.hpp b/src/loss_function/LossFunctionConvexHull.hpp index 6c544406fcaf84405f74b32538b8f6b2b59c9510..b9424a9530b8c0dd5723631364e180862b05c6d2 100644 --- a/src/loss_function/LossFunctionConvexHull.hpp +++ b/src/loss_function/LossFunctionConvexHull.hpp @@ -162,7 +162,6 @@ public: * @brief The number of classes in the calculation */ inline int n_class(){return _n_class;} - }; #endif diff --git a/src/loss_function/LossFunctionPearsonRMSE.cpp b/src/loss_function/LossFunctionPearsonRMSE.cpp index 79d2a00d888d5515fb6b0bfc525bd5aa18d68195..03383115e73aed0c479719cf2ab9e2adeed7404e 100644 --- a/src/loss_function/LossFunctionPearsonRMSE.cpp +++ b/src/loss_function/LossFunctionPearsonRMSE.cpp @@ -69,6 +69,7 @@ void LossFunctionPearsonRMSE::reset_projection_prop(const std::vector<std::vecto { _n_project_prop = models.size(); _projection_prop.resize(_n_samp * _n_project_prop); + _projection_prop_std.resize(_n_samp * _n_project_prop); for(int mm = 0; mm < _n_project_prop; ++mm) { double loss = (*this)(models[mm]); @@ -99,27 +100,24 @@ void LossFunctionPearsonRMSE::set_opt_lwork() void LossFunctionPearsonRMSE::prepare_project() { - std::vector<double> temp_prop(_projection_prop); - for(int pp = 0; pp < _n_project_prop; ++pp) { int start = 0; for(int tt = 0; tt < _n_task; ++tt) { double prop_mean = util_funcs::mean( - temp_prop.data() + pp * _n_samp + start, + _projection_prop.data() + pp * _n_samp + start, _task_sizes_train[tt] ); double prop_std = util_funcs::stand_dev( - temp_prop.data() + pp * _n_samp + start, + _projection_prop.data() + pp * _n_samp + start, _task_sizes_train[tt] ); - std::transform( - temp_prop.begin() + pp * _n_samp + start, - temp_prop.begin() + pp * _n_samp + start + _task_sizes_train[tt], - _projection_prop.begin() + pp * _task_sizes_train[tt] + start * _n_project_prop, + _projection_prop.begin() + pp * _n_samp + start, + _projection_prop.begin() + pp * _n_samp + start + _task_sizes_train[tt], + _projection_prop_std.begin() + pp * _task_sizes_train[tt] + start * _n_project_prop, [prop_mean, prop_std](double p){return (p - prop_mean) / prop_std;} ); start += _task_sizes_train[tt]; @@ -145,7 +143,7 @@ double LossFunctionPearsonRMSE::calc_max_pearson(double* feat_val_ptr) 1, _task_sizes_train[tt], 1.0 / feat_std / static_cast<double>(_task_sizes_train[tt]), - &_projection_prop[start * _n_project_prop], + &_projection_prop_std[start * _n_project_prop], _task_sizes_train[tt], feat_val_ptr + start, _task_sizes_train[tt], diff --git a/tests/exec_test/reparam/check_model.py b/tests/exec_test/reparam/check_model.py index c5333171fe1ec06b4c080da8ae8de18ed18dd322..e02eb0afbe88515eb350b3eaf8409f207c234079 100644 --- a/tests/exec_test/reparam/check_model.py +++ b/tests/exec_test/reparam/check_model.py @@ -4,7 +4,6 @@ from pathlib import Path import numpy as np model = ModelRegressor( - str("models/train_dim_2_model_0.dat"), str("models/test_dim_2_model_0.dat") + str("models/train_dim_2_model_0.dat") ) -assert model.rmse < 1e-3 -assert model.test_rmse < 1e-3 +assert model.rmse < 1e-5 diff --git a/tests/exec_test/reparam/data.csv b/tests/exec_test/reparam/data.csv index 19bd47732fc7b57681d72ffeec5215b5f823bdac..cc8bb38c52ddfcecf61b37503c4a0228430b82ef 100644 --- a/tests/exec_test/reparam/data.csv +++ b/tests/exec_test/reparam/data.csv @@ -1,200 +1,200 @@ -Sample,Prop,A (m),B,C ,D (Unitless) -1,727.118939908528,-26.9598915689615,16.4770933201292,-2.3456689341142,-44.347548060136 -2,4061.71941599051,-63.7344834181458,-0.473998625420511,-4.89234477177099,1.80584885776461 -3,5299.04050897752,-72.7950448428438,-0.041798823456847,-7.07837005584224,48.0928566759633 -4,1375.77566461643,-37.0913938631186,0.542538989935228,-5.67314711587992,-6.63267687110276 -5,120.602129063925,-11.001120431754,-0.485377837185949,-5.00603570699514,15.9117421465142 -6,341.757364891539,18.4763248591176,45.463422582209,-3.54317005919354,-14.7878213495168 -7,304.476105142188,-17.4403258467529,21.9523438691943,-6.35861222826073,-47.3766079570739 -8,2931.92999380806,-54.1451148162277,10.147801679562,-7.60672120838089,-22.3898912622486 -9,1921.95555585739,-43.8467983050434,-0.497153478218677,-2.25234722784919,43.9272285404933 -10,3907.42119504189,-62.5085507107758,2.28105625283137,-3.43022785454677,8.19384171276104 -11,166.877248480643,-12.90112483941,79.5189583527563,-4.30079724754646,-12.4087676815772 -12,205.095395730327,-14.3204344263206,0.728182848148043,-1.67196862061437,19.8996028130594 -13,3563.77318219706,-59.6968588654461,1.29003999054027,-5.44656566587949,-15.2272436669887 -14,3945.77318117953,-62.810861209267,295.084070008889,-5.40735078566055,-42.8531828927498 -15,5927.41275262953,-76.9929995375143,-0.493855829552637,-1.4315831772722,-23.8750759982545 -16,1888.25703070108,-43.4528362022336,2.44634915519088,-6.02764925690289,2.00530269634198 -17,5152.93096871797,-71.7800444129219,259.824249962042,-4.87847438811516,-1.14593805194346 -18,2.94147443019837,1.77903648082263,-0.393003986154435,-3.30485346593225,-31.1066062424722 -19,3041.79089923232,-55.1550772610619,-0.445876370492354,-2.98493082242597,11.4007261016967 -20,14.9050769170286,3.91891619301887,-0.489200679988903,-5.89212500915864,13.332244433362 -21,2236.07246678801,-47.2911803424441,-0.478349222990864,-1.48969943715326,-49.8357259223171 -22,43.9412846659196,-6.67172116893789,-0.496673341397219,-6.98473833216711,24.3378172389092 -23,198.981890427795,-14.0940878772357,29.0408297437264,-5.02795165977473,24.458688886489 -24,340.345389578719,18.4524777037321,-0.273596909044756,-4.03160675969822,-45.7650654495297 -25,31.0005079189483,-5.62128870102401,-0.497480733303151,-7.88745749841534,29.8635497822435 -26,5273.438106727,-72.6184893467069,0.43343615842018,-5.72249460051619,2.24766880043221 -27,117.569703499072,10.8174877144636,248.295298756743,-4.07722001869143,-44.1648618659459 -28,40.7631423786567,6.42828632159915,-0.496291866163785,-3.61371438533051,-36.5850314016794 -29,4820.82683295394,-69.436530178802,-0.49763955041834,-5.87286492489537,-43.9849567179791 -30,588.90340069208,-24.2686365786508,0.030886543934811,-5.26329667125282,-29.0983093347683 -31,3511.40403894796,-59.2619394123934,-0.496766660265218,-5.12016109436414,5.75915813790093 -32,52.2713678393477,7.20352530063482,44.4661877774354,-7.99605678100631,-19.5563042860325 -33,159.490205968011,12.6288219954758,0.531083041050068,-2.93209993389513,33.733737070524 -34,25.9996602693095,5.11720640360599,-0.344546880940562,-4.74718269758769,-43.284304200484 -35,190.365293747315,13.7862783611727,20.3682101543091,-6.58308111461873,-39.5586964516148 -36,5595.93420766635,-74.8066238254682,-0.120007965217726,-5.70401509554886,4.90691611925422 -37,1650.53476835268,-40.6205669665801,154.445998984365,-3.09079843604824,17.8669954108563 -38,35.4430195477034,-5.92487161906894,29.1409974656196,-3.44316474412239,-19.2637628682529 -39,86.7620418918003,9.30851852302476,2.61194515688744,-5.6473419999351,-2.63614370437764 -40,4954.87311146266,-70.3943965755962,-0.493123034576539,-4.76211439558765,27.7529260381853 -41,3980.67608068829,-63.093837937864,-0.290503953641989,-4.02071835875608,-10.0021344448853 -42,4661.68461965629,-68.2755606153041,3.26001603587903,-2.26361828777514,9.86622823185131 -43,96.3197455818231,-9.78367054387746,401.06230699025,-4.24735440947351,25.2777827117253 -44,1292.36574778388,-35.9559408271055,-0.490335827462934,-2.76562716567933,33.0110367114817 -45,2699.67562292752,-51.955532416585,19.2418819634039,-7.93032952624575,-37.7246791504005 -46,2579.35068127823,-50.7866432699566,1.46494937970502,-3.33474965791084,-32.641898315556 -47,344.809108889708,-18.5646811911955,4.53901985423472,-5.88059238472936,-42.5071616014547 -48,373.037808772813,19.3289803897382,-0.496709584204927,-7.82002765371011,26.3987049932634 -49,74.6146563446771,8.65080448547252,-0.39113198608151,-5.87551870334558,-27.9879144209769 -50,4327.73284580549,-65.7857361126348,0.239115736998907,-7.51279975590682,-31.2558626644226 -51,193.22200177049,-13.889527800167,20.201219028094,-3.48241903422821,6.67534002352448 -52,659.348935615868,-25.6846232941466,-0.470084587510066,-6.06742159260695,-10.7428299736182 -53,2152.60396391745,-46.389849089785,349.752192224117,-1.73354846107454,45.2227066819777 -54,2111.10247581623,-45.9448330787616,5.24248365745649,-3.93910535917686,11.443077037234 -55,1.36739710028255,1.21024970063709,-0.12207986021608,-5.6353088555368,22.0715445632689 -56,45.9284261527926,6.82015137032394,-0.497149855583102,-7.31727496920493,-20.5681946954325 -57,80.0409910378484,8.93502324443354,7.37353072583526,-6.34031949834672,-1.31396024522537 -58,2698.92606173825,-51.9509054197567,0.842962584360503,-3.95367000561231,-10.7220214875492 -59,223.173338902568,-14.9239411443508,88.9067538027111,-6.75057235340986,-44.5670983442402 -60,986.438087285111,-31.416557856837,-0.496376094142896,-2.41936247413012,-18.8843963170741 -61,3603.62585515515,-60.033076560273,-0.468071663261977,-5.23055650631282,-23.9353018345737 -62,2725.94117253617,-52.2120406857653,-0.289906027110049,-5.97771240402116,-46.9075094897443 -63,58.1825600691546,-7.60975121560017,15.0252085090386,-2.78441960890466,7.97132000366891 -64,900.060646307109,-30.0109652633393,-0.497455693859477,-2.87174725747444,41.5563304679875 -65,240.440369967361,15.5234123258985,-0.495297225968755,-6.95963559575148,19.023992883741 -66,130.720418025616,11.4466418568071,-0.452731809921819,-5.86878464024433,5.51701410010501 -67,798.915022613098,-28.2644698934095,0.915726145442695,-4.83119267608722,-13.9310642459825 -68,3166.34648080747,-56.2690045870611,3.78892400893538,-2.14800032699086,47.4127025417918 -69,1862.50555078432,-43.1632002022201,-0.496162787648307,-7.01453652131387,-46.2567154326572 -70,2225.06356376351,-47.1771065084369,-0.497883830044414,-1.60661352497764,-38.5981595172128 -71,4363.67954111128,-66.0540149800446,236.121371085305,-6.19620347378171,-23.9170134906467 -72,47.4330512347074,-6.85891697714553,48.0741430502517,-1.65386604219128,-33.8665151302642 -73,273.361492900149,16.5158104574122,362.708972278198,-2.42857733468406,24.6791000675707 -74,5698.3621224726,-75.4835322367884,396.857072452073,-2.12354307871309,46.6747044684097 -75,6.93822007640483,-2.56841533011229,29.9056268334466,-3.2934374528907,30.549085663698 -76,3804.12058111338,-61.6766293536255,2.62591452640418,-4.54238642583241,-38.5971464888276 -77,134.316567729976,-11.5723032332386,53.2130548753723,-5.56153622028371,12.3936081168232 -78,277.715236014706,16.6491893365343,180.284282189547,-5.58878933240212,-3.94425294613453 -79,2061.79596051702,-45.409836204165,-0.423665915287556,-6.04367749499791,-17.6757195025452 -80,1561.24736538265,-39.5132873144389,0.091502063189858,-1.45277556561637,24.2040229161337 -81,34.0596998102802,5.86003773869783,-0.439397848717482,-2.23036190221381,-6.73321698527632 -82,2510.6583057027,-50.1081985824405,-0.323175001743296,-4.63455457225095,-24.1915568326123 -83,5434.36557769286,-73.7200587656617,-0.440087325236099,-3.55829477285746,11.8636293616561 -84,349.683203403743,-18.702078055099,-0.070529297414911,-3.21604886152984,-18.8030480996723 -85,1707.69027357697,-41.3278643201009,-0.451245454115031,-5.99995173374799,7.23178224244262 -86,18.1838163310785,4.32102167924892,-0.492358185581036,-5.70722855516919,-25.9853423656035 -87,62.3089597870843,-7.89579168858238,0.207748818743325,-4.59158145901213,18.8843752486005 -88,585.053895669179,-24.1840519644013,5.89337643977028,-6.31738877363181,-39.545785321285 -89,659.90151546788,-25.6857212498618,3.77333017085669,-1.82286323533721,14.5858684182696 -90,2410.56011326419,-49.1007606547447,-0.461064003773782,-2.41698107113692,-5.76452344036105 -91,2921.73290300668,-54.0537986772741,-0.051785947968437,-5.80921192537188,16.2062779607103 -92,3109.93452254675,-55.7673374815322,0.041142667821485,-7.61725050011638,-10.0557542574519 -93,227.411819890352,-15.0617323836765,259.420269606632,-2.2703256277641,-18.5905317905508 -94,1867.21892320968,-43.2127870741805,-0.216469361060176,-6.12158829671141,-19.8709477409517 -95,5699.39516510841,-75.4966175565072,-0.467966519292414,-7.54123138852082,20.9077422324457 -96,290.202417629196,-17.0276183617925,13.3226084269137,-2.08580113689997,47.2792952472548 -97,3695.78925952401,-60.7934359649989,0.090982386990098,-3.04091195810171,-7.64062716861136 -98,5688.83043824682,-75.4236464811022,2.32892676678235,-6.51472539028649,-15.6475137662788 -99,2992.642878234,-54.7106879317446,-0.497898191905685,-2.35274267919398,29.2605946788015 -100,989.267834468171,-31.4470701142083,32.4884335775792,-4.35392293427778,-36.7846960600504 -101,1899.92448558932,-43.5832066780196,72.1615605126635,-1.65340984784069,-0.185767759183975 -102,979.619493391994,-31.2961341604768,5.05556436786726,-4.1887716494893,-41.2570400474365 -103,1574.0642011217,-39.669540069504,49.795618058032,-2.09671656243407,15.2097207002341 -104,4724.37194110142,-68.7382726486335,-0.496917012438291,-3.07658993169754,-22.7964913357467 -105,2175.06939879858,-46.6408752377136,-0.451122661430972,-4.88687519160418,-40.0520171310077 -106,3491.40218254105,-59.0856505796252,17.3281957490917,-4.87613034856812,-2.84184207378766 -107,0.886952180829067,0.99516304638658,-0.144408642860048,-4.31632665709326,-34.0420098413868 -108,1215.36781550186,-34.8685562807829,-0.488712011042624,-4.12892511649074,16.6969910270682 -109,379.710664287565,19.4891331200602,-0.185400487713524,-3.68146314555071,-35.3067445989357 -110,2.98511787558458,-1.88822533937767,-0.496980821688295,-7.90421518219377,-48.8860551153697 -111,199.430928540483,14.1380244400304,-0.489198445976491,-3.3984085008333,-33.5717844654845 -112,1180.61862245606,-34.3623602661506,-0.283855053275166,-7.13477700249137,-15.399187347615 -113,3770.71972756117,-61.4012210435464,444.386515035363,-5.25859640791155,41.7692170340535 -114,180.612191910722,-13.4194423080587,201.365273913345,-2.33176731297801,19.4153752835369 -115,3404.07028050788,-58.3448857005669,0.074606946410731,-5.33740122822168,-30.1412507886228 -116,2624.23016638862,-51.2213511900404,416.666970993708,-1.94522330346958,9.26728796673105 -117,1424.02657543374,-37.7322290284518,20.7143912093735,-6.71043958378988,-8.33671639342791 -118,131.103968712495,11.4611946675192,-0.421929650550317,-2.2522108971003,-25.9260914395905 -119,3229.71826581323,-56.8288336135006,7.03349760173323,-1.49927838234687,-0.791847301150289 -120,366.09787973306,19.1441244058617,-0.481614543609921,-1.44284832839425,-30.0047691072164 -121,4141.10977850684,-64.3520862004493,-0.056118849849309,-6.69158253407763,17.3262223314447 -122,12.5819279402761,3.6291958906162,-0.497236752669632,-3.18974587324306,49.9165426319515 -123,4636.00047143652,-68.0890665063311,-0.200326781773338,-2.7843544422723,11.356336523518 -124,-0.541681781663468,-0.03986491591472,-0.495628766008611,-5.08976431577769,35.1504145643644 -125,1537.47166486813,-39.2030697053123,368.171308993572,-6.55459610762837,45.2961662340095 -126,497.408449283902,-22.2993020682629,3.96275158307667,-3.00296673932356,-39.9924408622542 -127,691.072174615786,-26.276537455132,471.764801457238,-4.86235261212403,15.3356886667449 -128,385.986127964809,-19.6525068195878,-0.404531916482237,-5.70827709662873,-32.6369510009034 -129,423.86896132636,-20.5816480004248,13.6154385315001,-7.73089443430312,-29.0967438066763 -130,1298.38869025377,-36.0279261115311,42.980108527344,-4.55299865372591,-37.0625398905495 -131,20.8413888211178,-4.56616804634005,0.418495693471633,-5.64575793292945,-22.9826840284982 -132,5323.34631127605,-72.9652412434823,-0.496976029074175,-3.25644958325088,-44.0530723759284 -133,123.213304227256,-11.0756331150067,229.149283367814,-4.34485228940315,-28.7479247882604 -134,137.086727714487,11.7327801342422,-0.496700616479115,-7.57820562812251,-49.1016126374255 -135,6002.9608765017,-77.478375790133,1.36193123292372,-5.34585428475751,29.3489743252839 -136,260.09483215086,16.133734695001,-0.368089363013755,-6.28682745418137,32.3609017455856 -137,572.575216544238,-23.9358831695317,-0.470188635894022,-7.51292296284087,-32.9506740264378 -138,5799.384361479,-76.1542692325353,-0.086711186730361,-5.28542445269072,27.7861610902532 -139,196.301858419301,13.992909122283,148.437558598205,-5.51366789564913,12.6980971652698 -140,668.414347501324,-25.8458632692668,57.3002832907674,-3.08339476592921,-7.37760993821234 -141,49.2978263996808,-7.04432340186688,-0.461095988258968,-2.88200643578584,49.6085415774666 -142,1501.7900235203,-38.7498577179414,10.3645326218017,-2.91762623451623,-47.4155232307921 -143,192.734366241125,-13.8816226585557,0.917912991161896,-3.49050579636698,-35.6224457233954 -144,12.2658102651698,3.53143032766324,-0.371509324270874,-7.03011821724418,1.21161131015394 -145,353.649768526282,18.8122590603734,-0.418993370598105,-6.14798037645281,-25.0771629156771 -146,2059.95355881619,-45.3876994246683,-0.092209810577898,-2.79777883290398,-0.853483451876269 -147,99.400689501916,9.99205418108014,-0.487778670782909,-3.49311416012508,21.0171256311828 -148,226.675085185607,15.0422808688224,56.8237194838239,-2.64721026358376,-27.2278798040954 -149,1196.6847234568,-34.5864321336299,102.461715619825,-3.52893656424693,49.5218992208287 -150,31.7086413345147,-5.59124787191003,86.4980490563059,-4.76372343793376,31.7807673388218 -151,100.030213016967,10.0066790715896,-0.144464525900901,-5.56832131334509,-12.8574842512773 -152,4655.85713853655,-68.2309353153849,52.2754036963755,-4.92032582476456,-11.5622021238651 -153,1161.33564666774,-34.0749980077669,9.48989801791842,-3.83226401506356,34.9039679881372 -154,88.4573274221266,-9.40065364833522,1.84054559321013,-4.43433590851494,-1.8055105618341 -155,3343.83621823161,-57.829383681368,-0.481938765044759,-5.61197379728001,-12.4561765493944 -156,1384.23114476494,-37.2033227674863,3.71731315316413,-3.88978463305878,2.67458671547165 -157,1183.58687224275,-34.4091686838208,-0.482405566208497,-3.90279531883483,15.911675534846 -158,64.6856222477585,8.03154400480111,5.5449998969451,-7.50549951967315,-29.5014377342349 -159,3527.95519324554,-59.4002320137843,-0.486749241178061,-3.73141206139273,-47.8326545592386 -160,1459.85057436967,-38.2147900954803,-0.49446175003812,-5.57131405422011,38.0204594133977 -161,4389.55800424322,-66.2569615714253,-0.486011564704861,-7.99486733240653,19.8030175200339 -162,4927.18883200205,-70.1953003392248,-0.352448368336671,-1.64541651154446,29.9566568037513 -163,1996.27917748949,-44.6747579070491,85.284158834146,-3.8510697854708,49.1782649711897 -164,4843.01343134768,-69.5895625336738,20.874042016146,-2.28255417481995,34.3085911428995 -165,3756.18637535125,-61.2913139101584,-0.487572640470121,-7.68537764083691,-41.1416870546773 -166,701.232346648895,-26.483354252606,-0.242583067020683,-6.11042237454046,-33.94234748613 -167,474.528349605384,-21.7903008868779,-0.44434767108865,-3.03465245711155,30.9044847088009 -168,-0.025454589203122,0.073745029251427,0.23423276256698,-1.93475914620777,23.2408437170182 -169,549.961998535782,-23.4508961529066,0.690867000534513,-3.01420494653357,-41.3032597144636 -170,2867.55152377784,-53.5509190800047,-0.275550682323061,-7.14588972174864,17.1468342163848 -171,2532.64099250005,-50.3210224219694,77.5187417778993,-6.95132062918625,-45.0098058198204 -172,390.70914052993,-19.7673220482605,0.184679593295579,-6.01708273481942,-11.5710331447624 -173,3938.14678738956,-62.7529435847603,8.07274834139756,-2.17523738723104,-4.79179895222981 -174,1.1481088115457,-1.0056443961041,3.4270228776115,-4.62101358376104,-15.6920277652284 -175,83.5422772359129,9.11685360583391,69.7862125868159,-6.43013760515447,-8.02094456185238 -176,259.144318084694,-16.0788172577744,472.708813808054,-4.37348452914986,-43.3390418590448 -177,3689.80750194221,-60.7472746089456,-0.485573734262362,-1.43331258152053,32.2520657836497 -178,5260.11663949437,-72.5231127207473,171.519506718457,-5.40439349655734,36.7072086474724 -179,519.223416858943,-22.7981731659259,-0.495169611819957,-4.60544989470716,11.9859491180679 -180,387.237646644648,19.6660668196227,125.291390991448,-7.23510922520872,23.6032842669287 -181,555.354375273459,-23.5629038821836,3.71799174243363,-1.75822155015244,43.0319981537978 -182,1488.4304816389,-38.5783469113112,3.62189205349538,-4.2602267746444,20.8127537359242 -183,2612.12408699515,-51.1063404093681,13.8044341467259,-2.28920960539554,-19.5461471819212 -184,334.001931252976,18.2706603166669,5.85364370083153,-2.03830045830456,-30.93321069934 -185,4387.31281460776,-66.2343361416717,25.4275159855127,-4.35973942715806,-39.3283508835272 -186,2143.17770158481,-46.2997114836124,-0.49221704201524,-2.59961744074765,22.8599617048399 -187,300.830750680389,-17.3439604506534,0.694664825872767,-3.8673543572576,38.6562881703084 -188,2940.27086281968,-54.2199534414422,106.745036306538,-3.02812650312015,49.7409316922086 -189,6085.56648774362,-78.0130202992036,-0.490423897465248,-6.45209495686053,35.398069725534 -190,4442.82683841434,-66.6516093801645,48.8064292375437,-1.44337467515737,5.77066399128683 -191,1198.72029714792,-34.6165007490255,64.9790606216099,-6.06162736248712,36.797785599177 -192,715.115457626605,-26.7403148978951,1.53433275406045,-5.00637057608409,44.1033334580734 -193,201.662785258773,14.2157848317953,-0.485842790102652,-5.09133832098407,21.1443244384268 -194,5041.15495132377,-71.0047453498791,-0.494423025054532,-4.95882313981698,-35.3243342936784 -195,253.2407210479,15.9027257474234,30.6978287601461,-6.53857383673753,49.5396591932987 -196,4922.98620339748,-70.160217182373,200.094046645895,-6.83886505647139,1.76192954250076 -197,379.507528382537,-19.4945251532755,-0.49495736084227,-5.25629343542096,14.4465537360302 -198,5163.55722322911,-71.8615847922921,-0.495015670094684,-5.43472132756901,-37.1812519856081 -199,453.869051802097,-21.3140043260099,-0.484659916974663,-6.61214970062417,-24.4760444892339 +Sample,Prop,A,B +1,1052.00233422229,-26.9598915689615,6.20309137842541 +2,4371.49628958135,-63.7344834181458,-2.07120000760519 +3,5577.84794747112,-72.7950448428438,-5.35175942360518 +4,1691.1715045791,-37.0913938631186,5.68031092322494 +5,218.833409804625,-11.001120431754,4.2048615736526 +6,633.194959646112,18.4763248591176,6.17566186571887 +7,697.642291894055,-17.4403258467529,6.92812647427557 +8,2948.97628267587,-54.1451148162277,-6.19756109936816 +9,2249.25241059762,-43.8467983050434,5.36900839121948 +10,4397.88781266859,-62.5085507107758,5.46985716094317 +11,287.687759319659,-12.90112483941,4.51695259448722 +12,316.044698035476,-14.3204344263206,4.31361019159238 +13,3843.72511522851,-59.6968588654461,1.23276583113066 +14,4257.38194302416,-62.810861209267,1.54689699700947 +15,6334.253925868,-76.9929995375143,-4.03016563971121 +16,2286.53288181738,-43.4528362022336,6.06430752912011 +17,5629.56362306806,-71.7800444129219,4.0055528372609 +18,83.2295600051812,1.77903648082263,4.05561380769476 +19,3325.22666254028,-55.1550772610619,3.3563357705763 +20,156.96174494603,3.91891619301887,4.94757258787117 +21,2630.96022078008,-47.2911803424441,5.79435935916502 +22,472.484928902339,-6.67172116893789,7.26562002978181 +23,628.722467071999,-14.0940878772357,7.2069561460293 +24,637.756546534934,18.4524777037321,6.21984544170837 +25,164.703912166199,-5.62128870102401,4.82424056438207 +26,5581.03743720886,-72.6184893467069,-4.92128310616193 +27,233.078543209301,10.8174877144636,4.49706215680815 +28,269.064737240481,6.42828632159915,5.82798957027128 +29,5247.19546567351,-69.436530178802,3.46670333009828 +30,677.587972192927,-24.2686365786508,3.25022879358702 +31,3633.68998298433,-59.2619394123934,-5.57530696788716 +32,152.588491561582,7.20352530063482,4.33945272208388 +33,304.984140359693,12.6288219954758,4.85589577512029 +34,36.6348213098156,5.11720640360599,1.78404138767965 +35,436.444377844443,13.7862783611727,5.89130488963502 +36,5750.17983692783,-74.8066238254682,-6.79545197302518 +37,2094.45352560741,-40.6205669665801,6.56333441142877 +38,147.790372824609,-5.92487161906894,4.54084137161217 +39,245.996666987969,9.30851852302476,5.09404052158133 +40,5343.15303906939,-70.3943965755962,1.18563361394154 +41,4467.75534620733,-63.093837937864,5.37291203149488 +42,4827.30262519124,-68.2755606153041,-6.06130670169955 +43,232.83836640407,-9.78367054387746,4.81169871034718 +44,1638.91786368219,-35.9559408271055,6.01319272477161 +45,3004.130680277,-51.955532416585,4.31491433634095 +46,2899.88701443074,-50.7866432699566,4.68656532904279 +47,743.291230416591,-18.5646811911955,6.9411883920925 +48,849.887843952986,19.3289803897382,7.39753609011762 +49,320.697989982805,8.65080448547252,5.96489604486524 +50,4786.77325154449,-65.7857361126348,4.72218888584055 +51,580.013350094908,-13.889527800167,6.94269262242959 +52,790.301306077083,-25.6846232941466,4.04753981057489 +53,2639.31299006254,-46.389849089785,6.59114304749694 +54,2529.23456493816,-45.9448330787616,6.08615676832293 +55,218.528501182286,1.21024970063709,5.7587839043402 +56,102.85175114182,6.82015137032394,3.49977958604301 +57,98.1890265822661,8.93502324443354,2.04921876907686 +58,3130.40886660874,-51.9509054197567,5.80433974737791 +59,357.854902006621,-14.9239411443508,4.65257579553207 +60,1270.26516902747,-31.416557856837,5.66182950995689 +61,3954.06850125917,-60.033076560273,3.87563602766626 +62,3108.31509869172,-52.2120406857653,5.29524959724945 +63,79.8726415057673,-7.60975121560017,2.34462882567642 +64,1205.71009861928,-30.0109652633393,5.92195946506532 +65,541.236564148688,15.5234123258985,6.30415543102122 +66,585.715705703022,11.4466418568071,7.38183174443396 +67,1155.39988989893,-28.2644698934095,6.40301931832396 +68,3387.31422429564,-56.2690045870611,-3.16489568909402 +69,2189.64918981506,-43.1632002022201,5.41607643231959 +70,2475.89251675601,-47.1771065084369,4.01115806304705 +71,4834.77677391605,-66.0540149800446,4.85207155106912 +72,342.528746483897,-6.85891697714553,6.38300436770026 +73,650.708719137237,16.5158104574122,6.84234021019956 +74,5947.66678699085,-75.4835322367884,-6.02472622750375 +75,395.187879280987,-2.56841533011229,7.04412696145218 +76,3939.01749538613,-61.6766293536255,-5.68335304418137 +77,341.095784378799,-11.5723032332386,5.56645932478254 +78,523.001059184589,16.6491893365343,5.82569987566845 +79,2431.60044712179,-45.409836204165,5.68837636926732 +80,1939.01373373761,-39.5132873144389,6.1034611758802 +81,191.930782192942,5.86003773869783,5.12080689791401 +82,2832.37227327965,-50.1081985824405,4.77064964515006 +83,5909.49629601525,-73.7200587656617,3.50171265693252 +84,672.15890407407,-18.702078055099,6.40865230721314 +85,2037.24835588279,-41.3278643201009,5.5648756901726 +86,216.515211584561,4.32102167924892,5.56267558043512 +87,474.862486861938,-7.89579168858238,7.16490483392694 +88,710.986921377433,-24.1840519644013,4.0713822084246 +89,967.970852191141,-25.6857212498618,6.10769109641322 +90,2877.22081792368,-49.1007606547447,6.28521082722151 +91,3206.46349491423,-54.0537986772741,3.6152813743562 +92,3267.77633202847,-55.7673374815322,-4.62490789885554 +93,458.047087729138,-15.0617323836765,5.72745419459021 +94,2292.91309984418,-43.2127870741805,6.29644670618342 +95,5918.62096137796,-75.4966175565072,-6.32089368622665 +96,755.972175216695,-17.0276183617925,7.37611234304879 +97,4009.61460487708,-60.7934359649989,2.74115588610843 +98,5809.56734039514,-75.4236464811022,-7.09654428017805 +99,3330.85902527185,-54.7106879317446,4.46993649630659 +100,1234.13889141749,-31.4470701142083,5.27248086984354 +101,2196.24871973015,-43.5832066780196,5.05433014634953 +102,1369.80366067869,-31.2961341604768,6.54900431568322 +103,1716.23065859536,-39.669540069504,2.48017631835462 +104,4836.75339571112,-68.7382726486335,-6.59236849918175 +105,2487.57592893521,-46.6408752377136,4.98261316030784 +106,3913.40492263418,-59.0856505796252,5.07717363106205 +107,161.276806697414,0.99516304638658,5.18120421245594 +108,1445.98631993368,-34.8685562807829,4.88944205656418 +109,733.399646418029,19.4891331200602,6.61882860403088 +110,411.000186118061,-1.88822533937767,7.16175336134506 +111,603.265824987431,14.1380244400304,7.04275295570392 +112,1346.02292894135,-34.3623602661506,3.93990434191016 +113,3917.76102677697,-61.4012210435464,-5.50512423996943 +114,649.344881143125,-13.4194423080587,7.44294190409633 +115,3817.36685782506,-58.3448857005669,5.05008735202479 +116,3088.07779745063,-51.2213511900404,6.13827583510343 +117,1685.69963655783,-37.7322290284518,5.07995407531594 +118,443.988302336616,11.4611946675192,6.46234283374064 +119,3412.11780803484,-56.8288336135006,-4.33556409714628 +120,377.521452451852,19.1441244058617,-2.84314888891916 +121,4361.17474608258,-64.3520862004493,-4.91639542713793 +122,115.627130132655,3.6291958906162,4.41365864133484 +123,4697.44085035487,-68.0890665063311,-6.9347275448216 +124,19.3386439875286,-0.03986491591472,2.4340824467087 +125,1946.49315523071,-39.2030697053123,6.37109682689095 +126,711.719581617268,-22.2993020682629,5.35242978951016 +127,1163.53596472028,-26.276537455132,7.23566291150618 +128,509.368706775951,-19.6525068195878,4.28316435049899 +129,580.491272941079,-20.5816480004248,4.73650867475376 +130,1424.35498364231,-36.0279261115311,2.69503035887966 +131,204.96283910418,-4.56616804634005,5.42217165790203 +132,5354.01098355414,-72.9652412434823,-7.51444018193394 +133,263.825519349313,-11.0756331150067,4.83687666738926 +134,327.954063713436,11.7327801342422,5.39209048769379 +135,6239.71709353984,-77.478375790133,-6.37117827570423 +136,715.975323066471,16.133734695001,7.32967684642208 +137,942.515068622188,-23.9358831695317,6.6260238413758 +138,6154.43386742886,-76.1542692325353,-4.81950484817665 +139,387.119060921603,13.992909122283,5.35526765133811 +140,824.810503790244,-25.8458632692668,4.46658234665906 +141,117.172951648073,-7.04432340186688,3.74367515812841 +142,1507.66059326343,-38.7498577179414,-5.04863993007914 +143,510.528102941699,-13.8816226585557,6.4655652514649 +144,100.044875233336,3.53143032766324,4.17433835237583 +145,689.277414700175,18.8122590603734,6.50253241442298 +146,2496.04011656196,-45.3876994246683,6.26097547860195 +147,127.1545860245,9.99205418108014,2.44436403113535 +148,481.476335450749,15.0422808688224,5.94398029611013 +149,1353.88561282837,-34.5864321336299,3.76594567553051 +150,184.346721811444,-5.59124787191003,5.07103810451157 +151,396.310896560675,10.0066790715896,6.35691894888776 +152,4726.58063962337,-68.2309353153849,-6.87224341591423 +153,1404.45424812932,-34.0749980077669,5.10057665264805 +154,566.707172420212,-9.40065364833522,7.53308898405865 +155,3418.12692986761,-57.829383681368,-5.95639194961225 +156,1748.65198723494,-37.2033227674863,6.10851780345336 +157,1609.28274603409,-34.4091686838208,6.68369893556057 +158,157.743263692574,8.03154400480111,4.20180158265328 +159,3778.95541512035,-59.4002320137843,-3.11184085540226 +160,1931.20810938692,-38.2147900954803,6.84681028359785 +161,4855.7889457842,-66.2569615714253,4.74850018674578 +162,5099.01284357976,-70.1953003392248,-6.20349889837352 +163,2375.04479583692,-44.6747579070491,5.82515456113494 +164,5023.35401756607,-69.5895625336738,-6.05311998462936 +165,4134.51675557401,-61.2913139101584,4.16674853910934 +166,1002.60914469393,-26.483354252606,6.02239465549858 +167,665.160532689007,-21.7903008868779,5.10395316321703 +168,385.541470832298,0.073745029251427,7.0281583350019 +169,623.836895865029,-23.4508961529066,2.89761387202618 +170,3027.86117006423,-53.5509190800047,-4.21932840133027 +171,2932.45589922986,-50.3210224219694,5.63296518357781 +172,436.262247264762,-19.7673220482605,2.22553110861098 +173,4180.7332766444,-62.7529435847603,-4.22926064010545 +174,281.47584107678,-1.0056443961041,6.29513737744718 +175,295.681038149373,9.11685360583391,5.65698527339348 +176,576.372718565075,-16.0788172577744,6.42768336379429 +177,3827.5376605931,-60.7472746089456,-5.55464586574755 +178,5522.03789345077,-72.5231127207473,-5.51579295700968 +179,666.750243769772,-22.7981731659259,4.49198682795435 +180,475.7199236432,19.6660668196227,3.64148420380852 +181,1037.75730052679,-23.5629038821836,7.35262176775161 +182,1638.83866543962,-38.5783469113112,3.02021318149191 +183,3062.92052340059,-51.1063404093681,6.03471497049776 +184,708.572407562753,18.2706603166669,6.78944999627806 +185,4458.19058097416,-66.2343361416717,-6.70915493384912 +186,2233.74492942902,-46.2997114836124,-4.49306530292615 +187,791.18800628126,-17.3439604506534,7.50848299425606 +188,3075.06188384565,-54.2199534414422,-4.78130499830748 +189,6545.06377282888,-78.0130202992036,-2.63668460170823 +190,4937.15195710577,-66.6516093801645,5.06004587484896 +191,1291.93843627659,-34.6165007490255,0.583399526789241 +192,865.622239307848,-26.7403148978951,4.31368766951858 +193,319.013663810122,14.2157848317953,4.41056303292506 +194,5388.66087091134,-71.0047453498791,-3.79468263473337 +195,596.450670170539,15.9027257474234,6.61768189284391 +196,5328.05689241693,-70.160217182373,2.60756098062811 +197,788.711844540188,-19.4945251532755,6.9878316416505 +198,5185.03340019114,-71.8615847922921,-7.49369949325242 +199,953.830929960376,-21.3140043260099,7.49322822311989 diff --git a/tests/exec_test/reparam/sisso.json b/tests/exec_test/reparam/sisso.json index 4a19c4e7d3b81cbd0ae3a19391e82facbd87d0c8..eab9101fae15be0be9ffcab07f5fdaf82b40cb1b 100644 --- a/tests/exec_test/reparam/sisso.json +++ b/tests/exec_test/reparam/sisso.json @@ -1,16 +1,18 @@ { "desc_dim": 2, - "n_sis_select": 10, - "max_rung": 1, - "n_residual": 1, + "n_sis_select": 5, + "max_rung": 2, + "n_residual": 5, "data_file": "data.csv", "data_file_relatice_to_json": true, "property_key": "Prop", - "leave_out_frac": 0.05, - "n_rung_generate": 1, + "leave_out_frac": 0.00, + "n_models_store": 5, + "n_rung_generate": 0, "leave_out_inds": [], - "opset": ["add", "sub", "abs_diff", "mult", "div", "inv", "abs", "sq", "cb", "six_pow", "sqrt", "cbrt"], - "param_opset": ["log"], + "opset": ["sq"], + "param_opset": ["cb", "mult", "div"], "fix_intercept": true, - "reparam_residual": true + "reparam_residual": true, + "global_param_opt": false } diff --git a/tests/exec_test/reparam_gen_proj/check_model.py b/tests/exec_test/reparam_gen_proj/check_model.py new file mode 100644 index 0000000000000000000000000000000000000000..e02eb0afbe88515eb350b3eaf8409f207c234079 --- /dev/null +++ b/tests/exec_test/reparam_gen_proj/check_model.py @@ -0,0 +1,9 @@ +from sissopp import ModelRegressor +from pathlib import Path + +import numpy as np + +model = ModelRegressor( + str("models/train_dim_2_model_0.dat") +) +assert model.rmse < 1e-5 diff --git a/tests/exec_test/reparam_gen_proj/data.csv b/tests/exec_test/reparam_gen_proj/data.csv new file mode 100644 index 0000000000000000000000000000000000000000..cc8bb38c52ddfcecf61b37503c4a0228430b82ef --- /dev/null +++ b/tests/exec_test/reparam_gen_proj/data.csv @@ -0,0 +1,200 @@ +Sample,Prop,A,B +1,1052.00233422229,-26.9598915689615,6.20309137842541 +2,4371.49628958135,-63.7344834181458,-2.07120000760519 +3,5577.84794747112,-72.7950448428438,-5.35175942360518 +4,1691.1715045791,-37.0913938631186,5.68031092322494 +5,218.833409804625,-11.001120431754,4.2048615736526 +6,633.194959646112,18.4763248591176,6.17566186571887 +7,697.642291894055,-17.4403258467529,6.92812647427557 +8,2948.97628267587,-54.1451148162277,-6.19756109936816 +9,2249.25241059762,-43.8467983050434,5.36900839121948 +10,4397.88781266859,-62.5085507107758,5.46985716094317 +11,287.687759319659,-12.90112483941,4.51695259448722 +12,316.044698035476,-14.3204344263206,4.31361019159238 +13,3843.72511522851,-59.6968588654461,1.23276583113066 +14,4257.38194302416,-62.810861209267,1.54689699700947 +15,6334.253925868,-76.9929995375143,-4.03016563971121 +16,2286.53288181738,-43.4528362022336,6.06430752912011 +17,5629.56362306806,-71.7800444129219,4.0055528372609 +18,83.2295600051812,1.77903648082263,4.05561380769476 +19,3325.22666254028,-55.1550772610619,3.3563357705763 +20,156.96174494603,3.91891619301887,4.94757258787117 +21,2630.96022078008,-47.2911803424441,5.79435935916502 +22,472.484928902339,-6.67172116893789,7.26562002978181 +23,628.722467071999,-14.0940878772357,7.2069561460293 +24,637.756546534934,18.4524777037321,6.21984544170837 +25,164.703912166199,-5.62128870102401,4.82424056438207 +26,5581.03743720886,-72.6184893467069,-4.92128310616193 +27,233.078543209301,10.8174877144636,4.49706215680815 +28,269.064737240481,6.42828632159915,5.82798957027128 +29,5247.19546567351,-69.436530178802,3.46670333009828 +30,677.587972192927,-24.2686365786508,3.25022879358702 +31,3633.68998298433,-59.2619394123934,-5.57530696788716 +32,152.588491561582,7.20352530063482,4.33945272208388 +33,304.984140359693,12.6288219954758,4.85589577512029 +34,36.6348213098156,5.11720640360599,1.78404138767965 +35,436.444377844443,13.7862783611727,5.89130488963502 +36,5750.17983692783,-74.8066238254682,-6.79545197302518 +37,2094.45352560741,-40.6205669665801,6.56333441142877 +38,147.790372824609,-5.92487161906894,4.54084137161217 +39,245.996666987969,9.30851852302476,5.09404052158133 +40,5343.15303906939,-70.3943965755962,1.18563361394154 +41,4467.75534620733,-63.093837937864,5.37291203149488 +42,4827.30262519124,-68.2755606153041,-6.06130670169955 +43,232.83836640407,-9.78367054387746,4.81169871034718 +44,1638.91786368219,-35.9559408271055,6.01319272477161 +45,3004.130680277,-51.955532416585,4.31491433634095 +46,2899.88701443074,-50.7866432699566,4.68656532904279 +47,743.291230416591,-18.5646811911955,6.9411883920925 +48,849.887843952986,19.3289803897382,7.39753609011762 +49,320.697989982805,8.65080448547252,5.96489604486524 +50,4786.77325154449,-65.7857361126348,4.72218888584055 +51,580.013350094908,-13.889527800167,6.94269262242959 +52,790.301306077083,-25.6846232941466,4.04753981057489 +53,2639.31299006254,-46.389849089785,6.59114304749694 +54,2529.23456493816,-45.9448330787616,6.08615676832293 +55,218.528501182286,1.21024970063709,5.7587839043402 +56,102.85175114182,6.82015137032394,3.49977958604301 +57,98.1890265822661,8.93502324443354,2.04921876907686 +58,3130.40886660874,-51.9509054197567,5.80433974737791 +59,357.854902006621,-14.9239411443508,4.65257579553207 +60,1270.26516902747,-31.416557856837,5.66182950995689 +61,3954.06850125917,-60.033076560273,3.87563602766626 +62,3108.31509869172,-52.2120406857653,5.29524959724945 +63,79.8726415057673,-7.60975121560017,2.34462882567642 +64,1205.71009861928,-30.0109652633393,5.92195946506532 +65,541.236564148688,15.5234123258985,6.30415543102122 +66,585.715705703022,11.4466418568071,7.38183174443396 +67,1155.39988989893,-28.2644698934095,6.40301931832396 +68,3387.31422429564,-56.2690045870611,-3.16489568909402 +69,2189.64918981506,-43.1632002022201,5.41607643231959 +70,2475.89251675601,-47.1771065084369,4.01115806304705 +71,4834.77677391605,-66.0540149800446,4.85207155106912 +72,342.528746483897,-6.85891697714553,6.38300436770026 +73,650.708719137237,16.5158104574122,6.84234021019956 +74,5947.66678699085,-75.4835322367884,-6.02472622750375 +75,395.187879280987,-2.56841533011229,7.04412696145218 +76,3939.01749538613,-61.6766293536255,-5.68335304418137 +77,341.095784378799,-11.5723032332386,5.56645932478254 +78,523.001059184589,16.6491893365343,5.82569987566845 +79,2431.60044712179,-45.409836204165,5.68837636926732 +80,1939.01373373761,-39.5132873144389,6.1034611758802 +81,191.930782192942,5.86003773869783,5.12080689791401 +82,2832.37227327965,-50.1081985824405,4.77064964515006 +83,5909.49629601525,-73.7200587656617,3.50171265693252 +84,672.15890407407,-18.702078055099,6.40865230721314 +85,2037.24835588279,-41.3278643201009,5.5648756901726 +86,216.515211584561,4.32102167924892,5.56267558043512 +87,474.862486861938,-7.89579168858238,7.16490483392694 +88,710.986921377433,-24.1840519644013,4.0713822084246 +89,967.970852191141,-25.6857212498618,6.10769109641322 +90,2877.22081792368,-49.1007606547447,6.28521082722151 +91,3206.46349491423,-54.0537986772741,3.6152813743562 +92,3267.77633202847,-55.7673374815322,-4.62490789885554 +93,458.047087729138,-15.0617323836765,5.72745419459021 +94,2292.91309984418,-43.2127870741805,6.29644670618342 +95,5918.62096137796,-75.4966175565072,-6.32089368622665 +96,755.972175216695,-17.0276183617925,7.37611234304879 +97,4009.61460487708,-60.7934359649989,2.74115588610843 +98,5809.56734039514,-75.4236464811022,-7.09654428017805 +99,3330.85902527185,-54.7106879317446,4.46993649630659 +100,1234.13889141749,-31.4470701142083,5.27248086984354 +101,2196.24871973015,-43.5832066780196,5.05433014634953 +102,1369.80366067869,-31.2961341604768,6.54900431568322 +103,1716.23065859536,-39.669540069504,2.48017631835462 +104,4836.75339571112,-68.7382726486335,-6.59236849918175 +105,2487.57592893521,-46.6408752377136,4.98261316030784 +106,3913.40492263418,-59.0856505796252,5.07717363106205 +107,161.276806697414,0.99516304638658,5.18120421245594 +108,1445.98631993368,-34.8685562807829,4.88944205656418 +109,733.399646418029,19.4891331200602,6.61882860403088 +110,411.000186118061,-1.88822533937767,7.16175336134506 +111,603.265824987431,14.1380244400304,7.04275295570392 +112,1346.02292894135,-34.3623602661506,3.93990434191016 +113,3917.76102677697,-61.4012210435464,-5.50512423996943 +114,649.344881143125,-13.4194423080587,7.44294190409633 +115,3817.36685782506,-58.3448857005669,5.05008735202479 +116,3088.07779745063,-51.2213511900404,6.13827583510343 +117,1685.69963655783,-37.7322290284518,5.07995407531594 +118,443.988302336616,11.4611946675192,6.46234283374064 +119,3412.11780803484,-56.8288336135006,-4.33556409714628 +120,377.521452451852,19.1441244058617,-2.84314888891916 +121,4361.17474608258,-64.3520862004493,-4.91639542713793 +122,115.627130132655,3.6291958906162,4.41365864133484 +123,4697.44085035487,-68.0890665063311,-6.9347275448216 +124,19.3386439875286,-0.03986491591472,2.4340824467087 +125,1946.49315523071,-39.2030697053123,6.37109682689095 +126,711.719581617268,-22.2993020682629,5.35242978951016 +127,1163.53596472028,-26.276537455132,7.23566291150618 +128,509.368706775951,-19.6525068195878,4.28316435049899 +129,580.491272941079,-20.5816480004248,4.73650867475376 +130,1424.35498364231,-36.0279261115311,2.69503035887966 +131,204.96283910418,-4.56616804634005,5.42217165790203 +132,5354.01098355414,-72.9652412434823,-7.51444018193394 +133,263.825519349313,-11.0756331150067,4.83687666738926 +134,327.954063713436,11.7327801342422,5.39209048769379 +135,6239.71709353984,-77.478375790133,-6.37117827570423 +136,715.975323066471,16.133734695001,7.32967684642208 +137,942.515068622188,-23.9358831695317,6.6260238413758 +138,6154.43386742886,-76.1542692325353,-4.81950484817665 +139,387.119060921603,13.992909122283,5.35526765133811 +140,824.810503790244,-25.8458632692668,4.46658234665906 +141,117.172951648073,-7.04432340186688,3.74367515812841 +142,1507.66059326343,-38.7498577179414,-5.04863993007914 +143,510.528102941699,-13.8816226585557,6.4655652514649 +144,100.044875233336,3.53143032766324,4.17433835237583 +145,689.277414700175,18.8122590603734,6.50253241442298 +146,2496.04011656196,-45.3876994246683,6.26097547860195 +147,127.1545860245,9.99205418108014,2.44436403113535 +148,481.476335450749,15.0422808688224,5.94398029611013 +149,1353.88561282837,-34.5864321336299,3.76594567553051 +150,184.346721811444,-5.59124787191003,5.07103810451157 +151,396.310896560675,10.0066790715896,6.35691894888776 +152,4726.58063962337,-68.2309353153849,-6.87224341591423 +153,1404.45424812932,-34.0749980077669,5.10057665264805 +154,566.707172420212,-9.40065364833522,7.53308898405865 +155,3418.12692986761,-57.829383681368,-5.95639194961225 +156,1748.65198723494,-37.2033227674863,6.10851780345336 +157,1609.28274603409,-34.4091686838208,6.68369893556057 +158,157.743263692574,8.03154400480111,4.20180158265328 +159,3778.95541512035,-59.4002320137843,-3.11184085540226 +160,1931.20810938692,-38.2147900954803,6.84681028359785 +161,4855.7889457842,-66.2569615714253,4.74850018674578 +162,5099.01284357976,-70.1953003392248,-6.20349889837352 +163,2375.04479583692,-44.6747579070491,5.82515456113494 +164,5023.35401756607,-69.5895625336738,-6.05311998462936 +165,4134.51675557401,-61.2913139101584,4.16674853910934 +166,1002.60914469393,-26.483354252606,6.02239465549858 +167,665.160532689007,-21.7903008868779,5.10395316321703 +168,385.541470832298,0.073745029251427,7.0281583350019 +169,623.836895865029,-23.4508961529066,2.89761387202618 +170,3027.86117006423,-53.5509190800047,-4.21932840133027 +171,2932.45589922986,-50.3210224219694,5.63296518357781 +172,436.262247264762,-19.7673220482605,2.22553110861098 +173,4180.7332766444,-62.7529435847603,-4.22926064010545 +174,281.47584107678,-1.0056443961041,6.29513737744718 +175,295.681038149373,9.11685360583391,5.65698527339348 +176,576.372718565075,-16.0788172577744,6.42768336379429 +177,3827.5376605931,-60.7472746089456,-5.55464586574755 +178,5522.03789345077,-72.5231127207473,-5.51579295700968 +179,666.750243769772,-22.7981731659259,4.49198682795435 +180,475.7199236432,19.6660668196227,3.64148420380852 +181,1037.75730052679,-23.5629038821836,7.35262176775161 +182,1638.83866543962,-38.5783469113112,3.02021318149191 +183,3062.92052340059,-51.1063404093681,6.03471497049776 +184,708.572407562753,18.2706603166669,6.78944999627806 +185,4458.19058097416,-66.2343361416717,-6.70915493384912 +186,2233.74492942902,-46.2997114836124,-4.49306530292615 +187,791.18800628126,-17.3439604506534,7.50848299425606 +188,3075.06188384565,-54.2199534414422,-4.78130499830748 +189,6545.06377282888,-78.0130202992036,-2.63668460170823 +190,4937.15195710577,-66.6516093801645,5.06004587484896 +191,1291.93843627659,-34.6165007490255,0.583399526789241 +192,865.622239307848,-26.7403148978951,4.31368766951858 +193,319.013663810122,14.2157848317953,4.41056303292506 +194,5388.66087091134,-71.0047453498791,-3.79468263473337 +195,596.450670170539,15.9027257474234,6.61768189284391 +196,5328.05689241693,-70.160217182373,2.60756098062811 +197,788.711844540188,-19.4945251532755,6.9878316416505 +198,5185.03340019114,-71.8615847922921,-7.49369949325242 +199,953.830929960376,-21.3140043260099,7.49322822311989 diff --git a/tests/exec_test/reparam_gen_proj/sisso.json b/tests/exec_test/reparam_gen_proj/sisso.json new file mode 100644 index 0000000000000000000000000000000000000000..33dd14a13c3baf6fe149395195406db8ccb58962 --- /dev/null +++ b/tests/exec_test/reparam_gen_proj/sisso.json @@ -0,0 +1,18 @@ +{ + "desc_dim": 2, + "n_sis_select": 5, + "max_rung": 2, + "n_residual": 5, + "data_file": "data.csv", + "data_file_relatice_to_json": true, + "property_key": "Prop", + "leave_out_frac": 0.00, + "n_models_store": 5, + "n_rung_generate": 1, + "leave_out_inds": [], + "opset": ["sq"], + "param_opset": ["cb", "mult", "div"], + "fix_intercept": true, + "reparam_residual": true, + "global_param_opt": false +} diff --git a/tests/googletest/descriptor_identification/model/test_model_log_regressor.cc b/tests/googletest/descriptor_identification/model/test_model_log_regressor.cc index 972a3761569cf897e0414b46c29995093587e537..165a0c4ce3d4d0e28c07a6e73cecf00cefa64ed8 100644 --- a/tests/googletest/descriptor_identification/model/test_model_log_regressor.cc +++ b/tests/googletest/descriptor_identification/model/test_model_log_regressor.cc @@ -235,4 +235,48 @@ namespace boost::filesystem::remove("train_true_log_reg.dat"); boost::filesystem::remove("test_true_log_reg.dat"); } + + TEST_F(ModelLogRegssorTests, EvalTest) + { + _loss = std::make_shared<LossFunctionLogPearsonRMSE>( + _prop, + _prop_test, + _task_sizes_train, + _task_sizes_test, + false, + 2 + ); + + ModelLogRegressor model( + "Property", + Unit("m"), + _loss, + _features, + _leave_out_inds, + _sample_ids_train, + _sample_ids_test, + task_names + ); + + model.set_task_eval(0); + std::vector<double> pt = {2.0, 2.0}; + double val = model.eval(pt); + EXPECT_LT(val - 0.00025, 1e-10); + + std::map<std::string, double> pt_dct; + pt_dct["A"] = 1.0; + pt_dct["B"] = 1.0; + val = model.eval(pt_dct); + EXPECT_LT(val - 0.00025, 1e-10); + + std::vector<std::vector<double>> pts = {{1.0}, {1.0}}; + val = model.eval(pts)[0]; + EXPECT_LT(val - 0.00025, 1e-10); + + std::map<std::string, std::vector<double>> pts_dct; + pts_dct["A"] = {1.0}; + pts_dct["B"] = {1.0}; + val = model.eval(pts_dct)[0]; + EXPECT_LT(val - 0.00025, 1e-10); + } } diff --git a/tests/googletest/descriptor_identification/model/test_model_regressor.cc b/tests/googletest/descriptor_identification/model/test_model_regressor.cc index 72205435ef93a25b585933a437498bf12268d6d9..9ad720333d6a6638d75c8caf9bb7e43421f2ea4a 100644 --- a/tests/googletest/descriptor_identification/model/test_model_regressor.cc +++ b/tests/googletest/descriptor_identification/model/test_model_regressor.cc @@ -252,4 +252,50 @@ namespace boost::filesystem::remove("train_true.dat"); boost::filesystem::remove("test_true.dat"); } + + TEST_F(ModelRegssorTests, EvalTest) + { + _loss = std::make_shared<LossFunctionPearsonRMSE>( + _prop, + _prop_test, + _task_sizes_train, + _task_sizes_test, + false, + 2 + ); + + ModelRegressor model( + "Property", + Unit("m"), + _loss, + _features, + _leave_out_inds, + _sample_ids_train, + _sample_ids_test, + task_names + ); + + model.set_task_eval(0); + std::vector<double> pt = {1.0, 1.0}; + EXPECT_LT(model.eval(pt) - 2.001, 1e-10); + + std::map<std::string, double> pt_dct; + pt_dct["A"] = 1.0; + pt_dct["B"] = 1.0; + EXPECT_LT(model.eval(pt_dct) - 2.001, 1e-10); + + std::vector<std::vector<double>> pts = {{1.0}, {1.0}}; + EXPECT_LT(model.eval(pts)[0] - 2.001, 1e-10); + + std::map<std::string, std::vector<double>> pts_dct; + pts_dct["A"] = {1.0}; + pts_dct["B"] = {1.0}; + EXPECT_LT(model.eval(pts_dct)[0] - 2.001, 1e-10); + + model.set_task_eval(1); + EXPECT_LT(model.eval(pt) + 5.65, 1e-10); + EXPECT_LT(model.eval(pt_dct) + 5.65, 1e-10); + EXPECT_LT(model.eval(pts)[0] + 5.65, 1e-10); + EXPECT_LT(model.eval(pts_dct)[0] + 5.65, 1e-10); + } } diff --git a/tests/googletest/descriptor_identification/solver/test_sisso_classifier.cc b/tests/googletest/descriptor_identification/solver/test_sisso_classifier.cc index 84b3790a9e3f8440f78880e3a507fff94b29aa82..e3a510d88ed5723da902264cbbc70fcb2532769e 100644 --- a/tests/googletest/descriptor_identification/solver/test_sisso_classifier.cc +++ b/tests/googletest/descriptor_identification/solver/test_sisso_classifier.cc @@ -1,198 +1,198 @@ -// Copyright 2021 Thomas A. R. Purcell -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -#include <descriptor_identifier/solver/SISSOClassifier.hpp> -#include <boost/filesystem.hpp> -#include "gtest/gtest.h" -#include <random> - -namespace -{ - class SISSOClassifierTests : public ::testing::Test - { - protected: - void SetUp() override - { - allowed_op_maps::set_node_maps(); - node_value_arrs::initialize_d_matrix_arr(); - mpi_setup::init_mpi_env(); - - std::vector<int> task_sizes_train = {80}; - std::vector<int> task_sizes_test = {20}; - - node_value_arrs::initialize_values_arr(task_sizes_train, task_sizes_test, 3, 2, false); - - std::vector<std::string> sample_ids_train(task_sizes_train[0]); - for(int ii = 0; ii < task_sizes_train[0]; ++ii) - { - sample_ids_train[ii] = std::to_string(ii); - } - - std::vector<std::string> sample_ids_test(task_sizes_test[0]); - std::vector<int> leave_out_inds(task_sizes_test[0]); - for(int ii = 0; ii < task_sizes_test[0]; ++ii) - { - sample_ids_test[ii] = std::to_string(ii); - leave_out_inds[ii] = ii; - } - - std::vector<std::string> task_names = {"all"}; - - std::vector<double> value_1(task_sizes_train[0], 0.0); - std::vector<double> value_2(task_sizes_train[0], 0.0); - std::vector<double> value_3(task_sizes_train[0], 0.0); - - std::vector<double> test_value_1(task_sizes_test[0], 0.0); - std::vector<double> test_value_2(task_sizes_test[0], 0.0); - std::vector<double> test_value_3(task_sizes_test[0], 0.0); - - std::default_random_engine generator; - std::uniform_real_distribution<double> distribution_12_pos(1.0, 2.0); - std::uniform_real_distribution<double> distribution_12_neg(-2.0, -1.0); - std::uniform_real_distribution<double> distribution_3(-10.0, 10.0); - - for(int ii = 0; ii < 20; ++ii) - { - value_1[ii] = distribution_12_neg(generator); - value_2[ii] = distribution_12_neg(generator); - value_3[ii] = distribution_3(generator); - } - for(int ii = 20; ii < 40; ++ii) - { - value_1[ii] = distribution_12_pos(generator); - value_2[ii] = distribution_12_pos(generator); - value_3[ii] = distribution_3(generator); - } - for(int ii = 40; ii < 60; ++ii) - { - value_1[ii] = distribution_12_neg(generator); - value_2[ii] = distribution_12_pos(generator); - value_3[ii] = distribution_3(generator); - } - for(int ii = 60; ii < 80; ++ii) - { - value_1[ii] = distribution_12_pos(generator); - value_2[ii] = distribution_12_neg(generator); - value_3[ii] = distribution_3(generator); - } - - for(int ii = 0; ii < 5; ++ii) - { - test_value_1[ii] = distribution_12_neg(generator); - test_value_2[ii] = distribution_12_neg(generator); - test_value_3[ii] = distribution_3(generator); - } - - for(int ii = 5; ii < 10; ++ii) - { - test_value_1[ii] = distribution_12_pos(generator); - test_value_2[ii] = distribution_12_pos(generator); - test_value_3[ii] = distribution_3(generator); - } - - for(int ii = 10; ii < 15; ++ii) - { - test_value_1[ii] = distribution_12_neg(generator); - test_value_2[ii] = distribution_12_pos(generator); - test_value_3[ii] = distribution_3(generator); - } - - for(int ii = 15; ii < 20; ++ii) - { - test_value_1[ii] = distribution_12_pos(generator); - test_value_2[ii] = distribution_12_neg(generator); - test_value_3[ii] = distribution_3(generator); - } - - FeatureNode feat_1(0, "A", value_1, test_value_1, Unit("m")); - FeatureNode feat_2(1, "B", value_2, test_value_2, Unit("m")); - FeatureNode feat_3(2, "C", value_3, test_value_3, Unit()); - - std::vector<double> prop = std::vector<double>(task_sizes_train[0], 0.0); - std::vector<double> prop_test = std::vector<double>(task_sizes_test[0], 0.0); - - std::fill_n(prop.begin() + 20, 20, 1.0); - std::fill_n(prop.begin() + 40, 20, 2.0); - std::fill_n(prop.begin() + 60, 20, 3.0); - std::fill_n(prop_test.begin() + 5, 5, 1.0); - std::fill_n(prop_test.begin() + 10, 5, 2.0); - std::fill_n(prop_test.begin() + 15, 5, 3.0); - - std::vector<FeatureNode> phi_0 ={feat_1, feat_2, feat_3}; - - std::vector<std::string> allowed_ops = {"sq", "cb", "sqrt", "cbrt", "six_pow", "inv", "abs"}; - std::vector<std::string> allowed_param_ops = {}; - - inputs.set_calc_type("classification"); - inputs.set_phi_0(phi_0); - inputs.set_prop_train(prop); - inputs.set_prop_test(prop_test); - - inputs.set_task_names(task_names); - inputs.set_task_sizes_train(task_sizes_train); - inputs.set_task_sizes_test(task_sizes_test); - inputs.set_leave_out_inds(leave_out_inds); - - inputs.set_sample_ids_train(sample_ids_train); - inputs.set_sample_ids_test(sample_ids_test); - - inputs.set_allowed_param_ops(allowed_param_ops); - inputs.set_allowed_ops(allowed_ops); - - inputs.set_max_rung(2); - inputs.set_n_sis_select(5); - inputs.set_n_rung_store(1); - inputs.set_n_rung_generate(0); - - inputs.set_prop_label("Class"); - inputs.set_prop_unit(Unit()); - inputs.set_n_dim(2); - inputs.set_n_residual(2); - inputs.set_n_models_store(3); - } - - InputParser inputs; - }; - - TEST_F(SISSOClassifierTests, FixInterceptFalseTest) - { - std::shared_ptr<FeatureSpace> feat_space = std::make_shared<FeatureSpace>(inputs); - SISSOClassifier sisso(inputs, feat_space); - - std::vector<double> prop_comp(80, 0.0); - std::transform(inputs.prop_train().begin(), inputs.prop_train().end(), sisso.prop_train().begin(), prop_comp.begin(), [](double p1, double p2){return std::abs(p1 - p2);}); - EXPECT_FALSE(std::any_of(prop_comp.begin(), prop_comp.end(), [](double p){return p > 1e-10;})); - - std::transform(inputs.prop_test().begin(), inputs.prop_test().begin() + 10, sisso.prop_test().begin(), prop_comp.begin(), [](double p1, double p2){return std::abs(p1 - p2);}); - EXPECT_FALSE(std::any_of(prop_comp.begin(), prop_comp.begin() + 10, [](double p){return p > 1e-10;})); - - EXPECT_EQ(sisso.n_samp(), 80); - EXPECT_EQ(sisso.n_dim(), 2); - EXPECT_EQ(sisso.n_residual(), 2); - EXPECT_EQ(sisso.n_models_store(), 3); - - sisso.fit(); - - EXPECT_EQ(sisso.models().size(), 2); - EXPECT_EQ(sisso.models()[0].size(), 3); - - EXPECT_EQ(sisso.models().back()[0].n_convex_overlap_train(), 0); - EXPECT_EQ(sisso.models().back()[0].n_convex_overlap_test(), 0); - - EXPECT_EQ(sisso.models().back()[0].n_svm_misclassified_train(), 0); - EXPECT_EQ(sisso.models().back()[0].n_svm_misclassified_test(), 0); - - boost::filesystem::remove_all("feature_space/"); - boost::filesystem::remove_all("models/"); - } -} +// // Copyright 2021 Thomas A. R. Purcell +// // +// // Licensed under the Apache License, Version 2.0 (the "License"); +// // you may not use this file except in compliance with the License. +// // You may obtain a copy of the License at +// // +// // http://www.apache.org/licenses/LICENSE-2.0 +// // +// // Unless required by applicable law or agreed to in writing, software +// // distributed under the License is distributed on an "AS IS" BASIS, +// // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// // See the License for the specific language governing permissions and +// // limitations under the License. +// #include <descriptor_identifier/solver/SISSOClassifier.hpp> +// #include <boost/filesystem.hpp> +// #include "gtest/gtest.h" +// #include <random> + +// namespace +// { +// class SISSOClassifierTests : public ::testing::Test +// { +// protected: +// void SetUp() override +// { +// allowed_op_maps::set_node_maps(); +// node_value_arrs::initialize_d_matrix_arr(); +// mpi_setup::init_mpi_env(); + +// std::vector<int> task_sizes_train = {80}; +// std::vector<int> task_sizes_test = {20}; + +// node_value_arrs::initialize_values_arr(task_sizes_train, task_sizes_test, 3, 2, false); + +// std::vector<std::string> sample_ids_train(task_sizes_train[0]); +// for(int ii = 0; ii < task_sizes_train[0]; ++ii) +// { +// sample_ids_train[ii] = std::to_string(ii); +// } + +// std::vector<std::string> sample_ids_test(task_sizes_test[0]); +// std::vector<int> leave_out_inds(task_sizes_test[0]); +// for(int ii = 0; ii < task_sizes_test[0]; ++ii) +// { +// sample_ids_test[ii] = std::to_string(ii); +// leave_out_inds[ii] = ii; +// } + +// std::vector<std::string> task_names = {"all"}; + +// std::vector<double> value_1(task_sizes_train[0], 0.0); +// std::vector<double> value_2(task_sizes_train[0], 0.0); +// std::vector<double> value_3(task_sizes_train[0], 0.0); + +// std::vector<double> test_value_1(task_sizes_test[0], 0.0); +// std::vector<double> test_value_2(task_sizes_test[0], 0.0); +// std::vector<double> test_value_3(task_sizes_test[0], 0.0); + +// std::default_random_engine generator; +// std::uniform_real_distribution<double> distribution_12_pos(1.0, 2.0); +// std::uniform_real_distribution<double> distribution_12_neg(-2.0, -1.0); +// std::uniform_real_distribution<double> distribution_3(-10.0, 10.0); + +// for(int ii = 0; ii < 20; ++ii) +// { +// value_1[ii] = distribution_12_neg(generator); +// value_2[ii] = distribution_12_neg(generator); +// value_3[ii] = distribution_3(generator); +// } +// for(int ii = 20; ii < 40; ++ii) +// { +// value_1[ii] = distribution_12_pos(generator); +// value_2[ii] = distribution_12_pos(generator); +// value_3[ii] = distribution_3(generator); +// } +// for(int ii = 40; ii < 60; ++ii) +// { +// value_1[ii] = distribution_12_neg(generator); +// value_2[ii] = distribution_12_pos(generator); +// value_3[ii] = distribution_3(generator); +// } +// for(int ii = 60; ii < 80; ++ii) +// { +// value_1[ii] = distribution_12_pos(generator); +// value_2[ii] = distribution_12_neg(generator); +// value_3[ii] = distribution_3(generator); +// } + +// for(int ii = 0; ii < 5; ++ii) +// { +// test_value_1[ii] = distribution_12_neg(generator); +// test_value_2[ii] = distribution_12_neg(generator); +// test_value_3[ii] = distribution_3(generator); +// } + +// for(int ii = 5; ii < 10; ++ii) +// { +// test_value_1[ii] = distribution_12_pos(generator); +// test_value_2[ii] = distribution_12_pos(generator); +// test_value_3[ii] = distribution_3(generator); +// } + +// for(int ii = 10; ii < 15; ++ii) +// { +// test_value_1[ii] = distribution_12_neg(generator); +// test_value_2[ii] = distribution_12_pos(generator); +// test_value_3[ii] = distribution_3(generator); +// } + +// for(int ii = 15; ii < 20; ++ii) +// { +// test_value_1[ii] = distribution_12_pos(generator); +// test_value_2[ii] = distribution_12_neg(generator); +// test_value_3[ii] = distribution_3(generator); +// } + +// FeatureNode feat_1(0, "A", value_1, test_value_1, Unit("m")); +// FeatureNode feat_2(1, "B", value_2, test_value_2, Unit("m")); +// FeatureNode feat_3(2, "C", value_3, test_value_3, Unit()); + +// std::vector<double> prop = std::vector<double>(task_sizes_train[0], 0.0); +// std::vector<double> prop_test = std::vector<double>(task_sizes_test[0], 0.0); + +// std::fill_n(prop.begin() + 20, 20, 1.0); +// std::fill_n(prop.begin() + 40, 20, 2.0); +// std::fill_n(prop.begin() + 60, 20, 3.0); +// std::fill_n(prop_test.begin() + 5, 5, 1.0); +// std::fill_n(prop_test.begin() + 10, 5, 2.0); +// std::fill_n(prop_test.begin() + 15, 5, 3.0); + +// std::vector<FeatureNode> phi_0 ={feat_1, feat_2, feat_3}; + +// std::vector<std::string> allowed_ops = {"sq", "cb", "sqrt", "cbrt", "six_pow", "inv", "abs"}; +// std::vector<std::string> allowed_param_ops = {}; + +// inputs.set_calc_type("classification"); +// inputs.set_phi_0(phi_0); +// inputs.set_prop_train(prop); +// inputs.set_prop_test(prop_test); + +// inputs.set_task_names(task_names); +// inputs.set_task_sizes_train(task_sizes_train); +// inputs.set_task_sizes_test(task_sizes_test); +// inputs.set_leave_out_inds(leave_out_inds); + +// inputs.set_sample_ids_train(sample_ids_train); +// inputs.set_sample_ids_test(sample_ids_test); + +// inputs.set_allowed_param_ops(allowed_param_ops); +// inputs.set_allowed_ops(allowed_ops); + +// inputs.set_max_rung(2); +// inputs.set_n_sis_select(5); +// inputs.set_n_rung_store(1); +// inputs.set_n_rung_generate(0); + +// inputs.set_prop_label("Class"); +// inputs.set_prop_unit(Unit()); +// inputs.set_n_dim(2); +// inputs.set_n_residual(2); +// inputs.set_n_models_store(3); +// } + +// InputParser inputs; +// }; + +// TEST_F(SISSOClassifierTests, FixInterceptFalseTest) +// { +// std::shared_ptr<FeatureSpace> feat_space = std::make_shared<FeatureSpace>(inputs); +// SISSOClassifier sisso(inputs, feat_space); + +// std::vector<double> prop_comp(80, 0.0); +// std::transform(inputs.prop_train().begin(), inputs.prop_train().end(), sisso.prop_train().begin(), prop_comp.begin(), [](double p1, double p2){return std::abs(p1 - p2);}); +// EXPECT_FALSE(std::any_of(prop_comp.begin(), prop_comp.end(), [](double p){return p > 1e-10;})); + +// std::transform(inputs.prop_test().begin(), inputs.prop_test().begin() + 10, sisso.prop_test().begin(), prop_comp.begin(), [](double p1, double p2){return std::abs(p1 - p2);}); +// EXPECT_FALSE(std::any_of(prop_comp.begin(), prop_comp.begin() + 10, [](double p){return p > 1e-10;})); + +// EXPECT_EQ(sisso.n_samp(), 80); +// EXPECT_EQ(sisso.n_dim(), 2); +// EXPECT_EQ(sisso.n_residual(), 2); +// EXPECT_EQ(sisso.n_models_store(), 3); + +// sisso.fit(); + +// EXPECT_EQ(sisso.models().size(), 2); +// EXPECT_EQ(sisso.models()[0].size(), 3); + +// EXPECT_EQ(sisso.models().back()[0].n_convex_overlap_train(), 0); +// EXPECT_EQ(sisso.models().back()[0].n_convex_overlap_test(), 0); + +// EXPECT_EQ(sisso.models().back()[0].n_svm_misclassified_train(), 0); +// EXPECT_EQ(sisso.models().back()[0].n_svm_misclassified_test(), 0); + +// boost::filesystem::remove_all("feature_space/"); +// boost::filesystem::remove_all("models/"); +// } +// } diff --git a/tests/pytest/test_descriptor_identifier/matlab_functions/model_log_regressor.m b/tests/pytest/test_descriptor_identifier/matlab_functions/model_log_regressor.m new file mode 100644 index 0000000000000000000000000000000000000000..d11bc207f86525d837235cf34ea563a99197708f --- /dev/null +++ b/tests/pytest/test_descriptor_identifier/matlab_functions/model_log_regressor.m @@ -0,0 +1,25 @@ +function P = model_log_regressor(X) +% Returns the value of $Prop$ = exp(c0) * ((B + A))^a0 * ((|D - B|))^a1 +% +% X = [ +% B, +% A, +% D, +% ] + +if(size(X, 2) ~= 3) + error("ERROR: X must have a size of 3 in the second dimension.") +end +B = reshape(X(:, 1), 1, []); +A = reshape(X(:, 2), 1, []); +D = reshape(X(:, 3), 1, []); + +f0 = (B + A); +f1 = abs(D - B); + +c0 = 2.1945699276e-13; +a0 = 1.2000000000e+00; +a1 = -1.9500000000e+00; + +P = reshape(exp(c0) .* f0.^a0 .* f1.^a1, [], 1); +end diff --git a/tests/pytest/test_descriptor_identifier/matlab_functions/model_regressor.m b/tests/pytest/test_descriptor_identifier/matlab_functions/model_regressor.m new file mode 100644 index 0000000000000000000000000000000000000000..67981df18c5fa69193bbb921356e1f0bf5d51c7f --- /dev/null +++ b/tests/pytest/test_descriptor_identifier/matlab_functions/model_regressor.m @@ -0,0 +1,27 @@ +function P = model_regressor(X) +% Returns the value of $Prop$ = c0 + a0 * ((B / A) / A) + a1 * ((D + C) + (|D|)) +% +% X = [ +% B, +% A, +% D, +% C, +% ] + +if(size(X, 2) ~= 4) + error("ERROR: X must have a size of 4 in the second dimension.") +end +B = reshape(X(:, 1), 1, []); +A = reshape(X(:, 2), 1, []); +D = reshape(X(:, 3), 1, []); +C = reshape(X(:, 4), 1, []); + +f0 = ((B ./ A) ./ A); +f1 = ((D + C) + abs(D)); + +c0 = 3.1415899996e+00; +a0 = -7.2154784853e+00; +a1 = 8.2271800000e+01; + +P = reshape(c0 + a0 * f0 + a1 * f1, [], 1); +end diff --git a/tests/pytest/test_descriptor_identifier/model_files/test.dat b/tests/pytest/test_descriptor_identifier/model_files/test.dat deleted file mode 100644 index ad9c3384d1bd5530d2703e3a0802fb1075ff3550..0000000000000000000000000000000000000000 --- a/tests/pytest/test_descriptor_identifier/model_files/test.dat +++ /dev/null @@ -1,22 +0,0 @@ -# c0 + a0 * [(B) / (1.000000*(1.000000*A + 0.000000)^2 + 0.000000)] + a1 * C -# Property of the Unit: Unitless -# RMSE: 1.85169904965289e-09; Max AE: 3.25962901115417e-09 -# Coefficients -# Task a0 a1 c0 -# 0, -7.215479542045696e+00, 8.227180000000007e+01, 3.141589999622815e+00, -# 1, 9.914521341156420e+01, -1.423659000000001e+02, -5.254860000110127e+00, -# Feature Rung, Domain, Units, and Expressions -# 0; 2; (-inf, inf); m^-2 * s; 1|0|sq:1.0,0.0|div:1.0,0.0; [(B) / (1.000000*(1.000000*A + 0.000000)^2 + 0.000000)] -# 1; 0; [-2.971577187309380e+03, 2.622065505551910e+04]; Unitless; 2; C -# Number of Samples Per Task -# Task; n_mats_test -# 0, 3 -# 1, 2 -# Test Indexes: [ 0, 1, 2, 60, 61 ] - -#Property Value Property Value (EST) Feature 0 Value Feature 1 Value - 1.031303343104370e+06, 1.031303343104372e+06, 5.087963053254981e-08, 1.253528185252710e+04 - 2.071791819726890e+05, 2.071791819726897e+05, 6.929206698600502e-07, 2.518190198679130e+03 - 5.945479900349240e+05, 5.945479900349238e+05, 7.732840323401594e-08, 7.226593418953780e+03 --1.747903770607640e+06, -1.747903770607637e+06, 3.089720438913970e-07, 1.227750827816400e+04 --6.020310027164250e+05, -6.020310027164250e+05, 7.913240374082342e-08, 4.228721539808830e+03 diff --git a/tests/pytest/test_descriptor_identifier/model_files/test_log_regressor.dat b/tests/pytest/test_descriptor_identifier/model_files/test_log_regressor.dat new file mode 100644 index 0000000000000000000000000000000000000000..0594278ce2e9ef216951f103b3b671d521787a7b --- /dev/null +++ b/tests/pytest/test_descriptor_identifier/model_files/test_log_regressor.dat @@ -0,0 +1,20 @@ +# exp(c0) * ((B + A))^a0 * ((|D - B|))^a1 +# Property Label: $Prop$; Unit of the Property: Unitless +# RMSE: 1.61410365875894e-15; Max AE: 3.10862446895044e-15 +# Coefficients +# Task a0 a1 c0 +# all , 1.199999999999988e+00, -1.950000000000029e+00, 2.194569927587456e-13, +# Feature Rung, Units, and Expressions +# 0; 1; Unitless; 1|0|add; (B + A); $\left(B + A\right)$; (B + A); B,A +# 1; 1; Unitless; 3|1|abd; (|D - B|); $\left(\left|D - B\right|\right)$; abs(D - B); D,B +# Number of Samples Per Task +# Task, n_mats_test +# all, 5 +# Test Indexes: [ 0, 1, 2, 60, 61 ] + +# Sample ID , Property Value , Property Value (EST) , Feature 0 Value , Feature 1 Value +1 , 4.264458572132099e-02, 4.264458572132052e-02, 3.568363856578659e+02, 1.876653670337830e+02 +2 , 5.128655254447301e-02, 5.128655254447235e-02, 5.929548172172870e+02, 2.333519824867290e+02 +3 , 1.154564838708350e-01, 1.154564838708343e-01, 6.100109033119550e+02, 1.566264196564090e+02 +61 , 3.873513241106430e-01, 3.873513241106399e-01, 7.579071479419800e+02, 9.622758101464603e+01 +62 , 1.014668554799790e-01, 1.014668554799775e-01, 6.541291122548810e+02, 1.747001665463090e+02 diff --git a/tests/pytest/test_descriptor_identifier/model_files/test_regressor.dat b/tests/pytest/test_descriptor_identifier/model_files/test_regressor.dat new file mode 100644 index 0000000000000000000000000000000000000000..8fe475f511fb42d4083ffc4b5e828efd9ecc9eec --- /dev/null +++ b/tests/pytest/test_descriptor_identifier/model_files/test_regressor.dat @@ -0,0 +1,22 @@ +# c0 + a0 * ((B / A) / A) + a1 * ((D + C) + (|D|)) +# Property Label: $Prop$; Unit of the Property: Unitless +# RMSE: 1.87732114645728e-09; Max AE: 3.49245965480804e-09 +# Coefficients +# Task a0 a1 c0 +# X , -7.215478485316414e+00, 8.227180000000006e+01, 3.141589999617774e+00, +# Y , 9.914521320736678e+01, -1.423659000000001e+02, -5.254860000134174e+00, +# Feature Rung, Units, and Expressions +# 0; 2; m^-2 * s; 1|0|div|0|div; ((B / A) / A); $\left(\frac{ \left(\frac{ B }{ A } \right) }{ A } \right)$; ((B ./ A) ./ A); B,A,A +# 1; 2; Unitless; 3|2|add|3|abs|add; ((D + C) + (|D|)); $\left(\left(D + C\right) + \left(\left|D\right|\right)\right)$; ((D + C) + abs(D)); D,C,D +# Number of Samples Per Task +# Task, n_mats_test +# X, 3 +# Y, 2 +# Test Indexes: [ 0, 1, 2, 60, 61 ] + +# Sample ID , Property Value , Property Value (EST) , Feature 0 Value , Feature 1 Value +1 , 1.031303343104370e+06, 1.031303343104372e+06, 5.087963053254981e-08, 1.253528185252710e+04 +2 , 2.071791819726890e+05, 2.071791819726896e+05, 6.929206698600503e-07, 2.518190198679130e+03 +3 , 5.945479900349240e+05, 5.945479900349237e+05, 7.732840323401594e-08, 7.226593418953780e+03 +61 , -1.747903770607640e+06, -1.747903770607637e+06, 3.089720438913970e-07, 1.227750827816400e+04 +62 , -6.020310027164250e+05, -6.020310027164250e+05, 7.913240374082342e-08, 4.228721539808830e+03 diff --git a/tests/pytest/test_descriptor_identifier/model_files/train.dat b/tests/pytest/test_descriptor_identifier/model_files/train.dat deleted file mode 100644 index 6a2fd4558a667848dbe8f502cc14e65fa5593a37..0000000000000000000000000000000000000000 --- a/tests/pytest/test_descriptor_identifier/model_files/train.dat +++ /dev/null @@ -1,111 +0,0 @@ -# c0 + a0 * [(B) / (1.000000*(1.000000*A + 0.000000)^2 + 0.000000)] + a1 * C -# Property of the Unit: Unitless -# RMSE: 2.74915740443318e-09; Max AE: 9.31322574615479e-09 -# Coefficients -# Task a0 a1 c0 -# 0, -7.215479542045696e+00, 8.227180000000007e+01, 3.141589999622815e+00, -# 1, 9.914521341156420e+01, -1.423659000000001e+02, -5.254860000110127e+00, -# Feature Rung, Domain, Units, and Expressions -# 0; 2; (-inf, inf); m^-2 * s; 1|0|sq:1.0,0.0|div:1.0,0.0; [(B) / (1.000000*(1.000000*A + 0.000000)^2 + 0.000000)] -# 1; 0; [-2.971577187309380e+03, 2.622065505551910e+04]; Unitless; 2; C -# Number of Samples Per Task -# Task; n_mats_train -# 0, 57 -# 1, 38 - -#Property Value Property Value (EST) Feature 0 Value Feature 1 Value - 1.431871750857350e+06; 1.431871750857357e+06; 2.697060006837511e-06; 1.740412400466280e+04 - 2.132341513916110e+06; 2.132341513916109e+06; 2.065168448030928e-08; 2.591821708442330e+04 - 1.849456859032140e+06; 1.849456859032137e+06; 1.626134513838345e-08; 2.247980131031840e+04 - 4.163774736839510e+05; 4.163774736839511e+05; 2.378687110561754e-08; 5.060960524677020e+03 - 1.834852243834940e+06; 1.834852243834940e+06; 2.057971012989485e-03; 2.230228483021140e+04 - 2.030615002138700e+06; 2.030615002138702e+06; 2.033750916695686e-08; 2.468174830924870e+04 - 4.182049069917290e+05; 4.182049069917287e+05; 5.342688466073691e-08; 5.083172671585090e+03 - 1.600764653367910e+06; 1.600764653367909e+06; 1.574249399443083e-07; 1.945698905067160e+04 --2.374423038913250e+05; -2.374423038913255e+05; 9.522984388019029e-08; -2.886109766416170e+03 - 3.895694030199360e+05; 3.895694030199360e+05; 2.998984401431883e-07; 4.735112899342180e+03 - 1.097874595585220e+06; 1.097874595585217e+06; 8.407905381849567e-08; 1.334444431744320e+04 - 8.965124261335440e+05; 8.965124261335426e+05; 6.976681145109002e-08; 1.089692074980790e+04 - 1.247533441655420e+04; 1.247533441655385e+04; 4.240950437796524e-07; 1.515974225629470e+02 - 6.432185312889291e+05; 6.432185312889284e+05; 2.623773234135730e-08; 7.818175726058230e+03 - 8.880982463097370e+05; 8.880982463097404e+05; 5.111909378807164e-08; 1.079464779815330e+04 - 1.636015660236120e+06; 1.636015660236114e+06; 1.749950739140699e-05; 1.988545915820950e+04 - 1.523022284718580e+06; 1.523022284718574e+06; 7.444571741652756e-09; 1.851204353288280e+04 --1.806691656141680e+04; -1.806691656141721e+04; 5.124135740795190e-09; -2.196385414124870e+02 - 7.535749948523890e+05; 7.535749948523892e+05; 2.530373185333834e-04; 9.159540147270080e+03 - 4.846796705070550e+05; 4.846796705070554e+05; 1.516116594933527e-08; 5.891162329220520e+03 - 1.418886295186410e+06; 1.418886295186410e+06; 5.602337173621954e-08; 1.724628795768190e+04 - 7.468643665926130e+05; 7.468643665926139e+05; 7.350449259326487e-08; 9.077973558414231e+03 - 8.266764695919290e+05; 8.266764695919303e+05; 1.227812638317768e-08; 1.004807635182430e+04 - 9.048709052557090e+05; 9.048709052557111e+05; 9.684184878175625e-06; 1.099851666957070e+04 - 1.081673040470480e+06; 1.081673040470487e+06; 3.095754649186859e-08; 1.314751711863250e+04 - 1.602766311029420e+06; 1.602766311029422e+06; 1.942687305315588e-07; 1.948131886552650e+04 - 8.482960813663350e+05; 8.482960813663343e+05; 1.994254893455139e-07; 1.031085912521390e+04 - 8.819870504835790e+05; 8.819870504835781e+05; 5.815040616166881e-08; 1.072036723268480e+04 - 1.384967839241260e+06; 1.384967839241261e+06; 4.585957732720945e-08; 1.683401478576610e+04 - 1.435243993088210e+06; 1.435243993088209e+06; 3.530173492054727e-08; 1.744511304600680e+04 - 1.482822441554200e+06; 1.482822441554193e+06; 2.365805697619391e-08; 1.802342114751790e+04 - 1.159462504579730e+06; 1.159462504579732e+06; 3.955375090312368e-09; 1.409303507386200e+04 - 1.385445915520980e+06; 1.385445915520977e+06; 7.215270937489370e-09; 1.683982572316430e+04 - 1.078840903789160e+06; 1.078840903789154e+06; 7.719292312078009e-08; 1.311309296988410e+04 - 3.220723182574270e+05; 3.220723182574275e+05; 6.725877658255970e-08; 3.914697097522030e+03 - 1.547503571926120e+06; 1.547503571926123e+06; 3.349707138495564e-07; 1.880960949363620e+04 - 1.174714507507300e+06; 1.174714507507300e+06; 4.195999687630714e-08; 1.427842062429170e+04 - 9.487534028084230e+04; 9.487534028084182e+04; 6.018658340475335e-07; 1.153155743464770e+03 - 3.621603641205080e+05; 3.621603641205075e+05; 3.428967326845969e-09; 4.401960605341470e+03 - 6.736173787551570e+05; 6.736173787551573e+05; 9.033100765464531e-08; 8.187668644247590e+03 - 8.823510522257930e+05; 8.823510522257956e+05; 3.039762576167721e-08; 1.072479161311670e+04 - 2.240093900663180e+04; 2.240093900663139e+04; 2.331427770314304e-07; 2.722414900161900e+02 - 1.781136797772570e+06; 1.781136797772572e+06; 7.253817683831683e-08; 2.164938236653500e+04 - 6.214166082804410e+05; 6.214166082804408e+05; 6.796324227463879e-08; 7.553176990061370e+03 - 7.504118855811940e+05; 7.504118855811941e+05; 2.948893254754258e-08; 9.121093059728930e+03 - 1.525062498013260e+06; 1.525062498013265e+06; 4.374201765323614e-08; 1.853684198502500e+04 - 6.790682085352920e+05; 6.790682085352917e+05; 3.117208882706876e-08; 8.253922570619779e+03 - 4.478266872045060e+05; 4.478266872045057e+05; 3.922258820073917e-06; 5.443220467314520e+03 - 3.368902807230350e+05; 3.368902807230347e+05; 3.974555365702647e-08; 4.094806958560790e+03 - 4.680791492170390e+05; 4.680791492170393e+05; 7.178175366749162e-09; 5.689385763130150e+03 - 1.404060535190450e+06; 1.404060535190449e+06; 3.310728859521713e-07; 1.706608331898460e+04 - 1.827150953904310e+06; 1.827150953904310e+06; 5.763294101941985e-08; 2.220867675576230e+04 --3.339445722172610e+04; -3.339445722172646e+04; 1.705876199821157e-07; -4.059422403605510e+02 - 1.443453595965310e+06; 1.443453595965309e+06; 3.511555629631250e-08; 1.754489939901110e+04 - 1.550858369653510e+06; 1.550858369653510e+06; 1.829091447530946e-08; 1.885038650015730e+04 - 3.296237786603260e+05; 3.296237786603260e+05; 9.525996048208857e-07; 4.006483838656740e+03 - 5.963622714767930e+05; 5.963622714767937e+05; 1.373023008233051e-06; 7.248645707237480e+03 --9.149156549019570e+05; -9.149156549019575e+05; 1.052237002617895e-07; 6.426471507941080e+03 --1.293976980851750e+06; -1.293976980851752e+06; 1.242384899016401e-08; 9.089056620953350e+03 --5.569920711895199e+05; -5.569920711895211e+05; 3.136787828168589e-08; 3.912361150617040e+03 --2.294033396379730e+06; -2.294033396379733e+06; 2.185232400397477e-08; 1.611360685053020e+04 --1.213629166754780e+06; -1.213629166754777e+06; 2.705431178856616e-08; 8.524681204540260e+03 - 2.928090050997690e+05; 2.928090050997691e+05; 3.294636654535805e-08; -2.056772443095590e+03 --2.235342648617320e+06; -2.235342648617312e+06; 2.123583872053065e-06; 1.570135400378780e+04 --3.732932410426960e+06; -3.732932410426958e+06; 1.584814746579403e-08; 2.622065505551910e+04 --2.522104747768270e+05; -2.522104747768275e+05; 2.866436191254619e-07; 1.771528293961170e+03 --9.888966566957420e+04; -9.888966566957439e+04; 2.468066756691430e-08; 6.945793256111270e+02 --1.370204376681970e+06; -1.370204376681970e+06; 7.268458266839257e-08; 9.624489585140651e+03 --3.104420517264010e+06; -3.104420517264019e+06; 4.422776414490086e-08; 2.180589075339250e+04 --2.388277988221880e+06; -2.388277988221888e+06; 7.983548813793096e-07; 1.677559537389950e+04 --7.249776584633330e+05; -7.249776584633330e+05; 1.789320551006325e-08; 5.092317778380260e+03 --1.794477913928580e+06; -1.794477913928585e+06; 2.085418494861554e-06; 1.260465223255950e+04 --2.232131158999780e+05; -2.232131158999782e+05; 4.613095030252132e-08; 1.567846380661040e+03 - 4.230460058498780e+05; 4.230460058498792e+05; 1.927528616754291e-07; -2.971577187309380e+03 --3.047818615882230e+06; -3.047818615882234e+06; 1.560034821681974e-06; 2.140831028481470e+04 --2.409342601537700e+06; -2.409342601537698e+06; 3.854824353113469e-08; 1.692355646037090e+04 --7.428145854664950e+05; -7.428145854664957e+05; 8.907502601228915e-09; 5.217607099785680e+03 --5.715794306470060e+05; -5.715794306470070e+05; 4.249579387725456e-08; 4.014825009298010e+03 --2.195610268663400e+06; -2.195610268663394e+06; 1.508229600050627e-09; 1.542226764838730e+04 --9.640203794275450e+05; -9.640203794275469e+05; 9.425436737159602e-07; 6.771390653667730e+03 --2.102214669944520e+06; -2.102214669944522e+06; 2.461775162911714e-05; 1.476624260110920e+04 --8.906491793373150e+05; -8.906491793373162e+05; 7.320119248823469e-08; 6.256020047529450e+03 --2.207063832186290e+06; -2.207063832186288e+06; 1.440749268450898e-07; 1.550271924204160e+04 --7.494023253802230e+05; -7.494023253802244e+05; 1.997001442624077e-08; 5.263880399184100e+03 --2.494089085594850e+06; -2.494089085594850e+06; 7.881977896794234e-04; 1.751882936068880e+04 --7.584800943859300e+05; -7.584800943859307e+05; 4.795308237612606e-08; 5.327644046296790e+03 --2.025827981910110e+06; -2.025827981910114e+06; 5.949481923044429e-06; 1.422969073099650e+04 --2.354065357355290e+06; -2.354065357355291e+06; 1.863267201710832e-08; 1.653528058683390e+04 --1.588621543140250e+06; -1.588621543140251e+06; 1.563477342062043e-08; 1.115868538942120e+04 --3.175419951886790e+06; -3.175419951886789e+06; 1.516968856813277e-08; 2.230460171310890e+04 --2.152215923304610e+06; -2.152215923304610e+06; 3.558510316535865e-10; 1.511745908567040e+04 --5.471576306240950e+05; -5.471576306240946e+05; 2.732675013220533e-05; 3.843282545001370e+03 --2.672876703571220e+06; -2.672876703571219e+06; 9.276119341407247e-09; 1.877466056627420e+04 --2.080211959730500e+06; -2.080211959730501e+06; 5.366932486308832e-08; 1.461169215996120e+04 --2.578377052468330e+06; -2.578377052468333e+06; 1.245275388419069e-05; 1.811088047659560e+04 diff --git a/tests/pytest/test_descriptor_identifier/model_files/train_log_regressor.dat b/tests/pytest/test_descriptor_identifier/model_files/train_log_regressor.dat new file mode 100644 index 0000000000000000000000000000000000000000..f33da46e688e73a3c081fb85dd020bd315e3a8b7 --- /dev/null +++ b/tests/pytest/test_descriptor_identifier/model_files/train_log_regressor.dat @@ -0,0 +1,109 @@ +# exp(c0) * ((B + A))^a0 * ((|D - B|))^a1 +# Property Label: $Prop$; Unit of the Property: Unitless +# RMSE: 3.17364877036896e-10; Max AE: 3.06818037643097e-09 +# Coefficients +# Task a0 a1 c0 +# all , 1.199999999999988e+00, -1.950000000000029e+00, 2.194569927587456e-13, +# Feature Rung, Units, and Expressions +# 0; 1; Unitless; 1|0|add; (B + A); $\left(B + A\right)$; (B + A); B,A +# 1; 1; Unitless; 3|1|abd; (|D - B|); $\left(\left|D - B\right|\right)$; abs(D - B); D,B +# Number of Samples Per Task +# Task, n_mats_train +# all , 95 + +# Sample ID , Property Value , Property Value (EST) , Feature 0 Value , Feature 1 Value +4 , 1.519800396960310e+01, 1.519800396960442e+01, 3.438939914151597e+02, 9.012230335875859e+00 +5 , 3.082854872077400e-02, 3.082854872077340e-02, 2.313168167465870e+02, 1.697432835667080e+02 +6 , 1.133100818289460e-01, 1.133100818289438e-01, 8.407731739581370e+02, 1.926605752183610e+02 +7 , 7.197310366722802e-02, 7.197310366722687e-02, 6.369361245894850e+02, 2.049575936528104e+02 +8 , 7.912486940833201e-02, 7.912486940833070e-02, 7.663571974665711e+02, 2.187773203601512e+02 +9 , 8.439209844704601e-02, 8.439209844704454e-02, 7.389799343632981e+02, 2.069792773634640e+02 +10 , 4.446751053678399e-02, 4.446751053678275e-02, 8.713296805098360e+02, 3.181665053693860e+02 +11 , 3.260763739268500e-02, 3.260763739268451e-02, 3.739207052305880e+02, 2.216405779245290e+02 +12 , 2.659076165803100e-02, 2.659076165803091e-02, 3.843613433302889e+02, 2.502876486689600e+02 +13 , 8.826773262925121e-01, 8.826773262925279e-01, 7.039698147236641e+02, 6.027466528089599e+01 +14 , 2.928632647031510e+00, 2.928632647031618e+00, 4.452451369595900e+02, 2.458056479532499e+01 +15 , 4.117875847039799e-02, 4.117875847039633e-02, 8.554373875375860e+02, 3.272257710300721e+02 +16 , 2.951523999224001e-02, 2.951523999223898e-02, 8.424529451490290e+02, 3.845275118087096e+02 +17 , 1.038814423429120e-01, 1.038814423429122e-01, 5.130010777617300e+02, 1.486293559647466e+02 +18 , 7.944738653256701e-02, 7.944738653256557e-02, 6.128477041381821e+02, 1.902635610424520e+02 +19 , 4.900487147159410e-01, 4.900487147159518e-01, 5.265477976200372e+02, 6.816832432996031e+01 +20 , 3.150839556853410e-01, 3.150839556853419e-01, 8.225136459671780e+02, 1.124997378169470e+02 +21 , 3.366288296423890e-01, 3.366288296423908e-01, 5.742923501838560e+02, 8.717953102189320e+01 +22 , 5.962507952579650e-01, 5.962507952579738e-01, 6.654704045820331e+02, 7.119912027188195e+01 +23 , 2.400899638773800e-02, 2.400899638773739e-02, 8.808024141661990e+02, 4.393497195229754e+02 +24 , 7.022217337545830e-01, 7.022217337546094e-01, 5.155660536438641e+02, 5.595374829983299e+01 +25 , 8.079957368025490e-01, 8.079957368025489e-01, 4.378818291405840e+02, 4.709046110758300e+01 +26 , 2.730384017923001e-03, 2.730384017922647e-03, 9.621251572317161e+01, 3.429314037180331e+02 +27 , 3.476023433707601e-02, 3.476023433707583e-02, 4.668105904652360e+02, 2.458730017989080e+02 +28 , 1.033251407888760e-01, 1.033251407888768e-01, 4.505370572660290e+02, 1.375942596859600e+02 +29 , 6.951539957057601e-02, 6.951539957057493e-02, 6.662678085133230e+02, 2.145036333419410e+02 +30 , 2.679208648468900e-02, 2.679208648468845e-02, 5.372064504520050e+02, 3.063637649525460e+02 +31 , 6.968520346432000e-02, 6.968520346431904e-02, 6.187516227958720e+02, 2.046998200569710e+02 +32 , 3.381465799307300e-02, 3.381465799307189e-02, 6.810202085072150e+02, 3.146213607590392e+02 +33 , 3.643736054375200e-02, 3.643736054375259e-02, 2.572430743456164e+02, 1.663246723946186e+02 +34 , 7.278291999308998e-03, 7.278291999308579e-03, 2.693484396900020e+02, 3.908168434294090e+02 +35 , 6.316281996250200e-02, 6.316281996250024e-02, 9.135725638562590e+02, 2.736173705929961e+02 +36 , 8.468725004934602e-02, 8.468725004934741e-02, 2.809869480578874e+02, 1.139516689318346e+02 +37 , 1.932381683428840e-01, 1.932381683428862e-01, 3.733083185023398e+02, 8.890313404598720e+01 +38 , 2.398998011823999e-03, 2.398998011823725e-03, 7.342674197119210e+01, 3.103076065966969e+02 +39 , 1.534595856761850e-01, 1.534595856761857e-01, 3.985077579147360e+02, 1.041616261435750e+02 +40 , 8.244336063985997e-03, 8.244336063986115e-03, 3.001085764106482e+02, 3.918475439005468e+02 +41 , 3.886059411316600e-02, 3.886059411316534e-02, 7.315035792926520e+02, 3.061422263828760e+02 +42 , 6.811948195548198e-02, 6.811948195548211e-02, 3.928364390370920e+02, 1.565886937004750e+02 +43 , 6.459773257888570e-01, 6.459773257888679e-01, 5.465568008676980e+02, 6.053731049174900e+01 +44 , 5.631813966997500e-02, 5.631813966997550e-02, 2.529741980124930e+02, 1.316768168506250e+02 +45 , 4.038906092250250e+00, 4.038906092250709e+00, 4.416287415209720e+02, 2.074068508911199e+01 +46 , 5.095670337541400e-02, 5.095670337541516e-02, 1.322100453255174e+02, 9.297521479807349e+01 +47 , 7.712183341705148e+00, 7.712183341705224e+00, 6.257947896036660e+02, 1.844669020826200e+01 +48 , 2.143288954910001e-02, 2.143288954909962e-02, 6.411196459493250e+02, 3.830038745317325e+02 +49 , 2.681535703012700e+00, 2.681535703012699e+00, 7.406192807365251e+02, 3.517391703663401e+01 +50 , 7.509721670595060e-01, 7.509721670595433e-01, 3.716299006559721e+02, 4.419663440833502e+01 +51 , 1.828936588316000e-02, 1.828936588315966e-02, 3.642993763843590e+02, 2.934014729950570e+02 +52 , 3.233256389101231e-01, 3.233256389101388e-01, 2.659964261400100e+02, 5.542399861131020e+01 +53 , 3.377096130879099e-02, 3.377096130879031e-02, 5.679894941638599e+02, 2.815605236189350e+02 +54 , 3.182647391923040e-01, 3.182647391923110e-01, 4.064383771301322e+02, 7.252962777507179e+01 +55 , 5.438890522599680e-01, 5.438890522599867e-01, 4.273783288024700e+02, 5.683256680328100e+01 +56 , 1.481302826808700e-02, 1.481302826808676e-02, 4.133473006763246e+02, 3.533226046080044e+02 +57 , 3.577172884133230e+00, 3.577172884133309e+00, 7.218376832167100e+02, 2.986572711327699e+01 +58 , 1.299005831916950e-01, 1.299005831917018e-01, 1.285245757941580e+02, 5.654524088309321e+01 +59 , 3.708937574486999e-02, 3.708937574486953e-02, 6.335326464874350e+02, 2.870012121816870e+02 +60 , 1.492138286110100e-02, 1.492138286110073e-02, 3.863826024870907e+02, 3.376906029050725e+02 +63 , 1.327365670011720e+00, 1.327365670011747e+00, 5.237947408580530e+02, 4.076222064200002e+01 +64 , 2.866316177063399e-02, 2.866316177063361e-02, 3.855632680601000e+02, 2.413011142985870e+02 +65 , 6.631997219165701e-02, 6.631997219165733e-02, 4.280128658578052e+02, 1.673566606782878e+02 +66 , 2.252288462526840e-01, 2.252288462526819e-01, 8.862639951883659e+02, 1.399177054996980e+02 +67 , 1.939547592203930e-01, 1.939547592203993e-01, 2.788525200152330e+02, 7.415282768733898e+01 +68 , 9.658854365090298e-02, 9.658854365090316e-02, 4.884877541877030e+02, 1.497028793217050e+02 +69 , 4.500925870563399e-02, 4.500925870563310e-02, 4.235215426156546e+02, 2.028398139138314e+02 +70 , 1.485220038053790e-01, 1.485220038053789e-01, 6.831888106888690e+02, 1.475894902451720e+02 +71 , 2.337735635796860e-01, 2.337735635796849e-01, 8.342606963012420e+02, 1.322570533860960e+02 +72 , 7.632953740424002e-02, 7.632953740423876e-02, 5.837061828406540e+02, 1.884740442555270e+02 +73 , 1.875123260864800e-02, 1.875123260864805e-02, 2.508515593293792e+02, 2.302448476054018e+02 +74 , 1.143618678293300e-01, 1.143618678293320e-01, 3.086501287230788e+02, 1.034932580207732e+02 +75 , 5.978012396725100e-02, 5.978012396725177e-02, 3.485341673523723e+02, 1.555483633655640e+02 +76 , 3.946651280306101e-02, 3.946651280306003e-02, 8.938741626320890e+02, 3.435996973088180e+02 +77 , 1.204459101802500e-02, 1.204459101802521e-02, 2.599346402038567e+02, 2.953108836910043e+02 +78 , 2.529290143529000e-02, 2.529290143528984e-02, 4.096650540299540e+02, 2.670690833052651e+02 +79 , 4.302255370929000e-03, 4.302255370929386e-03, 2.054402334296125e+02, 4.331917853872475e+02 +80 , 7.413362701300201e-02, 7.413362701300184e-02, 4.741108482074520e+02, 1.683350987872200e+02 +81 , 1.608368020386020e-01, 1.608368020386036e-01, 6.012841787984150e+02, 1.309739033036920e+02 +82 , 2.012698101721840e+00, 2.012698101721908e+00, 7.875776874022081e+02, 4.232047036179603e+01 +83 , 8.646323283366900e-02, 8.646323283366776e-02, 7.395727756893370e+02, 2.045226204564196e+02 +84 , 9.652399673282999e-02, 9.652399673282866e-02, 7.026523686802810e+02, 1.873010296193923e+02 +85 , 2.572548047258240e+01, 2.572548047259085e+01, 3.533630724218510e+02, 6.996370005944016e+00 +86 , 3.123278266227202e+03, 3.123278266224134e+03, 4.386176872987210e+02, 6.820105972979604e-01 +87 , 2.458515683738300e-02, 2.458515683738247e-02, 5.122116092015239e+02, 3.109205259959841e+02 +88 , 1.820588111799500e-02, 1.820588111799451e-02, 6.044749572906400e+02, 4.016211269546539e+02 +89 , 1.889961422044330e-01, 1.889961422044326e-01, 5.672537190195014e+02, 1.163273919058436e+02 +90 , 3.068740985358300e-02, 3.068740985358201e-02, 7.959374760788080e+02, 3.639771398836220e+02 +91 , 8.475103351214100e-02, 8.475103351214062e-02, 3.904353683561130e+02, 1.394661163632714e+02 +92 , 1.995994367566500e-02, 1.995994367566429e-02, 3.512678527179855e+02, 2.743215240672606e+02 +93 , 1.710251765310500e-02, 1.710251765310494e-02, 2.436026752963562e+02, 2.370557369999488e+02 +94 , 7.012897549640100e-02, 7.012897549640053e-02, 3.573850729681119e+02, 1.455486916818470e+02 +95 , 6.819280465835999e-03, 6.819280465835956e-03, 1.889565532600872e+02, 3.248938081419878e+02 +96 , 9.406739334267000e-03, 9.406739334266842e-03, 1.458637935025617e+02, 2.349210847816180e+02 +97 , 2.697550405968400e-02, 2.697550405968437e-02, 2.396630744228114e+02, 1.857808366160160e+02 +98 , 7.117801960173380e+02, 7.117801960177312e+02, 4.956371843200068e+02, 1.569715334858017e+00 +99 , 2.824169537084470e+00, 2.824169537084519e+00, 5.522388458862010e+02, 2.859148464921600e+01 +100 , 3.850029324009000e-01, 3.850029324009044e-01, 5.823812413495190e+02, 8.208213111468339e+01 diff --git a/tests/pytest/test_descriptor_identifier/model_files/train_regressor.dat b/tests/pytest/test_descriptor_identifier/model_files/train_regressor.dat new file mode 100644 index 0000000000000000000000000000000000000000..f102b98144072288551016364683f3bdef94f55b --- /dev/null +++ b/tests/pytest/test_descriptor_identifier/model_files/train_regressor.dat @@ -0,0 +1,111 @@ +# c0 + a0 * ((B / A) / A) + a1 * ((D + C) + (|D|)) +# Property Label: $Prop$; Unit of the Property: Unitless +# RMSE: 2.73079744081635e-09; Max AE: 9.31322574615479e-09 +# Coefficients +# Task a0 a1 c0 +# X , -7.215478485316414e+00, 8.227180000000006e+01, 3.141589999617774e+00, +# Y , 9.914521320736678e+01, -1.423659000000001e+02, -5.254860000134174e+00, +# Feature Rung, Units, and Expressions +# 0; 2; m^-2 * s; 1|0|div|0|div; ((B / A) / A); $\left(\frac{ \left(\frac{ B }{ A } \right) }{ A } \right)$; ((B ./ A) ./ A); B,A,A +# 1; 2; Unitless; 3|2|add|3|abs|add; ((D + C) + (|D|)); $\left(\left(D + C\right) + \left(\left|D\right|\right)\right)$; ((D + C) + abs(D)); D,C,D +# Number of Samples Per Task +# Task, n_mats_train +# X , 57 +# Y , 38 + +# Sample ID , Property Value , Property Value (EST) , Feature 0 Value , Feature 1 Value +4 , 1.431871750857350e+06, 1.431871750857357e+06, 2.697060006837512e-06, 1.740412400466280e+04 +5 , 2.132341513916110e+06, 2.132341513916109e+06, 2.065168448030928e-08, 2.591821708442330e+04 +6 , 1.849456859032140e+06, 1.849456859032137e+06, 1.626134513838345e-08, 2.247980131031840e+04 +7 , 4.163774736839510e+05, 4.163774736839511e+05, 2.378687110561754e-08, 5.060960524677020e+03 +8 , 1.834852243834940e+06, 1.834852243834942e+06, 2.057971012989485e-03, 2.230228483021140e+04 +9 , 2.030615002138700e+06, 2.030615002138701e+06, 2.033750916695687e-08, 2.468174830924870e+04 +10 , 4.182049069917290e+05, 4.182049069917286e+05, 5.342688466073691e-08, 5.083172671585090e+03 +11 , 1.600764653367910e+06, 1.600764653367909e+06, 1.574249399443082e-07, 1.945698905067160e+04 +12 , -2.374423038913250e+05, -2.374423038913255e+05, 9.522984388019029e-08, -2.886109766416170e+03 +13 , 3.895694030199360e+05, 3.895694030199359e+05, 2.998984401431883e-07, 4.735112899342180e+03 +14 , 1.097874595585220e+06, 1.097874595585217e+06, 8.407905381849565e-08, 1.334444431744320e+04 +15 , 8.965124261335440e+05, 8.965124261335423e+05, 6.976681145109002e-08, 1.089692074980790e+04 +16 , 1.247533441655420e+04, 1.247533441655384e+04, 4.240950437796523e-07, 1.515974225629470e+02 +17 , 6.432185312889291e+05, 6.432185312889282e+05, 2.623773234135730e-08, 7.818175726058230e+03 +18 , 8.880982463097370e+05, 8.880982463097401e+05, 5.111909378807165e-08, 1.079464779815330e+04 +19 , 1.636015660236120e+06, 1.636015660236114e+06, 1.749950739140699e-05, 1.988545915820950e+04 +20 , 1.523022284718580e+06, 1.523022284718574e+06, 7.444571741652756e-09, 1.851204353288280e+04 +21 , -1.806691656141680e+04, -1.806691656141721e+04, 5.124135740795190e-09, -2.196385414124869e+02 +22 , 7.535749948523890e+05, 7.535749948523893e+05, 2.530373185333834e-04, 9.159540147270080e+03 +23 , 4.846796705070550e+05, 4.846796705070554e+05, 1.516116594933527e-08, 5.891162329220520e+03 +24 , 1.418886295186410e+06, 1.418886295186410e+06, 5.602337173621954e-08, 1.724628795768190e+04 +25 , 7.468643665926130e+05, 7.468643665926136e+05, 7.350449259326487e-08, 9.077973558414231e+03 +26 , 8.266764695919290e+05, 8.266764695919300e+05, 1.227812638317768e-08, 1.004807635182430e+04 +27 , 9.048709052557090e+05, 9.048709052557108e+05, 9.684184878175625e-06, 1.099851666957070e+04 +28 , 1.081673040470480e+06, 1.081673040470486e+06, 3.095754649186858e-08, 1.314751711863250e+04 +29 , 1.602766311029420e+06, 1.602766311029422e+06, 1.942687305315588e-07, 1.948131886552650e+04 +30 , 8.482960813663350e+05, 8.482960813663341e+05, 1.994254893455140e-07, 1.031085912521390e+04 +31 , 8.819870504835790e+05, 8.819870504835779e+05, 5.815040616166881e-08, 1.072036723268480e+04 +32 , 1.384967839241260e+06, 1.384967839241261e+06, 4.585957732720945e-08, 1.683401478576610e+04 +33 , 1.435243993088210e+06, 1.435243993088208e+06, 3.530173492054727e-08, 1.744511304600680e+04 +34 , 1.482822441554200e+06, 1.482822441554193e+06, 2.365805697619391e-08, 1.802342114751790e+04 +35 , 1.159462504579730e+06, 1.159462504579731e+06, 3.955375090312369e-09, 1.409303507386200e+04 +36 , 1.385445915520980e+06, 1.385445915520977e+06, 7.215270937489370e-09, 1.683982572316430e+04 +37 , 1.078840903789160e+06, 1.078840903789154e+06, 7.719292312078010e-08, 1.311309296988410e+04 +38 , 3.220723182574270e+05, 3.220723182574275e+05, 6.725877658255970e-08, 3.914697097522030e+03 +39 , 1.547503571926120e+06, 1.547503571926122e+06, 3.349707138495565e-07, 1.880960949363620e+04 +40 , 1.174714507507300e+06, 1.174714507507300e+06, 4.195999687630714e-08, 1.427842062429170e+04 +41 , 9.487534028084230e+04, 9.487534028084180e+04, 6.018658340475335e-07, 1.153155743464770e+03 +42 , 3.621603641205080e+05, 3.621603641205075e+05, 3.428967326845969e-09, 4.401960605341470e+03 +43 , 6.736173787551570e+05, 6.736173787551571e+05, 9.033100765464530e-08, 8.187668644247589e+03 +44 , 8.823510522257930e+05, 8.823510522257955e+05, 3.039762576167721e-08, 1.072479161311670e+04 +45 , 2.240093900663180e+04, 2.240093900663138e+04, 2.331427770314304e-07, 2.722414900161900e+02 +46 , 1.781136797772570e+06, 1.781136797772572e+06, 7.253817683831682e-08, 2.164938236653500e+04 +47 , 6.214166082804410e+05, 6.214166082804408e+05, 6.796324227463879e-08, 7.553176990061371e+03 +48 , 7.504118855811940e+05, 7.504118855811940e+05, 2.948893254754258e-08, 9.121093059728930e+03 +49 , 1.525062498013260e+06, 1.525062498013265e+06, 4.374201765323614e-08, 1.853684198502500e+04 +50 , 6.790682085352920e+05, 6.790682085352915e+05, 3.117208882706876e-08, 8.253922570619779e+03 +51 , 4.478266872045060e+05, 4.478266872045057e+05, 3.922258820073917e-06, 5.443220467314520e+03 +52 , 3.368902807230350e+05, 3.368902807230346e+05, 3.974555365702647e-08, 4.094806958560790e+03 +53 , 4.680791492170390e+05, 4.680791492170392e+05, 7.178175366749161e-09, 5.689385763130150e+03 +54 , 1.404060535190450e+06, 1.404060535190449e+06, 3.310728859521714e-07, 1.706608331898460e+04 +55 , 1.827150953904310e+06, 1.827150953904310e+06, 5.763294101941985e-08, 2.220867675576230e+04 +56 , -3.339445722172610e+04, -3.339445722172646e+04, 1.705876199821157e-07, -4.059422403605511e+02 +57 , 1.443453595965310e+06, 1.443453595965309e+06, 3.511555629631250e-08, 1.754489939901110e+04 +58 , 1.550858369653510e+06, 1.550858369653510e+06, 1.829091447530946e-08, 1.885038650015730e+04 +59 , 3.296237786603260e+05, 3.296237786603260e+05, 9.525996048208856e-07, 4.006483838656740e+03 +60 , 5.963622714767930e+05, 5.963622714767935e+05, 1.373023008233051e-06, 7.248645707237480e+03 +63 , -9.149156549019570e+05, -9.149156549019575e+05, 1.052237002617895e-07, 6.426471507941080e+03 +64 , -1.293976980851750e+06, -1.293976980851752e+06, 1.242384899016401e-08, 9.089056620953350e+03 +65 , -5.569920711895199e+05, -5.569920711895211e+05, 3.136787828168589e-08, 3.912361150617040e+03 +66 , -2.294033396379730e+06, -2.294033396379733e+06, 2.185232400397477e-08, 1.611360685053020e+04 +67 , -1.213629166754780e+06, -1.213629166754777e+06, 2.705431178856616e-08, 8.524681204540260e+03 +68 , 2.928090050997690e+05, 2.928090050997690e+05, 3.294636654535805e-08, -2.056772443095590e+03 +69 , -2.235342648617320e+06, -2.235342648617312e+06, 2.123583872053065e-06, 1.570135400378780e+04 +70 , -3.732932410426960e+06, -3.732932410426958e+06, 1.584814746579403e-08, 2.622065505551910e+04 +71 , -2.522104747768270e+05, -2.522104747768276e+05, 2.866436191254619e-07, 1.771528293961170e+03 +72 , -9.888966566957420e+04, -9.888966566957440e+04, 2.468066756691430e-08, 6.945793256111270e+02 +73 , -1.370204376681970e+06, -1.370204376681970e+06, 7.268458266839257e-08, 9.624489585140651e+03 +74 , -3.104420517264010e+06, -3.104420517264019e+06, 4.422776414490086e-08, 2.180589075339250e+04 +75 , -2.388277988221880e+06, -2.388277988221888e+06, 7.983548813793096e-07, 1.677559537389950e+04 +76 , -7.249776584633330e+05, -7.249776584633330e+05, 1.789320551006325e-08, 5.092317778380260e+03 +77 , -1.794477913928580e+06, -1.794477913928585e+06, 2.085418494861554e-06, 1.260465223255950e+04 +78 , -2.232131158999780e+05, -2.232131158999782e+05, 4.613095030252133e-08, 1.567846380661040e+03 +79 , 4.230460058498780e+05, 4.230460058498792e+05, 1.927528616754292e-07, -2.971577187309380e+03 +80 , -3.047818615882230e+06, -3.047818615882234e+06, 1.560034821681974e-06, 2.140831028481470e+04 +81 , -2.409342601537700e+06, -2.409342601537698e+06, 3.854824353113469e-08, 1.692355646037090e+04 +82 , -7.428145854664950e+05, -7.428145854664957e+05, 8.907502601228917e-09, 5.217607099785680e+03 +83 , -5.715794306470060e+05, -5.715794306470070e+05, 4.249579387725456e-08, 4.014825009298010e+03 +84 , -2.195610268663400e+06, -2.195610268663394e+06, 1.508229600050627e-09, 1.542226764838730e+04 +85 , -9.640203794275450e+05, -9.640203794275469e+05, 9.425436737159603e-07, 6.771390653667730e+03 +86 , -2.102214669944520e+06, -2.102214669944522e+06, 2.461775162911713e-05, 1.476624260110920e+04 +87 , -8.906491793373150e+05, -8.906491793373162e+05, 7.320119248823469e-08, 6.256020047529450e+03 +88 , -2.207063832186290e+06, -2.207063832186288e+06, 1.440749268450898e-07, 1.550271924204160e+04 +89 , -7.494023253802230e+05, -7.494023253802245e+05, 1.997001442624077e-08, 5.263880399184100e+03 +90 , -2.494089085594850e+06, -2.494089085594850e+06, 7.881977896794234e-04, 1.751882936068880e+04 +91 , -7.584800943859300e+05, -7.584800943859307e+05, 4.795308237612606e-08, 5.327644046296790e+03 +92 , -2.025827981910110e+06, -2.025827981910114e+06, 5.949481923044429e-06, 1.422969073099650e+04 +93 , -2.354065357355290e+06, -2.354065357355291e+06, 1.863267201710832e-08, 1.653528058683390e+04 +94 , -1.588621543140250e+06, -1.588621543140251e+06, 1.563477342062043e-08, 1.115868538942120e+04 +95 , -3.175419951886790e+06, -3.175419951886789e+06, 1.516968856813277e-08, 2.230460171310890e+04 +96 , -2.152215923304610e+06, -2.152215923304610e+06, 3.558510316535865e-10, 1.511745908567040e+04 +97 , -5.471576306240950e+05, -5.471576306240947e+05, 2.732675013220533e-05, 3.843282545001370e+03 +98 , -2.672876703571220e+06, -2.672876703571219e+06, 9.276119341407247e-09, 1.877466056627420e+04 +99 , -2.080211959730500e+06, -2.080211959730501e+06, 5.366932486308832e-08, 1.461169215996120e+04 +100 , -2.578377052468330e+06, -2.578377052468333e+06, 1.245275388419069e-05, 1.811088047659560e+04 diff --git a/tests/pytest/test_descriptor_identifier/test_model.py b/tests/pytest/test_descriptor_identifier/test_log_reg_model_from_file.py similarity index 69% rename from tests/pytest/test_descriptor_identifier/test_model.py rename to tests/pytest/test_descriptor_identifier/test_log_reg_model_from_file.py index 3803b00b4bbe65be88917eb5bc6f8ceb3e1e7396..98bf0d82ce5f9944525effbb5f2fdc61e628cf60 100644 --- a/tests/pytest/test_descriptor_identifier/test_model.py +++ b/tests/pytest/test_descriptor_identifier/test_log_reg_model_from_file.py @@ -11,7 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from sissopp import ModelRegressor +from sissopp.postprocess.load_models import load_model from pathlib import Path import numpy as np @@ -24,23 +24,34 @@ class InvalidFeatureMade(Exception): parent = Path(__file__).parent -def test_model(): - model = ModelRegressor( - str(parent / "model_files/train.dat"), str(parent / "model_files/test.dat") +def test_log_reg_model_from_file(): + model = load_model( + str(parent / "model_files/train_log_regressor.dat"), + str(parent / "model_files/test_log_regressor.dat"), ) + mat_fxn_fn = "model_log_regressor.m" + mat_fxn_fn_real = str(parent / "matlab_functions" / "model_log_regressor.m") + + model.write_matlab_fxn(mat_fxn_fn) + actual_lines = open(mat_fxn_fn_real).readlines() + test_lines = open(mat_fxn_fn).readlines() + + Path(mat_fxn_fn).unlink() + for tl, al in zip(test_lines, actual_lines): + assert tl == al + assert np.all(np.abs(model.fit - model.prop_train) < 1e-7) assert np.all(np.abs(model.predict - model.prop_test) < 1e-7) assert np.all(np.abs(model.train_error) < 1e-7) assert np.all(np.abs(model.test_error) < 1e-7) - assert model.feats[0].postfix_expr == "1|0|sq:1.0,0.0|div:1.0,0.0" - assert model.feats[1].postfix_expr == "2" + assert model.feats[0].postfix_expr == "1|0|add" + assert model.feats[1].postfix_expr == "3|1|abd" actual_coefs = [ - [-7.215479542045696, 82.27180000000007, 3.141589999622815], - [99.1452134115642, -142.3659000000001, -5.254860000110127], + [1.20, -1.95, 2.194569927587456e-13], ] assert np.all( @@ -49,12 +60,6 @@ def test_model(): for coef, actual in zip(model.coefs[0], actual_coefs[0]) ] ) - assert np.all( - [ - abs(coef - actual) < 1e-8 - for coef, actual in zip(model.coefs[1], actual_coefs[1]) - ] - ) assert model.rmse < 1e-7 assert model.test_rmse < 1e-7 @@ -82,4 +87,4 @@ def test_model(): if __name__ == "__main__": - test_model() + test_log_reg_model_from_file() diff --git a/tests/pytest/test_descriptor_identifier/test_reg_model_from_file.py b/tests/pytest/test_descriptor_identifier/test_reg_model_from_file.py new file mode 100644 index 0000000000000000000000000000000000000000..5ff6163787727a69a81a20b6ca7a77e0d7e9dceb --- /dev/null +++ b/tests/pytest/test_descriptor_identifier/test_reg_model_from_file.py @@ -0,0 +1,97 @@ +# Copyright 2021 Thomas A. R. Purcell +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from sissopp.postprocess.load_models import load_model +from pathlib import Path + +import numpy as np + + +class InvalidFeatureMade(Exception): + pass + + +parent = Path(__file__).parent + + +def test_reg_model_from_file(): + model = load_model( + str(parent / "model_files/train_regressor.dat"), + str(parent / "model_files/test_regressor.dat"), + ) + + mat_fxn_fn = "model_regressor.m" + mat_fxn_fn_real = str(parent / "matlab_functions" / "model_regressor.m") + + model.write_matlab_fxn(mat_fxn_fn) + actual_lines = open(mat_fxn_fn_real).readlines() + test_lines = open(mat_fxn_fn).readlines() + + Path(mat_fxn_fn).unlink() + for tl, al in zip(test_lines, actual_lines): + assert tl == al + + assert np.all(np.abs(model.fit - model.prop_train) < 1e-7) + assert np.all(np.abs(model.predict - model.prop_test) < 1e-7) + + assert np.all(np.abs(model.train_error) < 1e-7) + assert np.all(np.abs(model.test_error) < 1e-7) + + assert model.feats[0].postfix_expr == "1|0|div|0|div" + assert model.feats[1].postfix_expr == "3|2|add|3|abs|add" + + actual_coefs = [ + [-7.215478485316414, 82.2718000000000, 3.141589999617774], + [99.14521320736678, -142.365900000000, -5.254860000134174], + ] + + assert np.all( + [ + abs(coef - actual) < 1e-8 + for coef, actual in zip(model.coefs[0], actual_coefs[0]) + ] + ) + assert np.all( + [ + abs(coef - actual) < 1e-8 + for coef, actual in zip(model.coefs[1], actual_coefs[1]) + ] + ) + + assert model.rmse < 1e-7 + assert model.test_rmse < 1e-7 + + assert model.max_ae < 1e-7 + assert model.test_max_ae < 1e-7 + + assert model.mae < 1e-7 + assert model.test_mae < 1e-7 + + assert model.mape < 1e-7 + assert model.test_mape < 1e-7 + + assert model.percentile_25_ae < 1e-7 + assert model.percentile_25_test_ae < 1e-7 + + assert model.percentile_50_ae < 1e-7 + assert model.percentile_50_test_ae < 1e-7 + + assert model.percentile_75_ae < 1e-7 + assert model.percentile_75_test_ae < 1e-7 + + assert model.percentile_95_ae < 1e-7 + assert model.percentile_95_test_ae < 1e-7 + + +if __name__ == "__main__": + test_reg_model_from_file()