15 #include "PyramidOfWords.hh"
20 #include <ext/hash_set>
26 #define CARTESIAN_SOM 0x01 // plain SOM
27 #define HYPERBOLIC_SOM 0x02 // hyperbolic SOM
28 #define H_HYPERBOLIC_SOM 0x04 // hierarchical hyperbolic SOM
29 #define HG_HYPERBOLIC_SOM 0x08 // hierarchically growing hyperbolic SOM
31 #define STATS_DIMENSION 11
33 #define COPY_CLASSCOUNT 0x01
34 #define COPY_PROTOTYPE 0x02
35 #define APPEND_BMUS 0x04
43 using namespace __gnu_cxx;
49 template<
class Type>
class CSOM;
106 void addLink(
int iFrom,
int iTo);
114 void addDomain(
int iStart,
int iEnd) { vDomains.push_back(make_pair(iStart, iEnd)); }
117 int getDomainSize(
int iDomain) {
return vDomains[iDomain].second-vDomains[iDomain].first+1; }
121 for (iDomain=vDomains.size()-1; iDomain > 0; iDomain--)
122 if (iNode >= vDomains[iDomain].first)
break;
136 int getNeighbour(
int iNode,
int iPos) {
return vvNeighbours[iNode][iPos]; }
138 int getCenterNode(
bool bVisibleNodes) {
if (bVisibleNodes)
return iVisibleNodesCenter;
139 else return iCenterNode; }
143 void setType(
int iNewType) { iType = iNewType; }
149 virtual void getInfo(vector<int>& viDims) { };
152 virtual int translateGrid(
float *pfTrans,
float *pfTarget,
int iMode=0) {
return -1; }
161 virtual bool getPolyLine(
int iLine,
int &riStart,
int &riEnd) {
return false; }
176 typedef hash_set<int, hash<int>, equal_to<int> > NodeHashSet;
177 typedef set<int, less<int> > NodeSet;
187 int iNumVisibleRings;
192 NodeHashSet hashsetRingNodes;
193 NodeSet setRingNodes;
197 vector<int> viCompleteGeometry;
198 vector<int> viOutBounds;
201 vector<int> viPolyLinePoints;
204 set<int, less<int> > setOutbounds;
236 void rotateNode(
int iCenter,
int iFrom,
int iTarget);
241 int addRing(
int iFirst,
int iLast);
243 void addTriangle(
int i1,
int i2,
int i3);
245 void getInfo(vector<int>& viDims);
247 int translateGrid(
float *pfTrans,
float *pfTarget,
int iMode=0);
249 void copyVisibleNodeCoordinates(
float *pfTarget);
251 void setParameter(
float *pfParam);
253 void setNumVisibleRings(
int iNumVisibleRings);
255 int getNumNodesUptoRing(
int iRing);
261 bool getPolyLine(
int iLine,
int &riStart,
int &riEnd);
266 void performBeamSearch(
int iRoot,
int iLevel);
270 void addPolyLinesFrom(
int iNode);
272 void computeOutbounds(
int iNode);
273 void computeOutbounds(
int iNode,
int iK);
277 setOutbounds.clear();
279 computeOutbounds(iNode, iK);
280 return setOutbounds.size();
282 computeOutbounds(iNode);
284 if (iNumOutbounds == 0)
return 1;
285 else return iNumOutbounds;
290 void getOutBoundRange(
int iNode, vector<int>::iterator& itStart, vector<int>::iterator& itEnd) {
291 itStart = this->vvNeighbours[iNode].begin() + viOutBounds[iNode];
292 itEnd = this->vvNeighbours[iNode].end();
296 this->iBeamBranch = abs(iBranch);
298 this->bBeamSFsearch =
true;
313 void getInfo(vector<int>& viDims);
315 int translateGrid(
float *pfTrans,
float *pfTarget,
int iMode=0);
336 typedef set<int, less<int> > NodeSet;
350 vector<string> vLabel;
351 vector<char*> vKeyWords;
353 vector<vector< pair<float,int> > > vvIDs;
359 void makeReferenceVectors();
361 NodeSet setSelectedNodes;
362 NodeSet::iterator itNodeSet;
364 vector<CFlowItem> vFlowItems;
366 vector<CDenseVector<float> > tActivities;
412 void setMetaData(
int iPos, Type *ptTheData);
414 float getMeta4Node(
int iNode,
int iPos) {
return tMetaData[iNode].inputVectorPtr()->getElement(iPos); }
422 void setLabel(
int iNode,
string strLabel);
423 string getLabel(
int iNode);
439 int setCartesianTopology(vector<int>& rviNbUnits);
447 int setHyperbolicTopology(
int iNeighbours,
int iRings,
int iVisible=3);
471 if (ptTopology) ptTopology->train(rtTrainSet,
this);
475 if (ptTopology) ptTopology->trainGrowing(rtTrainSet,
this, fGrowParam);
479 return ptTopology->tNodes;
494 void uMat(vector<Type>& rvtDist, Type fNeighborhood);
499 if (ptTopology)
return ptTopology->iNumVisibleNodes;
504 if (ptTopology)
return ptTopology->viVisibleNode[iPos];
510 void copyNodeAttributes(
int iContext,
int iAttrib,
float *pfTarget,
511 float &fMin,
float &fMax,
float *pfSource=NULL);
513 void copyNodeDistances(
float *pfDist);
515 bool selectNode(
int iNode,
bool bSelect);
517 int getSelectedNodes(
bool bFirst);
521 Type getNodeDistance(
int iN1,
int iN2);
523 void setFlowSize(
int iNumItems);
526 void setFlowItem(
int iPos,
int *piNodes,
char *pcDate,
unsigned long iTime);
527 void computeFlow(
float *pfParams);
528 void getFlow(
int iPos,
float *pfTarget,
char *pcDate);
531 int getChildren(
int iNode,
int* piChildren);
int getBestMatchID()
Definition: CSOM.h:519
void setUpdateSteps(int iVal)
Definition: CSOM.h:416
void train(CDataset< Type > &rtTrainSet, CSOM< Type > *pSOM)
Use topology specific training algorithm to build SOM.
Definition: CSOM.h:317
virtual void buildDomains()
Definition: CSOM.h:130
multimap< float, int > MapBMUs
Definition: CSOM.h:45
int getDomainStart(int iDomain)
Definition: CSOM.h:115
Base class for all learning rate functions Template base class for all learning rates (virtual)...
Definition: CLearnRate.h:39
int getNumDomains()
Definition: CSOM.h:113
virtual int translateGrid(float *pfTrans, float *pfTarget, int iMode=0)
Translates grid structure.
Definition: CSOM.h:152
Definition: MysqlDatabase.h:40
CKernel< Type > & getKernel()
Definition: CSOM.h:420
Topology class describing two dimensional hyperbolic lattice structure.
Definition: CSOM.h:172
int getNumOutbounds(int iNode, int iK=0)
Definition: CSOM.h:275
const CVector< double > & getCenterPosition()
Definition: CSOM.h:101
void train(CDataset< Type > &rtTrainSet, CSOM< Type > *pSOM)
Use topology specific training algorithm to build SOM.
int getFlowSize()
Definition: CSOM.h:524
map< int, float > MapDist
Definition: CSOM.h:47
int getGeometrySize()
Definition: CSOM.h:157
virtual int getNumPolyLines()
Definition: CSOM.h:160
int iType
type of lattice topology
Definition: CSOM.h:66
void setBeamBranching(int iBranch)
Definition: CSOM.h:295
CDataset< double > & nodeData()
Definition: CSOM.h:478
CDataset< Type > & metaData()
Returns the meta data dataset containing some statistics like node sizes.
Definition: CSOM.h:411
Base class for metrix objects.
Definition: CMetric.h:36
int getNumOutbounds(int iNode, int iK=0)
Definition: CSOM.h:320
Euclidean metric object.
Definition: CMetric.h:66
#define COPY_CLASSCOUNT
Definition: CSOM.h:33
int * piNodes
Definition: CSOM.h:53
CSomTopology< Type > * topologyPtr()
Definition: CSOM.h:408
int iNumVisibleNodes
Definition: CSOM.h:76
vector< int > viGeometry
geometry data for VTK
Definition: CSOM.h:70
CDataset< double > tNodes
dataset of node coordinates
Definition: CSOM.h:68
SOM class for Self Organizing Maps with arbitrary topology.
Definition: MysqlDatabase.h:14
const CVector< double > & getNodePosition(int i)
Definition: CSOM.h:99
vector< bool > vbExpand
each node possible carries an expand attribute
Definition: CSOM.h:83
vector< string > vTopicNames
Meta data: topic names.
Definition: CSOM.h:371
virtual void getInfo(vector< int > &viDims)
Definition: CSOM.h:149
unsigned long iTimestamp
Definition: CSOM.h:55
vector< int > viVisiblePos
each visible node points to its "real" node
Definition: CSOM.h:73
int getDomainOfNode(int iNode)
Definition: CSOM.h:118
vector< int > viDimensions
Definition: CSOM.h:311
CMetric< Type > * getDataMetricPtr()
Definition: CSOM.h:394
map< int, int > MapPath
Definition: CSOM.h:46
int getOutBounds(int iNode)
Definition: CSOM.h:288
int getGeometryPoint(int iPoint)
Definition: CSOM.h:158
virtual bool getPolyLine(int iLine, int &riStart, int &riEnd)
Definition: CSOM.h:161
void getOutBoundRange(int iNode, vector< int >::iterator &itStart, vector< int >::iterator &itEnd)
Definition: CSOM.h:290
CDenseVector< double > tCenter
vector describing topology center
Definition: CSOM.h:69
void trainTopology(CDataset< Type > &rtTrainSet)
Definition: CSOM.h:470
int getNumNodes()
Definition: CSOM.h:496
float getMeta4Node(int iNode, int iPos)
Definition: CSOM.h:414
Topology class for n dimensional cartesian grid.
Definition: CSOM.h:306
void setType(int iNewType)
Definition: CSOM.h:143
int getVisibleNode(int iPos)
Definition: CSOM.h:503
float getProgress()
Definition: CSOM.h:533
vector< pair< int, int > > vDomains
SOM area might consist of several domains.
Definition: CSOM.h:78
Base class for kernel functions Base class for kernel function used for example by the support vector...
Definition: CKernel.h:46
int getNumNeighbours(int i)
Definition: CSOM.h:111
CLearnRate< Type > & getAlphaRate()
Definition: CSOM.h:418
int getNumVisibleNodes()
Definition: CSOM.h:498
templatized vector for numerical applications
Definition: CMatrix.h:39
virtual int getNumOutbounds(int iNode, int iK=0)
Definition: CSOM.h:163
Base class for cluster algorithms.
Definition: CClusterAlgorithm.h:38
int getNumSelectedNodes()
Definition: CSOM.h:516
vector< vector< int > > vvNeighbours
each node has a list of neighbours
Definition: CSOM.h:67
void trainGrowing(CDataset< Type > &rtTrainSet, float fGrowParam)
Definition: CSOM.h:474
int iVisibleNodesCenter
Definition: CSOM.h:75
CLearnRate< Type > & getSigmaRate()
Definition: CSOM.h:419
virtual ~CCartesianTopology()
Definition: CSOM.h:310
vector< int > viVisibleNode
list of currently visible nodes
Definition: CSOM.h:72
int getDomainEnd(int iDomain)
Definition: CSOM.h:116
void setNodePosition(int i, CVector< double > &rtPos)
Definition: CSOM.h:94
int getNumPolyLines()
Definition: CSOM.h:259
virtual void setParameter(float *pfParam)
Sets parameters.
Definition: CSOM.h:155
void addDomain(int iStart, int iEnd)
Definition: CSOM.h:114
void train(CDataset< Type > &rtTrainSet)
int getType()
Returns type of topology.
Definition: CSOM.h:142
int getNeighbour(int iNode, int iPos)
Definition: CSOM.h:136
virtual void train(CDataset< Type > &rtTrainSet, CSOM< Type > *pSOM)
Use topology specific training algorithm to build SOM.
Definition: CSOM.h:127
virtual void trainGrowing(CDataset< Type > &rtTrainSet, CSOM< Type > *pSOM, float fGrowParam)
Definition: CSOM.h:128
int getCenterNode(bool bVisibleNodes)
Definition: CSOM.h:138
int getDomainSize(int iDomain)
Definition: CSOM.h:117