Commit 9d592861 authored by Jussi Lindgren's avatar Jussi Lindgren
Browse files

Documentation: Some tweaks

- Added Guillaume Serriere as the second author to the new classifier boxes
- Fixed some misinformation in the classifier docs
parent f079527d
......@@ -6,16 +6,15 @@ Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Description|
The <em>Classifier Processor</em> box is a generic box for classification purpose. It works
in conjunction with the \ref Doc_BoxAlgorithm_ClassifierTrainer box.
This box' role is to expose a generic interface to the rest of the BCI pipelines. The tasks
specific to a given classifier are forwarded to an algorithm or a structur of algorithms depending if what is
describe in the configuration file. The behavior is simple, at initialization phase, the classification structure
is initialized
and its configuration is loaded from the configuration file. Then each time this box receives a new
feature vector, it is forwarded to the classification algorithm that classifies it. The box gets the algorithm
status and the actual class value and translates this information to its output. The class is sent in the form of
a stimulation and the algorithm status is sent in the form a streamed matrix. The stimulation can be generically
The <em>Classifier Processor</em> box is a generic box for classifying data (feature vectors).
It works in conjunction with the \ref Doc_BoxAlgorithm_ClassifierTrainer box.
This box' role is to expose a generic interface to the rest of the BCI pipeline. The
vectors to classify are forwarded to an algorithm or a structure of algorithms depending on what is
described in the loaded configuration file. The behavior is simple: at initialization phase, the classification
structure is initialized and its configuration is loaded from the configuration file. Then each time this box
receives a new feature vector, it is forwarded to the classification algorithm that classifies it. The box gets the algorithm
status and the actual class value and translates this information to its output. The predicted class is sent out in
the form of a stimulation and the algorithm status is sent in the form a streamed matrix. The stimulation can be generically
interpreted by the rest of the pipeline but it is important to understand that each classification algorithm is
free to report whatever it wants in its "status matrix". Consequently, the use of this output stream will be
dependent on the chosen classification algorithm. For example, the LDA classifier sends the hyperplane distance
......@@ -30,7 +29,7 @@ __________________________________________________________________
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Inputs|
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Input1|
This input should be connected to the feature vectors to classify. Each time a new feature vector arrives,
This input should be connected to the feature vector stream to classify. Each time a new feature vector arrives,
a classification process will be triggered. Consequently, a classification stimulation will be sent on the
first output of this box.
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Input1|
......
......@@ -15,9 +15,9 @@ algorithm selected.
The behavior is simple, the box collects a number of feature vectors. Those feature vectors
are labelled depending on the input they arrive on. When a specific stimulation arrives, a training
process is triggered. This process can take some time so this box should be used offline. Depending on the
settings you enter, you will be able to perform a k-fold test in order to train a better classifier. When
this training stimulation is received, the box generates a configuration file that will be usable online by the
\ref Doc_BoxAlgorithm_ClassifierProcessor box.
settings you enter, you will be able to perform a k-fold test to estimate the accuracy of the learned
classifier. When this training stimulation is received, the box generates a configuration file that will
be usable online by the \ref Doc_BoxAlgorithm_ClassifierProcessor box.
Finally, the box outputs a particular stimulation (OVTK_StimulationId_TrainCompleted)
on its output, that can be used to trigger further treatments in the scenario.
* |OVP_DocEnd_BoxAlgorithm_ClassifierTrainer_Description|
......
......@@ -17,7 +17,7 @@ specific to a given classifier are forwarded to one of the registered \c OVTK_Ty
algorithms. The behavior is simple, the box collects a number of feature vectors. Those feature vectors
are labelled depending on the input they arrive on. When a specific stimulation arrives, a training
process is triggered. This process can take some time so this box should be used offline. Depending on the
settings you enter, you will be able to perform a k-fold test in order to train a better classifier. When
settings you enter, you will be able to perform a k-fold test to estimate the accuracy of the classifier. When
this training stimulation is received, the box requests the selected classification algorithm to generate
a configuration file that will be usable online by the \ref Doc_BoxAlgorithm_ClassifierProcessor box.
Finally, the box releases a particular stimulation (OVTK_StimulationId_TrainCompleted) on its ouput,
......@@ -92,8 +92,8 @@ This is the stimulation to consider to trigger the training process.
* |OVP_DocBegin_BoxAlgorithm_ClassifierTrainerDeprecated_Setting4|
If you want to perform a k-fold test, you should enter something else than 0 or 1 here. A k-fold test generally allows
better classification rates. The idea is to divide the set of feature vectors in a number of partitions. The classification
algorithm is trained on some of the partitions and its accuracy is tested on the others. The classifier with the best results
is selected as the trained classifier. See the miscellaneous section for details on how the k-fold test is done in this box.
algorithm is trained on some of the partitions and its accuracy is tested on the others. See the miscellaneous section for
details on how the k-fold test is done in this box.
* |OVP_DocEnd_BoxAlgorithm_ClassifierTrainerDeprecated_Setting4|
__________________________________________________________________
......@@ -174,10 +174,7 @@ The same process if performed on all the partitions :
Important things to consider :
- The more partitions you have, the more feature vector you have in your training sets... and the less examples you'll have to
test on. This means that the result of the test will probably be less reliable. But you will be able to choose the best classifier
among a more consequent list.
- The less partitions you have, the less feature vector you have in your training sets... and the more examples you'll have to
test on. This means that the online use of the trained classifier is more likely to be consistent with the trained classifier accuracy.
test on. This means that the result of the test will probably be less reliable.
In conclusion, be carefull when choosing this k-fold test setting. Typical value range from 4 partitions (train on 75% of the feature vectors and
test on 25% - 4 times) to 10 partitions (train on 90% of the feature vectors and test on 10% - 10 times).
......
......@@ -73,7 +73,7 @@ namespace OpenViBEPlugins
virtual OpenViBE::CString getAuthorName(void) const { return OpenViBE::CString("Yann Renard"); }
virtual OpenViBE::CString getAuthorCompanyName(void) const { return OpenViBE::CString("INRIA/IRISA"); }
virtual OpenViBE::CString getShortDescription(void) const { return OpenViBE::CString("Generic classifier trainer, relying on several box algorithms"); }
virtual OpenViBE::CString getDetailedDescription(void) const { return OpenViBE::CString("Performs multiple training on the feature vector set leaving a single feature vector each time and tests this feature vector on the trained classifier"); }
virtual OpenViBE::CString getDetailedDescription(void) const { return OpenViBE::CString("Performs classifier training with cross-validation -based error estimation"); }
virtual OpenViBE::CString getCategory(void) const { return OpenViBE::CString("Classification"); }
virtual OpenViBE::CString getVersion(void) const { return OpenViBE::CString("1.0"); }
virtual OpenViBE::CString getStockItemName(void) const { return OpenViBE::CString("gtk-apply"); }
......
......@@ -45,12 +45,12 @@ namespace OpenViBEPlugins
virtual void release(void) { }
virtual OpenViBE::CString getName(void) const { return OpenViBE::CString("Classifier processor"); }
virtual OpenViBE::CString getAuthorName(void) const { return OpenViBE::CString("Yann Renard"); }
virtual OpenViBE::CString getAuthorName(void) const { return OpenViBE::CString("Yann Renard, Guillaume Serriere"); }
virtual OpenViBE::CString getAuthorCompanyName(void) const { return OpenViBE::CString("INRIA/IRISA"); }
virtual OpenViBE::CString getShortDescription(void) const { return OpenViBE::CString("Generic classification, relying on several box algorithms"); }
virtual OpenViBE::CString getDetailedDescription(void) const { return OpenViBE::CString(""); }
virtual OpenViBE::CString getDetailedDescription(void) const { return OpenViBE::CString("Classifies incoming training examples using a previously learned classifier"); }
virtual OpenViBE::CString getCategory(void) const { return OpenViBE::CString("Classification"); }
virtual OpenViBE::CString getVersion(void) const { return OpenViBE::CString("1.0"); }
virtual OpenViBE::CString getVersion(void) const { return OpenViBE::CString("2.0"); }
virtual OpenViBE::CString getStockItemName(void) const { return OpenViBE::CString("gtk-apply"); }
virtual OpenViBE::CIdentifier getCreatedClass(void) const { return OVP_ClassId_BoxAlgorithm_ClassifierProcessor; }
......
......@@ -73,12 +73,12 @@ namespace OpenViBEPlugins
virtual void release(void) { }
virtual OpenViBE::CString getName(void) const { return OpenViBE::CString("Classifier trainer"); }
virtual OpenViBE::CString getAuthorName(void) const { return OpenViBE::CString("Yann Renard"); }
virtual OpenViBE::CString getAuthorName(void) const { return OpenViBE::CString("Yann Renard, Guillaume Serriere"); }
virtual OpenViBE::CString getAuthorCompanyName(void) const { return OpenViBE::CString("INRIA/IRISA"); }
virtual OpenViBE::CString getShortDescription(void) const { return OpenViBE::CString("Generic classifier trainer, relying on several box algorithms"); }
virtual OpenViBE::CString getDetailedDescription(void) const { return OpenViBE::CString("Performs multiple training on the feature vector set leaving a single feature vector each time and tests this feature vector on the trained classifier"); }
virtual OpenViBE::CString getDetailedDescription(void) const { return OpenViBE::CString("Performs classifier training with cross-validation -based error estimation"); }
virtual OpenViBE::CString getCategory(void) const { return OpenViBE::CString("Classification"); }
virtual OpenViBE::CString getVersion(void) const { return OpenViBE::CString("1.0"); }
virtual OpenViBE::CString getVersion(void) const { return OpenViBE::CString("2.0"); }
virtual OpenViBE::CString getStockItemName(void) const { return OpenViBE::CString("gtk-apply"); }
virtual OpenViBE::CIdentifier getCreatedClass(void) const { return OVP_ClassId_BoxAlgorithm_ClassifierTrainer; }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment