Skip to content

Commit

Permalink
A bunch of multiclass fixes and improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
lisitsyn committed Apr 21, 2012
1 parent 949fd1d commit 17ff86c
Show file tree
Hide file tree
Showing 24 changed files with 225 additions and 91 deletions.
@@ -1,6 +1,6 @@
using System;

public class classifier_libsvmmulticlass_modular {
public class classifier_multiclasslibsvm_modular {
public static void Main() {
modshogun.init_shogun_with_defaults();
double width = 2.1;
Expand All @@ -21,7 +21,7 @@ public class classifier_libsvmmulticlass_modular {

Labels labels = new Labels(trainlab);

LibSVMMulticlass svm = new LibSVMMulticlass(C, kernel, labels);
MulticlassLibSVM svm = new MulticlassLibSVM(C, kernel, labels);
svm.set_epsilon(epsilon);
svm.train();

Expand All @@ -33,4 +33,4 @@ public class classifier_libsvmmulticlass_modular {

modshogun.exit_shogun();
}
}
}
@@ -1,7 +1,7 @@
import org.shogun.*;
import org.jblas.*;

public class classifier_libsvmmulticlass_modular {
public class classifier_multiclasslibsvm_modular {
static {
System.loadLibrary("modshogun");
}
Expand All @@ -26,7 +26,7 @@ public static void main(String argv[]) {

Labels labels = new Labels(trainlab);

LibSVMMulticlass svm = new LibSVMMulticlass(C, kernel, labels);
MulticlassLibSVM svm = new MulticlassLibSVM(C, kernel, labels);
svm.set_epsilon(epsilon);
svm.train();

Expand Down
Expand Up @@ -5,8 +5,7 @@
fm_train_real=load_matrix('../data/fm_train_real.dat');
fm_test_real=load_matrix('../data/fm_test_real.dat');

% libsvmmulticlass
disp('LibSVMMulticlass')
disp('MulticlassLibSVM')

feats_train=RealFeatures(fm_train_real);
feats_test=RealFeatures(fm_test_real);
Expand All @@ -18,7 +17,7 @@
num_threads=8;
labels=Labels(label_train_multiclass);

svm=LibSVMMulticlass(C, kernel, labels);
svm=MulticlassLibSVM(C, kernel, labels);
svm.set_epsilon(epsilon);
svm.parallel.set_num_threads(num_threads);
svm.train();
Expand Down
Expand Up @@ -7,18 +7,18 @@

parameter_list = [[traindat,testdat,label_traindat,2.1,1,1e-5],[traindat,testdat,label_traindat,2.2,1,1e-5]]

def classifier_libsvmmulticlass_modular (fm_train_real=traindat,fm_test_real=testdat,label_train_multiclass=label_traindat,width=2.1,C=1,epsilon=1e-5):
def classifier_multiclasslibsvm_modular (fm_train_real=traindat,fm_test_real=testdat,label_train_multiclass=label_traindat,width=2.1,C=1,epsilon=1e-5):
from shogun.Features import RealFeatures, Labels
from shogun.Kernel import GaussianKernel
from shogun.Classifier import LibSVMMulticlass
from shogun.Classifier import MulticlassLibSVM

feats_train=RealFeatures(fm_train_real)
feats_test=RealFeatures(fm_test_real)
kernel=GaussianKernel(feats_train, feats_train, width)

labels=Labels(label_train_multiclass)

svm=LibSVMMulticlass(C, kernel, labels)
svm=MulticlassLibSVM(C, kernel, labels)
svm.set_epsilon(epsilon)
svm.train()

Expand All @@ -28,5 +28,5 @@ def classifier_libsvmmulticlass_modular (fm_train_real=traindat,fm_test_real=tes
return predictions, svm, predictions.get_labels()

if __name__=='__main__':
print('LibSVMMulticlass' )
classifier_libsvmmulticlass_modular(*parameter_list[0])
print('MulticlassLibSVM')
classifier_multiclasslibsvm_modular(*parameter_list[0])
Expand Up @@ -4,8 +4,7 @@ fm_train_real <- t(as.matrix(read.table('../data/fm_train_real.dat')))
fm_test_real <- t(as.matrix(read.table('../data/fm_test_real.dat')))
label_train_multiclass <- as.real(read.table('../data/label_train_multiclass.dat')$V1)

# libsvmmulticlass
print('LibSVMMulticlass')
print('MulticlassLibSVM')

feats_train <- RealFeatures(fm_train_real)
feats_test <- RealFeatures(fm_test_real)
Expand All @@ -17,7 +16,7 @@ epsilon <- 1e-5
num_threads <- as.integer(8)
labels <- Labels(label_train_multiclass)

svm <- LibSVMMulticlass(C, kernel, labels)
svm <- MulticlassLibSVM(C, kernel, labels)
dump <- svm$set_epsilon(svm, epsilon)
dump <- svm$parallel$set_num_threads(svm$parallel, num_threads)
dump <- svm$train(svm)
Expand Down
8 changes: 0 additions & 8 deletions src/interfaces/modular/Classifier.i
Expand Up @@ -17,18 +17,14 @@
/* Remove C Prefix */
%rename(Machine) CMachine;
%rename(KernelMachine) CKernelMachine;
%rename(GMNPSVM) CGMNPSVM;
%rename(GNPPSVM) CGNPPSVM;
%rename(GPBTSVM) CGPBTSVM;
%rename(GaussianNaiveBayes) CGaussianNaiveBayes;
%rename(KNN) CKNN;
%rename(LDA) CLDA;
%rename(QDA) CQDA;
%rename(LibLinear) CLibLinear;
%rename(ScatterSVM) CScatterSVM;
%rename(LibSVM) CLibSVM;
%rename(LaRank) CLaRank;
%rename(LibSVMMultiClass) CLibSVMMulticlass;
%rename(LibSVMOneClass) CLibSVMOneClass;
%rename(LinearMachine) CLinearMachine;
%rename(OnlineLinearMachine) COnlineLinearMachine;
Expand Down Expand Up @@ -85,17 +81,13 @@
%include <shogun/machine/LinearMachine.h>
%include <shogun/machine/OnlineLinearMachine.h>
%include <shogun/classifier/GaussianNaiveBayes.h>
%include <shogun/classifier/svm/GMNPSVM.h>
%include <shogun/classifier/svm/GNPPSVM.h>
%include <shogun/classifier/svm/GPBTSVM.h>
%include <shogun/classifier/KNN.h>
%include <shogun/classifier/LDA.h>
%include <shogun/classifier/QDA.h>
%include <shogun/classifier/svm/LibLinear.h>
%include <shogun/classifier/svm/ScatterSVM.h>
%include <shogun/classifier/svm/LibSVM.h>
%include <shogun/classifier/svm/LaRank.h>
%include <shogun/classifier/svm/LibSVMMulticlass.h>
%include <shogun/classifier/svm/LibSVMOneClass.h>
%include <shogun/classifier/LPBoost.h>
%include <shogun/classifier/LPM.h>
Expand Down
5 changes: 0 additions & 5 deletions src/interfaces/modular/Classifier_includes.i
@@ -1,24 +1,19 @@
%{
#include <shogun/machine/Machine.h>
#include <shogun/classifier/svm/GMNPSVM.h>
#include <shogun/classifier/svm/GNPPSVM.h>
#include <shogun/classifier/svm/GPBTSVM.h>
#include <shogun/machine/DistanceMachine.h>
#include <shogun/classifier/KNN.h>
#include <shogun/classifier/LDA.h>
#include <shogun/classifier/QDA.h>
#include <shogun/classifier/svm/LibLinear.h>
#include <shogun/classifier/svm/ScatterSVM.h>
#include <shogun/classifier/svm/LibSVM.h>
#include <shogun/classifier/svm/LaRank.h>
#include <shogun/classifier/svm/LibSVMMulticlass.h>
#include <shogun/classifier/svm/LibSVMOneClass.h>
#include <shogun/machine/LinearMachine.h>
#include <shogun/machine/OnlineLinearMachine.h>
#include <shogun/classifier/LPBoost.h>
#include <shogun/classifier/LPM.h>
#include <shogun/classifier/svm/MPDSVM.h>
#include <shogun/multiclass/MulticlassSVM.h>
#include <shogun/classifier/svm/OnlineSVMSGD.h>
#include <shogun/classifier/svm/OnlineLibLinear.h>
#include <shogun/classifier/Perceptron.h>
Expand Down
10 changes: 10 additions & 0 deletions src/interfaces/modular/Multiclass.i
Expand Up @@ -11,8 +11,18 @@
/* Remove C Prefix */
%rename(MulticlassLibLinear) CMulticlassLibLinear;
%rename(MulticlassOCAS) CMulticlassOCAS;
%rename(MulticlassSVM) CMulticlassSVM;
%rename(MulticlassLibSVM) CMulticlassLibSVM;
%rename(LaRank) CLaRank;
%rename(ScatterSVM) CScatterSVM;
%rename(GMNPSVM) CGMNPSVM;

/* Include Class Headers to make them visible from within the target language */
%include <shogun/multiclass/MulticlassLibLinear.h>
%include <shogun/multiclass/MulticlassOCAS.h>
%include <shogun/multiclass/MulticlassSVM.h>
%include <shogun/multiclass/MulticlassLibSVM.h>
%include <shogun/multiclass/LaRank.h>
%include <shogun/multiclass/ScatterSVM.h>
%include <shogun/multiclass/GMNPSVM.h>

5 changes: 5 additions & 0 deletions src/interfaces/modular/Multiclass_includes.i
@@ -1,4 +1,9 @@
%{
#include <shogun/multiclass/MulticlassLibLinear.h>
#include <shogun/multiclass/MulticlassOCAS.h>
#include <shogun/multiclass/MulticlassSVM.h>
#include <shogun/multiclass/LaRank.h>
#include <shogun/multiclass/MulticlassLibSVM.h>
#include <shogun/multiclass/GMNPSVM.h>
#include <shogun/multiclass/ScatterSVM.h>
%}
4 changes: 1 addition & 3 deletions src/shogun/classifier/mkl/MKLMulticlass.h
Expand Up @@ -16,7 +16,7 @@
#include <shogun/base/SGObject.h>
#include <shogun/kernel/Kernel.h>
#include <shogun/kernel/CombinedKernel.h>
#include <shogun/classifier/svm/GMNPSVM.h>
#include <shogun/multiclass/GMNPSVM.h>
#include <shogun/classifier/mkl/MKLMulticlassGLPK.h>
#include <shogun/classifier/mkl/MKLMulticlassGradient.h>
#include <shogun/multiclass/MulticlassSVM.h>
Expand Down Expand Up @@ -50,8 +50,6 @@ class CMKLMulticlass : public CMulticlassSVM
*/
virtual ~CMKLMulticlass();

using CMulticlassMachine::apply;

/** get classifier type
*
* @return classifier type GMNPMKL
Expand Down
Expand Up @@ -60,7 +60,7 @@ gmnplib.c: Library of solvers for Generalized Minimal Norm Problem (GMNP).
-------------------------------------------------------------------- */

#include <shogun/classifier/svm/GMNPLib.h>
#include <shogun/multiclass/GMNPLib.h>
#include <shogun/mathematics/Math.h>

#include <string.h>
Expand Down
File renamed without changes.
Expand Up @@ -9,8 +9,8 @@
*/

#include <shogun/io/SGIO.h>
#include <shogun/classifier/svm/GMNPSVM.h>
#include <shogun/classifier/svm/GMNPLib.h>
#include <shogun/multiclass/GMNPSVM.h>
#include <shogun/multiclass/GMNPLib.h>

#define INDEX(ROW,COL,DIM) (((COL)*(DIM))+(ROW))
#define MINUS_INF INT_MIN
Expand Down
File renamed without changes.
Expand Up @@ -53,7 +53,7 @@
#include <shogun/lib/Signal.h>
#include <shogun/lib/Time.h>
#include <shogun/mathematics/Math.h>
#include <shogun/classifier/svm/LaRank.h>
#include <shogun/multiclass/LaRank.h>
#include <shogun/kernel/Kernel.h>

using namespace shogun;
Expand Down
File renamed without changes.
Expand Up @@ -8,27 +8,26 @@
* Copyright (C) 1999-2009 Fraunhofer Institute FIRST and Max-Planck-Society
*/

#include <shogun/classifier/svm/LibSVMMulticlass.h>
#include <shogun/multiclass/MulticlassLibSVM.h>
#include <shogun/io/SGIO.h>

using namespace shogun;

CLibSVMMulticlass::CLibSVMMulticlass(LIBSVM_SOLVER_TYPE st)
CMulticlassLibSVM::CMulticlassLibSVM(LIBSVM_SOLVER_TYPE st)
: CMulticlassSVM(ONE_VS_ONE_STRATEGY), model(NULL), solver_type(st)
{
}

CLibSVMMulticlass::CLibSVMMulticlass(float64_t C, CKernel* k, CLabels* lab)
CMulticlassLibSVM::CMulticlassLibSVM(float64_t C, CKernel* k, CLabels* lab)
: CMulticlassSVM(ONE_VS_ONE_STRATEGY, C, k, lab), model(NULL), solver_type(LIBSVM_C_SVC)
{
}

CLibSVMMulticlass::~CLibSVMMulticlass()
CMulticlassLibSVM::~CMulticlassLibSVM()
{
//SG_PRINT("deleting LibSVM\n");
}

bool CLibSVMMulticlass::train_machine(CFeatures* data)
bool CMulticlassLibSVM::train_machine(CFeatures* data)
{
struct svm_node* x_space;

Expand Down
Expand Up @@ -18,25 +18,24 @@

namespace shogun
{
/** @brief class LibSVMMultiClass */
class CLibSVMMulticlass : public CMulticlassSVM
/** @brief class LibSVMMultiClass. Does one vs one
* classification. */
class CMulticlassLibSVM : public CMulticlassSVM
{
public:
/** default constructor */
CLibSVMMulticlass(LIBSVM_SOLVER_TYPE st=LIBSVM_C_SVC);
CMulticlassLibSVM(LIBSVM_SOLVER_TYPE st=LIBSVM_C_SVC);

/** constructor
*
* @param C constant C
* @param k kernel
* @param lab labels
*/
CLibSVMMulticlass(float64_t C, CKernel* k, CLabels* lab);
CMulticlassLibSVM(float64_t C, CKernel* k, CLabels* lab);

/** destructor */
virtual ~CLibSVMMulticlass();

using CMulticlassMachine::apply;
virtual ~CMulticlassLibSVM();

/** get classifier type
*
Expand All @@ -45,7 +44,7 @@ class CLibSVMMulticlass : public CMulticlassSVM
virtual inline EClassifierType get_classifier_type() { return CT_LIBSVMMULTICLASS; }

/** @return object name */
inline virtual const char* get_name() const { return "LibSVMMultiClass"; }
inline virtual const char* get_name() const { return "MulticlassLibSVM"; }

protected:
/** train multiclass SVM classifier
Expand Down

0 comments on commit 17ff86c

Please sign in to comment.