CEDRIC  Revision_backup-2009-02
PAMClustering.h
Go to the documentation of this file.
1 /******************************************************************************
2  *
3  * Copyright (C) 2008 Max Hermann
4  *
5  * This file is part of the "CEDRIC Event Display" application.
6  *
7  *****************************************************************************/
8 
9 #ifndef REDUKT_PAMCLUSTERING_H
10 #define REDUKT_PAMCLUSTERING_H
11 
12 #include <vector>
13 #include <boost/numeric/ublas/symmetric.hpp>
14 namespace ublas = boost::numeric::ublas;
15 
16 // Determine minimum cost swap by really calculating objective function.
17 // This is needed as long as there is this nasty bug in the more efficient cost-update code.
18 #define PAMCLUSTERING_BRUTE_FORCE
19 
29 {
30 public:
31  typedef ublas::symmetric_matrix<double,ublas::lower> matrix_type;
32  typedef std::vector<unsigned int> ivec;
33  typedef std::vector<double> dvec;
34 
40  PAMClustering( const matrix_type& d, unsigned int k );
42 
44  PAMClustering( PAMClustering& other );
45 
48  int cluster( unsigned int maxIterations=10000 );
49 
52  double calcSilhouette();
54  double silCluster( unsigned int c );
56  const dvec& sils() const { return m_sil; }
57 
59  const ivec& labels() const { return m_labels; };
61  const ivec& medoids() const { return m_medoids; }
62 
63  unsigned int numClusters() const { return K; }
64 
65 protected:
67  void label();
68 
71  bool swap();
72 
74  bool isSelected( unsigned int i );
75 
77  double avgDist( unsigned int i, unsigned int c );
78 
79 
80 #ifdef PAMCLUSTERING_BRUTE_FORCE
81  // returns objective value of clustering using m_medoids
82  // in contrast to label() here is not acted on member m_labels but given reference
83  double PAMClustering::label( ivec& labels );
84 #endif
85 
86 private:
87  // assignment not possible because of const Reference D member
88  PAMClustering& operator = ( PAMClustering& other );
89 
90  const matrix_type& D;
91  unsigned int N;
92  unsigned int K;
93 
94  ivec m_medoids;
95  ivec m_labels;
96  ivec m_second;
97  ivec* m_clusters;
98 
99  ivec m_selected;
100  double m_objective;
101 
102  dvec m_sil;
103  double m_silTotal;
104 };
105 
106 #endif
PAMClustering(const matrix_type &d, unsigned int k)
Definition: PAMClustering.cpp:19
std::vector< double > dvec
Definition: PAMClustering.h:33
void label()
Label each point with its nearest medoid.
Definition: PAMClustering.cpp:152
unsigned int numClusters() const
Definition: PAMClustering.h:63
~PAMClustering()
Definition: PAMClustering.cpp:44
const ivec & medoids() const
Definition: PAMClustering.h:61
const dvec & sils() const
Definition: PAMClustering.h:56
bool swap()
Definition: PAMClustering.cpp:258
ublas::symmetric_matrix< double, ublas::lower > matrix_type
Definition: PAMClustering.h:31
double avgDist(unsigned int i, unsigned int c)
Definition: PAMClustering.cpp:86
bool isSelected(unsigned int i)
Definition: PAMClustering.cpp:146
double calcSilhouette()
Definition: PAMClustering.cpp:110
std::vector< unsigned int > ivec
Definition: PAMClustering.h:32
const ivec & labels() const
Definition: PAMClustering.h:59
int cluster(unsigned int maxIterations=10000)
Definition: PAMClustering.cpp:70
double silCluster(unsigned int c)
Definition: PAMClustering.cpp:98
Definition: PAMClustering.h:28