00001 #ifndef SVCLUSTERING_H_ 00002 #define SVCLUSTERING_H_ 00003 00004 #include <cmath> 00005 #ifdef linux 00006 #include <values.h> 00007 #endif 00008 00009 #include <iostream> 00010 00011 #include <boost/config.hpp> 00012 #include <boost/graph/adjacency_matrix.hpp> 00013 #include <boost/graph/graph_utility.hpp> 00014 #include <boost/graph/adjacency_list.hpp> 00015 #include <boost/graph/connected_components.hpp> 00016 00017 #include <boost/multi_array.hpp> 00018 00019 #include <algorithm> 00020 #include <utility> 00021 00022 #include <bits/stl_pair.h> 00023 00024 #include "ClusteringEngine.h" 00025 #include "OneClassSVM.h" 00026 #include "svm.h" 00027 #include "EuclideanDistance.h" 00028 00029 namespace damina 00030 { 00031 00035 using namespace boost; 00036 00040 typedef adjacency_matrix<undirectedS> UndirectedGraph; 00041 00098 class SVClustering : public damina::ClusteringEngine 00099 { 00100 00101 private: 00102 00106 bool clusterizeBSV; 00107 00111 long int numberOfClusters; 00112 00118 std::vector<unsigned long int> pointPerCluster; 00119 00126 std::vector<int> originalClasses; 00127 00128 00133 double C; 00134 00135 00139 double sphereRadius; 00140 00145 double *quadratic; 00146 00147 00148 void calculateQuadraticPartOfDistanceFromCenter(); 00149 00150 00151 // the following inline methods are unused in this child 00152 // their implementation is constrained by some abstract anchestors 00153 virtual inline void clusterize(DataSet *) {}; 00154 virtual inline void setTestSet(DataSet *) {}; 00155 virtual inline DataSet *getTestSet() {return NULL;}; 00156 00157 00158 00159 protected: 00160 00168 double C_estimation; 00169 00170 00174 OneClassSVM *trainer; 00175 00180 std::vector<int> labels; 00181 00182 00183 00188 EuclideanDistance *eucDist; 00189 00190 00191 virtual double calculateDistanceFromCenter(struct svm_node *); 00192 00193 virtual void calculateSphereRadius(); 00194 00195 00196 virtual struct svm_node *pointOnThePath(struct svm_node *, struct svm_node *, double); 00197 virtual void separateClusters(); 00198 00199 00200 virtual double beta(int); 00201 virtual double beta(int, bool); 00202 00203 virtual double rho(); 00204 virtual double rho(bool); 00205 00206 00207 00208 00209 public: 00210 00211 virtual void learn(); 00212 virtual void learn(DataSet *); 00213 virtual void learn(struct svm_problem *); 00214 00215 virtual void clusterize(); 00216 00217 virtual void setTrainingSet(DataSet *); 00218 virtual DataSet *getTrainingSet(); 00219 00220 virtual void setProblem(struct svm_problem *); 00221 virtual struct svm_problem *getProblem(); 00222 00223 virtual struct svm_model *getModel(); 00224 00225 virtual struct svm_parameter *getParameters(); 00226 00227 virtual void setSoftConstraint(double); 00228 virtual double getSoftConstraint(); 00229 00230 virtual double getSoftConstraintEstimate(); 00231 00232 virtual double initialKernelWidth(); 00233 virtual void setKernelWidth(double); 00234 virtual double getKernelWidth(); 00235 00236 virtual void setKernelType(int); 00237 virtual int getKernelType(); 00238 00239 virtual double getSphereRadius(); 00240 00241 00242 virtual void setEuclideanDistance(EuclideanDistance *); 00243 00244 00245 virtual std::vector<int>& getClustersAssignment(); 00246 virtual unsigned long int getNumberOfClusters(); 00247 virtual unsigned long int getNumberOfNonSingletonClusters(); 00248 virtual unsigned long int getNumberOfValidClusters(unsigned long int); 00249 virtual std::vector<unsigned long int>& getPointPerCluster(); 00250 00251 virtual std::vector<int>& getOriginalClasses(int); 00252 00253 virtual void useSpecialClusteringPolicyForBSV(); 00254 virtual void useClassicClusteringPolicyForBSV(); 00255 virtual bool usingSpecialClusteringPolicyForBSV(); 00256 00257 SVClustering(DataSet *); 00258 SVClustering(struct svm_problem *); 00259 SVClustering(double, DataSet *); 00260 SVClustering(double, struct svm_problem *); 00261 SVClustering(double, double, DataSet *); 00262 SVClustering(double, double, struct svm_problem *); 00263 00264 virtual ~SVClustering(); 00265 }; 00266 00267 } 00268 00269 #endif /*SVCLUSTERING_H_*/
1.5.2