Xmipp  v3.23.11-Nereus
Public Member Functions | List of all members

#include <fuzzy_som.h>

Inheritance diagram for FuzzySOM:
Inheritance graph
[legend]
Collaboration diagram for FuzzySOM:
Collaboration graph
[legend]

Public Member Functions

 FuzzySOM (double _m0, double _m1, unsigned long _annSteps, double _reg, double _epsilon, unsigned long _nSteps)
 
virtual ~FuzzySOM ()
 
virtual void train (FuzzyMap &_som, const TS &_examples)
 
virtual double test (const FuzzyMap &_som, const TS &_examples) const
 
virtual double functional (const TS &_examples, const FuzzyMap &_som, double _m, double _reg, double &_fidelity, double &_penalty)
 
- Public Member Functions inherited from ClassificationAlgorithm< FuzzyMap >
 ClassificationAlgorithm (const std::string &_ID="")
 
virtual ~ClassificationAlgorithm ()
 
virtual void train (DS &_ds, const TS &_examples) const
 
virtual void train (DS &_ds, TS &_examples) const
 
virtual double test (const DS &_ds, const TS &_examples) const=0
 
virtual void printSelf (std::ostream &_os) const
 
virtual const std::string & setID () const
 
virtual std::string & setID ()
 
void setListener (BaseListener *_listener)
 

Additional Inherited Members

- Public Types inherited from ClassificationAlgorithm< FuzzyMap >
typedef FuzzyMap DS
 
typedef DS::TS TS
 
- Protected Attributes inherited from ClassificationAlgorithm< FuzzyMap >
std::string ID
 
BaseListenerlistener
 

Detailed Description

This class trains a Smoothly Distributed Fuzzy c-Means Self Organizing Map

Definition at line 43 of file fuzzy_som.h.

Constructor & Destructor Documentation

◆ FuzzySOM()

FuzzySOM::FuzzySOM ( double  _m0,
double  _m1,
unsigned long  _annSteps,
double  _reg,
double  _epsilon,
unsigned long  _nSteps 
)
inline

Constructs the algorithm Parameter: _m0 Initial Fuzzy Membership constant Parameter: _m1 Final Fuzzy Membership constant Parameter: _annSteps Number of steps in deterministic annealing Parameter: _reg Regularization constant Parameter: _epsilon Stopping criterion Parameter: _nSteps Number of training steps

Definition at line 56 of file fuzzy_som.h.

58  : ClassificationAlgorithm<FuzzyMap>(), m0(_m0), m1(_m1), annSteps(_annSteps),
59  reg(_reg), epsilon(_epsilon), somNSteps(_nSteps)
60  {};
double epsilon

◆ ~FuzzySOM()

virtual FuzzySOM::~FuzzySOM ( )
inlinevirtual

Virtual destructor

Definition at line 65 of file fuzzy_som.h.

66  {};

Member Function Documentation

◆ functional()

double FuzzySOM::functional ( const TS _examples,
const FuzzyMap _som,
double  _m,
double  _reg,
double &  _fidelity,
double &  _penalty 
)
virtual

Determines the functional value Returns the fidelity to the data and penalty parts of the functional

Definition at line 344 of file fuzzy_som.cpp.

345 {
346  unsigned j;
347  unsigned vv;
348  unsigned cc;
349  double t;
350  double t1;
351  double t2 = 0;
352  _fidelity = 0;
353  for (vv = 0; vv < numVectors; vv++)
354  {
355  for (cc = 0; cc < numNeurons; cc++)
356  {
357  t = 0;
358  for (size_t j = 0; j < dim; j++)
359  t += ((double)(_examples.theItems[vv][j]) - (double)(_som.theItems[cc][j])) * ((double)(_examples.theItems[vv][j]) - (double)(_som.theItems[cc][j]));
360  t1 = (double) pow((double)_som.memb[vv][cc], (double) _m);
361  t2 += t1;
362  _fidelity += t1 * t;
363  }
364  }
365  _fidelity /= t2;
366  _penalty = 0;
367 
368  if (reg != 0)
369  {
370  for (cc = 0; cc < numNeurons; cc++)
371  {
372  _som.localAve(_som.indexToPos(cc), tmpV);
373  for (j = 0; j < dim; j++)
374  {
375  _penalty += (_som.theItems[cc][j] - tmpV[j]) * (_som.theItems[cc][j] - tmpV[j]);
376  }
377  }
378  _penalty /= (double)(numNeurons);
379  }
380 
381  return (_fidelity - _reg*_penalty);
382 }
MM memb
Alias for Fuzzy vectors.
void localAve(const SomPos &_center, std::vector< double > &_aveVector) const
Definition: map.cpp:896
SomPos indexToPos(const unsigned &_i) const
Definition: map.cpp:1033
double vv
std::vector< Item > theItems
Definition: training_set.h:84
#define j

◆ test()

double FuzzySOM::test ( const FuzzyMap _som,
const TS _examples 
) const
virtual

Tests the Fuzzy SOM Parameter: _som The fuzzy som to test Parameter: _examples The training set of examples

Definition at line 198 of file fuzzy_som.cpp.

