1 #ifndef _theplu_yat_classifier_ncc_ 2 #define _theplu_yat_classifier_ncc_ 27 #include "MatrixLookup.h" 28 #include "MatrixLookupWeighted.h" 29 #include "SupervisedClassifier.h" 32 #include "yat/statistics/Averager.h" 33 #include "yat/statistics/AveragerWeighted.h" 34 #include "yat/utility/concept_check.h" 35 #include "yat/utility/Exception.h" 36 #include "yat/utility/Matrix.h" 37 #include "yat/utility/MatrixWeighted.h" 38 #include "yat/utility/Vector.h" 39 #include "yat/utility/yat_assert.h" 41 #include <boost/concept_check.hpp> 49 namespace classifier {
63 template <
typename Distance>
179 template <
typename Distance>
186 template <
typename Distance>
194 template <
typename Distance>
200 template <
typename Distance>
207 template <
typename Distance>
216 template <
typename Distance>
220 for(
size_t i=0; i<data.
rows(); i++) {
221 std::vector<statistics::Averager> class_averager;
223 for(
size_t j=0; j<data.
columns(); j++) {
224 class_averager[target(j)].add(data(i,j));
227 centroids_(i,c) = class_averager[c].mean();
233 template <
typename Distance>
237 for(
size_t i=0; i<data.
rows(); i++) {
238 std::vector<statistics::AveragerWeighted> class_averager;
240 for(
size_t j=0; j<data.
columns(); j++)
241 class_averager[target(j)].add(data.
data(i,j),data.
weight(i,j));
243 if(class_averager[c].sum_w()==0) {
246 centroids_(i,c) = class_averager[c].mean();
252 template <
typename Distance>
256 utility::yat_assert<utility::runtime_error>
258 "NCC::predict test data with incorrect number of rows");
269 predict_unweighted(test,prediction);
273 template <
typename Distance>
277 utility::yat_assert<utility::runtime_error>
279 "NCC::predict test data with incorrect number of rows");
282 predict_weighted(test,prediction);
286 template <
typename Distance>
290 for(
size_t j=0; j<test.
columns();j++)
291 for(
size_t k=0; k<centroids_.
columns();k++)
296 template <
typename Distance>
301 for(
size_t j=0; j<test.
columns();j++)
302 for(
size_t k=0; k<centroids_.
columns();k++)
General view into utility::Matrix.
Definition: MatrixLookup.h:70
const utility::Matrix & centroids(void) const
Get the centroids for all classes.
Definition: NCC.h:201
size_t columns(void) const
Class for containing sample labels.
Definition: Target.h:47
The Department of Theoretical Physics namespace as we define it.
virtual ~NCC(void)
Definition: NCC.h:195
void resize(size_t r, size_t c, double init_value=0)
Resize Matrix.
void predict(const MatrixLookup &data, utility::Matrix &results) const
Make predictions for unweighted test data.
Definition: NCC.h:253
NCC< Distance > * make_classifier(void) const
Create an untrained copy of the classifier.
Definition: NCC.h:209
Nearest Centroid Classifier.
Definition: NCC.h:64
Interface class for supervised classifiers that use data in a matrix format.
Definition: SupervisedClassifier.h:56
column_iterator begin_column(size_t i)
iterator begin_column(size_t i)
double weight(size_t row, size_t column) const
size_t columns(void) const
General view into utility::MatrixWeighted.
Definition: MatrixLookupWeighted.h:63
const_column_iterator end_column(size_t) const
const_column_iterator begin_column(size_t) const
void train(const MatrixLookup &data, const Target &targets)
Train the NCC using unweighted training data with known targets.
Definition: NCC.h:217
const_column_iterator end_column(size_t) const
Concept check for a Distance.
Definition: concept_check.h:278
Interface to GSL matrix.
Definition: Matrix.h:74
Weighted Matrix.
Definition: MatrixWeighted.h:47
const_column_iterator begin_column(size_t) const
NCC(void)
Constructor.
Definition: NCC.h:180
size_t nof_classes(void) const
double data(size_t row, size_t column) const
size_t columns(void) const