From edc55d70307b8d051eca83e167ce1ff117e78b7c Mon Sep 17 00:00:00 2001 From: OXPHOS Date: Wed, 8 Jun 2016 00:48:46 -0400 Subject: [PATCH] cookbook page --- data | 2 +- .../classifier/multiclass_linearmachine.rst | 43 +++++++++++++++++++ .../classifier/multiclass_linearmachine.sg | 36 ++++++++++++++++ ...ssifier_multiclasslinearmachine_modular.py | 37 ---------------- 4 files changed, 80 insertions(+), 38 deletions(-) create mode 100644 doc/cookbook/source/examples/classifier/multiclass_linearmachine.rst create mode 100644 examples/meta/src/classifier/multiclass_linearmachine.sg delete mode 100644 examples/undocumented/python_modular/classifier_multiclasslinearmachine_modular.py diff --git a/data b/data index ee04cf33875..7d802620d72 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit ee04cf3387575dbefb16d8f1d60605e041a90b21 +Subproject commit 7d802620d7267d45d6db77f96e6dd5dcc3d5d320 diff --git a/doc/cookbook/source/examples/classifier/multiclass_linearmachine.rst b/doc/cookbook/source/examples/classifier/multiclass_linearmachine.rst new file mode 100644 index 00000000000..356d505f9a3 --- /dev/null +++ b/doc/cookbook/source/examples/classifier/multiclass_linearmachine.rst @@ -0,0 +1,43 @@ +========================== +Multi-class Linear Machine +========================== + +We extend the application of linear machines to multi-class datasets by constructing generic multiclass classifiers with ensembles of binary classifiers. + +In this example, we show how to apply :sgclass:`CLibLinear` to multi-class cases with :sgclass:`CLinearMulticlassMachine`. + +`See the linear SVM cookbook `_ for the infomration about :sgclass:`CLibLinear` binary classifier. + +------- +Example +------- + +Imagine we have files with training and test data. We create CDenseFeatures (here 64 bit floats aka RealFeatures) and :sgclass:`CMulticlassLabels` as + +.. sgexample:: multiclass_linearmachine.sg:create_features + +We use :sgclass:`CLibLinear` as base classifier and create an instance of :sgclass:`CLibLinear`. + +.. sgexample:: multiclass_linearmachine.sg:create_classifier + +In order to run :sgclass:`CLinearMulticlassMachine`, we need to specify an multi-class strategy from :sgclass:`CMulticlassOneVsRestStrategy` and :sgclass:`CMulticlassOneVsOneStrategy`. + +.. sgexample:: multiclass_linearmachine.sg:choose_strategy + +We create an instance of the :sgclass:`CLinearMulticlassMachine` classifier by passing it the strategy, dataset, binary classifer and the labels. + +.. sgexample:: multiclass_linearmachine.sg:create_instance + +Then we train and apply it to test data, which here gives :sgclass:`CMulticlassLabels`. + +.. sgexample:: multiclass_linearmachine.sg:train_and_apply + +We can evaluate test performance via e.g. :sgclass:`CMulticlassAccuracy`. + +.. sgexample:: multiclass_linearmachine.sg:evaluate_accuracy + +---------- +References +---------- + +:wiki:`Multiclass_classification` diff --git a/examples/meta/src/classifier/multiclass_linearmachine.sg b/examples/meta/src/classifier/multiclass_linearmachine.sg new file mode 100644 index 00000000000..4ad882c53a8 --- /dev/null +++ b/examples/meta/src/classifier/multiclass_linearmachine.sg @@ -0,0 +1,36 @@ +CSVFile f_feats_train("../../data/classifier_4class_2d_linear_features_train.dat") +CSVFile f_feats_test("../../data/classifier_4class_2d_linear_features_test.dat") +CSVFile f_labels_train("../../data/classifier_4class_2d_linear_labels_train.dat") +CSVFile f_labels_test("../../data/classifier_4class_2d_linear_labels_test.dat") + +#![create_features] +RealFeatures features_train(f_feats_train) +RealFeatures features_test(f_feats_test) +MulticlassLabels labels_train(f_labels_train) +MulticlassLabels labels_test(f_labels_test) +#![create_features] + +#![create_classifier] +LibLinear classifier() +#![create_classifier] + +#![choose_strategy] +MulticlassOneVsOneStrategy strategy() +#![choose_strategy] + +#![create_instance] +LinearMulticlassMachine mc_classifier(strategy, features_train, classifier, labels_train) +#![create_instance] + +#![train_and_apply] +mc_classifier.train() +MulticlassLabels labels_predict = mc_classifier.apply_multiclass(features_test) +#![train_and_apply] + +#![evaluate_accuracy] +MulticlassAccuracy eval() +real accuracy = eval.evaluate(labels_predict, labels_test) +#![evaluate_accuracy] + +# integration testing variables +RealVector output = labels_predict.get_labels() diff --git a/examples/undocumented/python_modular/classifier_multiclasslinearmachine_modular.py b/examples/undocumented/python_modular/classifier_multiclasslinearmachine_modular.py deleted file mode 100644 index b4bd8ccbd6e..00000000000 --- a/examples/undocumented/python_modular/classifier_multiclasslinearmachine_modular.py +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env python -from tools.multiclass_shared import prepare_data - -[traindat, label_traindat, testdat, label_testdat] = prepare_data(False) - -parameter_list = [[traindat,testdat,label_traindat,label_testdat,2.1,1,1e-5],[traindat,testdat,label_traindat,label_testdat,2.2,1,1e-5]] - -def classifier_multiclasslinearmachine_modular (fm_train_real=traindat,fm_test_real=testdat,label_train_multiclass=label_traindat,label_test_multiclass=label_testdat,width=2.1,C=1,epsilon=1e-5): - from modshogun import RealFeatures, MulticlassLabels - from modshogun import LibLinear, L2R_L2LOSS_SVC, LinearMulticlassMachine, MulticlassOneVsOneStrategy, MulticlassOneVsRestStrategy - - feats_train = RealFeatures(fm_train_real) - feats_test = RealFeatures(fm_test_real) - - labels = MulticlassLabels(label_train_multiclass) - - classifier = LibLinear(L2R_L2LOSS_SVC) - classifier.set_epsilon(epsilon) - classifier.set_bias_enabled(True) - mc_classifier = LinearMulticlassMachine(MulticlassOneVsOneStrategy(), feats_train, classifier, labels) - - mc_classifier.train() - label_pred = mc_classifier.apply() - out = label_pred.get_labels() - - if label_test_multiclass is not None: - from modshogun import MulticlassAccuracy - labels_test = MulticlassLabels(label_test_multiclass) - evaluator = MulticlassAccuracy() - acc = evaluator.evaluate(label_pred, labels_test) - print('Accuracy = %.4f' % acc) - - return out - -if __name__=='__main__': - print('MulticlassMachine') - classifier_multiclasslinearmachine_modular(*parameter_list[0])