199 {
200 
201  // Defines verbosity level
202  int verbosity = listener->getVerbosity();
203  if (verbosity)
204  {
205  listener->OnReportOperation((std::string) "\nEstimating quantization error....\n");
206  listener->OnInitOperation(_examples.size());
207  }
208 
209 
210  /* Scan all data entries */
211  double qerror = 0.0;
212  for (size_t i = 0; i < _examples.size(); i++)
213  {
214  SomIn& theBest = _som.fuzzyTest(i); // get the best
215  qerror += euclideanDistance(theBest, _examples.theItems[i]);
216  if (verbosity)
217  {
218  if ((i % (int)((_examples.size()*5) / 100)) == 0)
220  }
221  }
222  if (verbosity)
223  listener->OnProgress(_examples.size());
224  return (qerror / (double) _examples.size());
225 
226 }
double euclideanDistance(const std::vector< T > &_v1, const std::vector< T > &_v2)
Definition: vector_ops.h:377
virtual void OnReportOperation(const std::string &_rsOp)=0
virtual void OnInitOperation(unsigned long _est_it)=0
virtual const unsigned & getVerbosity() const
Definition: xmipp_funcs.h:1065
FeatureVector SomIn
Definition: map.h:44
#define i
virtual void OnProgress(unsigned long _it)=0
virtual FeatureVector & fuzzyTest(unsigned _in) const

◆ train()

void FuzzySOM::train ( FuzzyMap _som,
const TS _examples 
)
virtual

Trains the Fuzzy SOM Parameter: _som The som to train Parameter: _examples The training set

Trains the Fuzzy SOM Parameter: _som The fuzzy som to train Parameter: _ts The training set

Definition at line 97 of file fuzzy_som.cpp.

98 {
99 
100  numNeurons = _som.size();
101  numVectors = _examples.size();
102  dim = _examples.theItems[0].size();
103  tmpV.resize(dim, 0.);
104  tmpDens.resize(numNeurons, 0.);
105  tmpMap.resize(numNeurons);
106  for (size_t i = 0; i < numNeurons; i++)
107  tmpMap[i].resize(dim, 0.);
108 
109  tmpD.resize(numNeurons);
110  double stopError;
111 
112  int verbosity = listener->getVerbosity();
113  if (verbosity)
114  listener->OnReportOperation((std::string) "\nTraining Fuzzy SOM....\n");
115 
116  // Deterministic annealing step
117  if (annSteps)
118  {
119 
120  for (size_t i = 0; i < _examples.size(); i++)
121  for (size_t j = 0; j < _som.size(); j++)
122  _som.memb[i][j] = 0.;
123 
124  if (verbosity)
125  listener->OnReportOperation((std::string) "\nDeterministic annealing steps....\n");
126  if (verbosity == 1 || verbosity == 3)
127  listener->OnInitOperation(annSteps);
128 
129  double fuzz;
130  for (size_t iter = 0; iter < annSteps; iter++)
131  {
132 
133  fuzz = m0 - iter * (m0 - m1) / (annSteps - 1);
134  stopError = updateU(_som, _examples, fuzz);
135  updateV(_som, _examples, fuzz);
136  if (verbosity == 1 || verbosity == 3)
138  if (verbosity >= 2)
139  {
140  char s[100];
141  sprintf(s, "Iteration %d of %d. Code vectors variation: %g\n", (int)(iter + 1), (int)annSteps, stopError);
142  listener->OnReportOperation((std::string) s);
143  }
144  }
145  if (verbosity == 1 || verbosity == 3)
146  listener->OnProgress(annSteps);
147  }
148 
149 
150  // Fixed steps
151 
152 
153  for (size_t i = 0; i < _examples.size(); i++)
154  for (size_t j = 0; j < _som.size(); j++)
155  _som.memb[i][j] = 0.;
156 
157 
158  if (verbosity)
159  listener->OnReportOperation((std::string) "\nFinal steps....\n");
160  if (verbosity == 1 || verbosity == 3)
161  listener->OnInitOperation(somNSteps);
162 
163  unsigned t = 0; // Iteration index
164  stopError = epsilon + 1; // Initially must be higher
165 
166  while ((stopError > epsilon) && (t < somNSteps))
167  {
168  stopError = updateU(_som, _examples, m1);
169  updateV(_som, _examples, m1);
170  t++;
171  if (verbosity == 1 || verbosity == 3)
172  listener->OnProgress(t);
173  if (verbosity >= 2)
174  {
175  char s[100];
176  sprintf(s, "Iteration %d of %d. Code vectors variation: %g\n", (int)t, (int)somNSteps, stopError);
177  listener->OnReportOperation((std::string) s);
178  }
179  } // while
180  if (verbosity == 1 || verbosity == 3)
181  listener->OnProgress(somNSteps);
182 
183 
184  tmpV.clear();
185  tmpDens.clear();
186  tmpMap.clear();
187  tmpD.clear();
188 
189 }
MM memb
Alias for Fuzzy vectors.
virtual void OnReportOperation(const std::string &_rsOp)=0
virtual void OnInitOperation(unsigned long _est_it)=0
virtual const unsigned & getVerbosity() const
Definition: xmipp_funcs.h:1065
glob_prnt iter
#define i
if(fabs(c[*nmax+ *nmax *c_dim1])==0.e0)
virtual void OnProgress(unsigned long _it)=0
#define j
double epsilon

The documentation for this class was generated from the following files: