-
Thomas Purcell authored
1) Width reduced to 1e-5 2) SVM done with a C=100 3) SVM done with Kernel SVM but with a linear Kernel 4) Fixes to how algorithm breaks ties 5) Added a python SVM function 6) Modified Model python interface to accomadate SVM functions
Thomas Purcell authored1) Width reduced to 1e-5 2) SVM done with a C=100 3) SVM done with Kernel SVM but with a linear Kernel 4) Fixes to how algorithm breaks ties 5) Added a python SVM function 6) Modified Model python interface to accomadate SVM functions
ModelClassifier.cpp 2.76 KiB
#include <descriptor_identifier/Model/ModelClassifier.hpp>
ModelClassifier::ModelClassifier(const ModelClassifier& o, py::list new_coefs, np::ndarray prop_train_est, np::ndarray prop_test_est) :
Model(o),
_prop_train_est(python_conv_utils::from_ndarray<double>(prop_train_est)),
_prop_test_est(python_conv_utils::from_ndarray<double>(prop_test_est)),
_train_error(o._train_error),
_test_error(o._test_error),
_train_n_convex_overlap(o._fix_intercept),
_test_n_convex_overlap(o._test_n_convex_overlap)
{
_coefs = {};
for(auto& coef_list : python_conv_utils::from_list<py::list>(new_coefs))
_coefs.push_back(python_conv_utils::from_list<double>(coef_list));
std::vector<int> misclassified(_n_samp_train);
std::transform(_prop_train.begin(), _prop_train.end(), _prop_train_est.begin(), misclassified.begin(), [](double p1, double p2){return p1 != p2;});
_train_n_svm_misclassified = std::accumulate(misclassified.begin(), misclassified.end(), 0);
std::vector<int> misclassified_test(_n_samp_test);
std::transform(_prop_test.begin(), _prop_test.end(), _prop_test_est.begin(), misclassified_test.begin(), [](double p1, double p2){return p1 != p2;});
_test_n_svm_misclassified = std::accumulate(misclassified_test.begin(), misclassified_test.end(), 0);
}
ModelClassifier::ModelClassifier(const ModelClassifier& o, np::ndarray new_coefs, np::ndarray prop_train_est, np::ndarray prop_test_est) :
Model(o),
_prop_train_est(python_conv_utils::from_ndarray<double>(prop_train_est)),
_prop_test_est(python_conv_utils::from_ndarray<double>(prop_test_est)),
_train_error(o._train_error),
_test_error(o._test_error),
_train_n_convex_overlap(o._fix_intercept),
_test_n_convex_overlap(o._test_n_convex_overlap)
{
_coefs = {};
for(int ii = 0; ii < new_coefs.shape(0); ++ii)
{
// _coefs.push_back(std::vector<double>(new_coefs.shape(1)));
// for(int jj = 0; jj < new_coefs.shape(1); ++jj)
// _coefs.back()[jj] = py::extract<double>(new_coefs[ii * new_coefs.shape(0) + jj]);
_coefs.push_back(python_conv_utils::from_ndarray<double>(py::extract<np::ndarray>(new_coefs[ii])));
}
std::vector<int> misclassified(_n_samp_train);
std::transform(_prop_train.begin(), _prop_train.end(), _prop_train_est.begin(), misclassified.begin(), [](double p1, double p2){return p1 != p2;});
_train_n_svm_misclassified = std::accumulate(misclassified.begin(), misclassified.end(), 0);
std::vector<int> misclassified_test(_n_samp_test);
std::transform(_prop_test.begin(), _prop_test.end(), _prop_test_est.begin(), misclassified_test.begin(), [](double p1, double p2){return p1 != p2;});
_test_n_svm_misclassified = std::accumulate(misclassified_test.begin(), misclassified_test.end(), 0);
}