1#ifndef FSTCLASSIFIERKNN_H
2#define FSTCLASSIFIERKNN_H
94template<
class RETURNTYPE,
typename DATATYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR,
class DISTANCE>
95class Classifier_kNN :
public Clonable_Impl<Classifier_kNN<RETURNTYPE,DATATYPE,IDXTYPE,DIMTYPE,SUBSET,DATAACCESSOR,DISTANCE>,Classifier<RETURNTYPE,DIMTYPE,SUBSET,DATAACCESSOR> > {
117 virtual std::ostream&
print(std::ostream& os)
const override;
139 void sort_in(
const RETURNTYPE value,
const DIMTYPE cls);
140 typename std::list<Neighbour>::iterator
iter;
148template<
class RETURNTYPE,
typename DATATYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR,
class DISTANCE>
149Classifier_kNN<RETURNTYPE,DATATYPE,IDXTYPE,DIMTYPE,SUBSET,DATAACCESSOR,DISTANCE>::Classifier_kNN(
const Classifier_kNN& cknn) :
154 notify(
"Classifier_kNN constructor.");
161template<
class RETURNTYPE,
typename DATATYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR,
class DISTANCE>
172template<
class RETURNTYPE,
typename DATATYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR,
class DISTANCE>
181 typename DATAACCESSOR::PPattern p2;
183 DIMTYPE _feats=
_da_train->getNoOfFeatures();
191 for(DIMTYPE c_train=0;c_train<
_da_train->getNoOfClasses();c_train++)
194 for(
const auto &blk :
_da_train->blocks(
TRAIN))
for(i2=0,p2=blk.data,s2=blk.size;i2<s2;i2++)
197 val=
_distance->distance(pattern,&p2[i2*_feats]);
203template<
class RETURNTYPE,
typename DATATYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR,
class DISTANCE>
211 const DIMTYPE classes=
_da_train->getNoOfClasses();
212 for(DIMTYPE c=1;c<classes;c++)
if(
_cs_sc[c]>
_cs_sc[cls]) cls=c;
216template<
class RETURNTYPE,
typename DATATYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR,
class DISTANCE>
222 const DIMTYPE classes=
_da_train->getNoOfClasses();
223 scores.assign(classes,(RETURNTYPE)0.0);
225 for(
auto it=
_nns.rbegin();it!=
_nns.rend() && taken<
_k;++it,++taken)
226 scores[it->_cls]+=1.0;
227 if(taken==0)
return false;
228 for(DIMTYPE c=0;c<classes;c++) scores[c]/=(RETURNTYPE)taken;
233template<
class RETURNTYPE,
typename DATATYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR,
class DISTANCE>
237 while(
iter!=
_nns.end() && value < (*iter)._value)
iter++;
249template<
class RETURNTYPE,
typename DATATYPE,
typename IDXTYPE,
typename DIMTYPE,
class SUBSET,
class DATAACCESSOR,
class DISTANCE>
252 os <<
"Classifier_kNN(k=" <<
_k <<
")";
Holds information on distance and data-class membership of neighbors processed in Classifier_kNN.
Definition classifier_knn.hpp:126
RETURNTYPE _value
distance from the pattern being classified to this training neighbour
Definition classifier_knn.hpp:131
Neighbour(const RETURNTYPE value, const DIMTYPE cls)
constructs from a distance value and the neighbour's class cls
Definition classifier_knn.hpp:129
Neighbour(const Neighbour &nei)
copy constructor
Definition classifier_knn.hpp:130
DIMTYPE _cls
the training neighbour's class
Definition classifier_knn.hpp:132
Implements k-Nearest Neighbor classifier.
Definition classifier_knn.hpp:95
virtual bool classify(DIMTYPE &cls, const PPattern &pattern) override
Definition classifier_knn.hpp:204
std::vector< RETURNTYPE > _cs_sc
Definition classifier_knn.hpp:142
virtual bool classify_scores(std::vector< RETURNTYPE > &scores, const PPattern &pattern) override
Definition classifier_knn.hpp:217
DATAACCESSOR::PPattern PPattern
Definition classifier_knn.hpp:101
std::list< Neighbour > _nns
Definition classifier_knn.hpp:141
Clonable_Impl< Classifier_kNN, parent > parent_impl
Definition classifier_knn.hpp:98
std::shared_ptr< DATAACCESSOR > PDataAccessor
Definition classifier_knn.hpp:99
virtual bool train(const PDataAccessor da, const PSubset sub) override
Definition classifier_knn.hpp:162
std::unique_ptr< DIST_L2 > _distance
Definition classifier_knn.hpp:144
void set_k(const DIMTYPE k)
sets the number of nearest neighbours collected and voted over; k must be > 0
Definition classifier_knn.hpp:105
Classifier_kNN(const Classifier_kNN &cknn)
copy-constructor (clones _distance if allocated; _nns/_k/_nns_max_size are value-copied)
Definition classifier_knn.hpp:149
DIMTYPE _k
Definition classifier_knn.hpp:134
std::shared_ptr< SUBSET > PSubset
Definition classifier_knn.hpp:100
DIMTYPE _nns_max_size
Definition classifier_knn.hpp:135
std::list< Neighbour >::iterator iter
Definition classifier_knn.hpp:140
Classifier< RETURNTYPE, DIMTYPE, SUBSET, DATAACCESSOR > parent
Definition classifier_knn.hpp:97
PDataAccessor _da_train
Definition classifier_knn.hpp:145
virtual std::ostream & print(std::ostream &os) const override
writes a human-readable identification of the object; base default writes nothing
Definition classifier_knn.hpp:250
void collect_neighbours(const PPattern &pattern)
Definition classifier_knn.hpp:173
DIMTYPE get_k() const
the k set by set_k() (default 1)
Definition classifier_knn.hpp:106
void sort_in(const RETURNTYPE value, const DIMTYPE cls)
Definition classifier_knn.hpp:234
abstract class, defines interface for classifier implementations (mainly to be used in wrappers)
Definition classifier.hpp:97
CRTP mixin implementing the Clonable protocol for a concrete class.
Definition clonable.hpp:184
Defines interface for classifier implementations.
FST4 specific error passing class.
The Feature Selection Toolbox 4 library: every library component – data access, criteria and classifi...
Definition data_accessor.hpp:80
void notify(const std::string msg)
Prints msg followed by a newline via syncout::print(); a no-op unless the preprocessor macro DEBUG is...
Definition global.hpp:112
@ TRAIN
the split's training part
Definition data_accessor.hpp:85
std::unique_ptr< T > clone_unique(const T &src)
Definition clonable.hpp:234