Skip to content
Snippets Groups Projects
  • Thomas Purcell's avatar
    9d196eb9
    Updates to classification · 9d196eb9
    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
    9d196eb9
    History
    Updates to classification
    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
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);
}