26 rejectionThreshold = 0;
34 this->classLabel = rhs.classLabel;
35 this->numFeatures = rhs.numFeatures;
36 this->numClusters = rhs.numClusters;
37 this->rejectionThreshold = rhs.rejectionThreshold;
38 this->gamma = rhs.gamma;
39 this->trainingMu = rhs.trainingMu;
40 this->trainingSigma = rhs.trainingSigma;
41 this->clusters = rhs.clusters;
49 this->classLabel = rhs.classLabel;
50 this->numFeatures = rhs.numFeatures;
51 this->numClusters = rhs.numClusters;
52 this->rejectionThreshold = rhs.rejectionThreshold;
53 this->gamma = rhs.gamma;
54 this->trainingMu = rhs.trainingMu;
55 this->trainingSigma = rhs.trainingSigma;
56 this->clusters = rhs.clusters;
61 bool MinDistModel::train(UINT classLabel,
MatrixDouble &trainingData,UINT numClusters,
double minChange,UINT maxNumEpochs){
67 this->classLabel = classLabel;
69 this->numClusters = numClusters;
77 if( !kmeans.
train_(trainingData) ){
81 clusters = kmeans.getClusters();
84 rejectionThreshold = 0;
91 VectorDouble predictions(M);
92 for(UINT i=0; i<M; i++){
94 VectorDouble testData(N);
95 for(UINT j=0; j<N; j++) {
96 testData[j] = trainingData[i][j];
99 predictions[i] = predict( testData );
100 trainingMu += predictions[i];
104 trainingMu /= double(M);
107 for(UINT i=0; i<M; i++) {
108 trainingSigma += SQR( predictions[i]-trainingMu );
110 trainingSigma = sqrt( trainingSigma / (
double(M)-1.0) );
112 rejectionThreshold = trainingMu + ( trainingSigma * gamma );
117 double MinDistModel::predict(
const VectorDouble &inputVector){
119 double minDist = numeric_limits<double>::max();
122 for(UINT k=0; k<numClusters; k++){
124 for(UINT n=0; n<numFeatures; n++){
125 dist += SQR( clusters[k][n]-inputVector[n] );
132 return sqrt( minDist );
137 void MinDistModel::recomputeThresholdValue(){
138 rejectionThreshold = trainingMu + ( trainingSigma * gamma );
141 UINT MinDistModel::getClassLabel()
const{
145 UINT MinDistModel::getNumFeatures()
const{
149 UINT MinDistModel::getNumClusters()
const{
153 double MinDistModel::getRejectionThreshold()
const{
154 return rejectionThreshold;
157 double MinDistModel::getGamma()
const{
161 double MinDistModel::getTrainingMu()
const{
165 double MinDistModel::getTrainingSigma()
const{
166 return trainingSigma;
173 bool MinDistModel::setClassLabel(UINT classLabel){
174 this->classLabel = classLabel;
179 this->clusters = clusters;
185 bool MinDistModel::setGamma(
double gamma){
190 bool MinDistModel::setRejectionThreshold(
double rejectionThreshold){
191 this->rejectionThreshold = rejectionThreshold;
195 bool MinDistModel::setTrainingSigma(
double trainingSigma){
196 this->trainingSigma = trainingSigma;
200 bool MinDistModel::setTrainingMu(
double trainingMu){
201 this->trainingMu = trainingMu;
bool setMaxNumEpochs(const UINT maxNumEpochs)
unsigned int getNumCols() const
bool setMinChange(const double minChange)
bool setNumClusters(const UINT numClusters)
This class implements the MinDist classifier algorithm.
MinDistModel & operator=(const MinDistModel &rhs)
virtual bool train_(MatrixDouble &data)
unsigned int getNumRows() const