From f0f86fc4b2766fcd49f9864c6735aa02acd6f6f2 Mon Sep 17 00:00:00 2001 From: OXPHOS Date: Sat, 2 Jul 2016 09:38:58 +0800 Subject: [PATCH] multiples lad with integration data --- data | 2 +- .../linear_discriminant_analysis.rst | 41 +++++++++++++++++++ .../linear_discriminant_analysis.sg | 34 +++++++++++++++ 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 doc/cookbook/source/examples/multiclass_classifier/linear_discriminant_analysis.rst create mode 100644 examples/meta/src/multiclass_classifier/linear_discriminant_analysis.sg diff --git a/data b/data index b9b2d9058c2..4b27a7a5c8b 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit b9b2d9058c22dae86a4181db7271dfa02485af7d +Subproject commit 4b27a7a5c8b99d66829691f750cf9bbfa4e649e5 diff --git a/doc/cookbook/source/examples/multiclass_classifier/linear_discriminant_analysis.rst b/doc/cookbook/source/examples/multiclass_classifier/linear_discriminant_analysis.rst new file mode 100644 index 00000000000..66930234500 --- /dev/null +++ b/doc/cookbook/source/examples/multiclass_classifier/linear_discriminant_analysis.rst @@ -0,0 +1,41 @@ +============================ +Linear Discriminant Analysis +============================ + +This cookbook page introduces the application of +`linear discriminant analysis `_ +to multi-class classifications. + +------- +Example +------- + +Imagine we have files with training and test data. We create CDenseFeatures (here 64 bit floats aka RealFeatures) and :sgclass:`CMulticlassLabels` as + +.. sgexample:: linear_discriminant_analysis.sg:create_features + +We create an instance of the :sgclass:`CMCLDA` classifier with feature matrix and label list. +:sgclass:`CMCLDA` also has two default parameters, to set tolerance used in training and mark whether to store the within class covariances. + +.. sgexample:: linear_discriminant_analysis.sg:create_instance + +Then we train and apply it to the test data, which here gives :sgclass:`CMulticlassLabels`. + +.. sgexample:: linear_discriminant_analysis.sg:train_and_apply + +We can extract the mean vector of one class. +If we enabled storing covariance when creating instances, we can also extract the covariance matrix: + +.. sgexample:: linear_discriminant_analysis.sg:extract_mean_and_cov + +We can evaluate test performance via e.g. :sgclass:`CMulticlassAccuracy`. + +.. sgexample:: linear_discriminant_analysis.sg:evaluate_accuracy + +---------- +References +---------- + +:wiki:`Linear_discriminant_analysis` + +:wiki:`Linear_discriminant_analysis#Multiclass_LDA` diff --git a/examples/meta/src/multiclass_classifier/linear_discriminant_analysis.sg b/examples/meta/src/multiclass_classifier/linear_discriminant_analysis.sg new file mode 100644 index 00000000000..f94805ba37d --- /dev/null +++ b/examples/meta/src/multiclass_classifier/linear_discriminant_analysis.sg @@ -0,0 +1,34 @@ +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_instance] +MCLDA mc_lda(features_train, labels_train, 0.0001, True) +#![create_instance] + +#![train_and_apply] +mc_lda.train() +MulticlassLabels labels_predict = mc_lda.apply_multiclass(features_test) +#![train_and_apply] + +#![extract_mean_and_cov] +int classlabel = 1 +RealVector m = mc_lda.get_mean(classlabel) +RealMatrix c = mc_lda.get_cov() +#![extract_mean_and_cov] + +#![evaluate_accuracy] +MulticlassAccuracy evals() +real accuracy = evals.evaluate(labels_predict, labels_test) +#![evaluate_accuracy] + +# additional integration testing variables +RealVector output = labels_predict.get_labels()