diff --git a/cmake/FindMetaExamples.cmake b/cmake/FindMetaExamples.cmake index eda0c4b7816..2d6fb0231e4 100644 --- a/cmake/FindMetaExamples.cmake +++ b/cmake/FindMetaExamples.cmake @@ -35,6 +35,8 @@ function(get_excluded_meta_examples) statistical_testing/quadratic_time_maximum_mean_discrepancy.sg gaussian_process/classifier.sg gaussian_process/regression.sg + binary/svmlin.sg + binary/svmsgd.sg ) ENDIF() diff --git a/data b/data index 270d5b41ca1..2bdcf0713e5 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit 270d5b41ca185b32e5f17bf0cf7cc8423a5dea5a +Subproject commit 2bdcf0713e5b6a8b79b1a10e7b5b85c43699641d diff --git a/examples/meta/src/binary/mpdsvm.sg b/examples/meta/src/binary/mpdsvm.sg index 52b8f882bfe..0d713be9bcc 100644 --- a/examples/meta/src/binary/mpdsvm.sg +++ b/examples/meta/src/binary/mpdsvm.sg @@ -5,16 +5,15 @@ File f_labels_test = csv_file("../../data/classifier_binary_2d_linear_labels_tes Features feats_train = features(f_feats_train) Features feats_test = features(f_feats_test) -BinaryLabels labels_train(f_labels_train) +Labels labels_train = labels(f_labels_train) Labels labels_test = labels(f_labels_test) Kernel gaussian = kernel("GaussianKernel", log_width=0.01) gaussian.init(feats_train, feats_train) real C=1.0 -Machine svm = machine("MPDSVM", C1=C, C2=C, kernel=gaussian, epsilon=0.00001) +Machine svm = machine("MPDSVM", C1=C, C2=C, kernel=gaussian, epsilon=0.00001, labels=labels_train) -svm.set_labels(labels_train) svm.train() Labels labels_predict = svm.apply(feats_test) diff --git a/examples/undocumented/python/classifier_svmlin.py b/examples/undocumented/python/classifier_svmlin.py deleted file mode 100644 index c35990fe6bf..00000000000 --- a/examples/undocumented/python/classifier_svmlin.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python -traindat = '../data/fm_train_real.dat' -testdat = '../data/fm_test_real.dat' -label_traindat = '../data/label_train_twoclass.dat' - -parameter_list = [[traindat,testdat,label_traindat,0.9,1e-5,1],[traindat,testdat,label_traindat,0.8,1e-5,1]] - -def classifier_svmlin (train_fname=traindat,test_fname=testdat,label_fname=label_traindat,C=0.9,epsilon=1e-5,num_threads=1): - from shogun import RealFeatures, SparseRealFeatures, BinaryLabels - from shogun import SVMLin, CSVFile - - feats_train=RealFeatures(CSVFile(train_fname)) - feats_test=RealFeatures(CSVFile(test_fname)) - labels=BinaryLabels(CSVFile(label_fname)) - - svm=SVMLin(C, feats_train, labels) - svm.set_epsilon(epsilon) - svm.parallel.set_num_threads(num_threads) - svm.set_bias_enabled(True) - svm.train() - - bias=svm.get_bias() - w=svm.get_w() - predictions = svm.apply(feats_test) - return predictions, svm, predictions.get_labels() - -if __name__=='__main__': - print('SVMLin') - classifier_svmlin(*parameter_list[0]) diff --git a/examples/undocumented/python/classifier_svmsgd.py b/examples/undocumented/python/classifier_svmsgd.py deleted file mode 100644 index de289376aff..00000000000 --- a/examples/undocumented/python/classifier_svmsgd.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python -traindat = '../data/fm_train_real.dat' -testdat = '../data/fm_test_real.dat' -label_traindat = '../data/label_train_twoclass.dat' - -parameter_list = [[traindat,testdat,label_traindat,0.9,1,6],[traindat,testdat,label_traindat,0.8,1,5]] - -def classifier_svmsgd (train_fname=traindat,test_fname=testdat,label_fname=label_traindat,C=0.9,num_threads=1,num_iter=5): - from shogun import RealFeatures, SparseRealFeatures, BinaryLabels - from shogun import SVMSGD, CSVFile - - feats_train=RealFeatures(CSVFile(train_fname)) - feats_test=RealFeatures(CSVFile(test_fname)) - labels=BinaryLabels(CSVFile(label_fname)) - - svm=SVMSGD(C, feats_train, labels) - svm.set_epochs(num_iter) - #svm.io.set_loglevel(0) - svm.train() - - bias=svm.get_bias() - w=svm.get_w() - predictions = svm.apply(feats_test) - return predictions, svm, predictions.get_labels() - -if __name__=='__main__': - print('SVMSGD') - classifier_svmsgd(*parameter_list[0]) diff --git a/src/gpl b/src/gpl index def7ba5638a..3030e862eb3 160000 --- a/src/gpl +++ b/src/gpl @@ -1 +1 @@ -Subproject commit def7ba5638a3f1aaecdc5dd434b08af887dda1fb +Subproject commit 3030e862eb32d5e2aefbbb626b14cd91d75f36a4 diff --git a/src/shogun/classifier/svm/MPDSVM.cpp b/src/shogun/classifier/svm/MPDSVM.cpp index bb5bf09ca89..9d0ce6fea21 100644 --- a/src/shogun/classifier/svm/MPDSVM.cpp +++ b/src/shogun/classifier/svm/MPDSVM.cpp @@ -30,13 +30,13 @@ CMPDSVM::~CMPDSVM() bool CMPDSVM::train_machine(CFeatures* data) { - ASSERT(m_labels) - ASSERT(m_labels->get_label_type() == LT_BINARY) + auto labels = binary_labels(m_labels); + ASSERT(kernel) if (data) { - if (m_labels->get_num_labels() != data->get_num_vectors()) + if (labels->get_num_labels() != data->get_num_vectors()) SG_ERROR("Number of training vectors does not match number of labels\n") kernel->init(data, data); } @@ -48,7 +48,7 @@ bool CMPDSVM::train_machine(CFeatures* data) const int64_t maxiter = 1L<<30; //const bool nustop=false; //const int32_t k=2; - const int32_t n=m_labels->get_num_labels(); + const int32_t n = labels->get_num_labels(); ASSERT(n>0) //const float64_t d = 1.0/n/nu; //NUSVC const float64_t d = get_C1(); //CSVC @@ -84,9 +84,9 @@ bool CMPDSVM::train_machine(CFeatures* data) for (int32_t i=0; iget_label(i); + F[i] = labels->get_label(i); //F[i+n]=-1; - hessres[i]=((CBinaryLabels*) m_labels)->get_label(i); + hessres[i] = labels->get_label(i); //hessres[i+n]=-1; //dalphas[i]=F[i+n]*etas[1]; //NUSVC dalphas[i]=-1; //CSVC @@ -149,7 +149,8 @@ bool CMPDSVM::train_machine(CFeatures* data) { obj-=alphas[i]; for (int32_t j=0; jget_label(i)*((CBinaryLabels*) m_labels)->get_label(j)*alphas[i]*alphas[j]*kernel->kernel(i,j); + obj += 0.5 * labels->get_label(i) * labels->get_label(j) * + alphas[i] * alphas[j] * kernel->kernel(i, j); } SG_DEBUG("obj:%f pviol:%f dviol:%f maxpidx:%d iter:%d\n", obj, maxpviol, maxdviol, maxpidx, niter) @@ -250,7 +251,7 @@ bool CMPDSVM::train_machine(CFeatures* data) if (alphas[i]>0) { //set_alpha(j, alphas[i]*labels->get_label(i)/etas[1]); - set_alpha(j, alphas[i]*((CBinaryLabels*) m_labels)->get_label(i)); + set_alpha(j, alphas[i] * labels->get_label(i)); set_support_vector(j, i); j++; }