00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00097 #ifndef __vtkKMeansStatistics_h
00098 #define __vtkKMeansStatistics_h
00099
00100 #include "vtkStatisticsAlgorithm.h"
00101
00102 class vtkIdTypeArray;
00103 class vtkIntArray;
00104 class vtkDoubleArray;
00105 class vtkKMeansDistanceFunctor;
00106
00107 class VTK_INFOVIS_EXPORT vtkKMeansStatistics : public vtkStatisticsAlgorithm
00108 {
00109 public:
00110 vtkTypeRevisionMacro(vtkKMeansStatistics, vtkStatisticsAlgorithm);
00111 virtual void PrintSelf( ostream& os, vtkIndent indent );
00112 static vtkKMeansStatistics* New();
00113
00115
00116 virtual void SetDistanceFunctor( vtkKMeansDistanceFunctor* );
00117 vtkGetObjectMacro(DistanceFunctor,vtkKMeansDistanceFunctor);
00119
00121
00123 vtkSetMacro(DefaultNumberOfClusters, int);
00124 vtkGetMacro(DefaultNumberOfClusters, int);
00126
00128
00129 vtkSetStringMacro(KValuesArrayName);
00130 vtkGetStringMacro(KValuesArrayName);
00132
00134
00136 vtkSetMacro( MaxNumIterations, int );
00137 vtkGetMacro( MaxNumIterations, int );
00139
00141
00143 vtkSetMacro( Tolerance, double );
00144 vtkGetMacro( Tolerance, double );
00146
00148
00150 virtual void Aggregate( vtkDataObjectCollection*,
00151 vtkDataObject* ) { return; };
00153
00154 protected:
00155 vtkKMeansStatistics();
00156 ~vtkKMeansStatistics();
00157
00159
00162 virtual int FillOutputPortInformation( int port, vtkInformation* info );
00163 virtual int FillInputPortInformation( int port, vtkInformation* info );
00165
00167
00168 virtual void Learn( vtkTable* inData,
00169 vtkTable* inParameters,
00170 vtkDataObject* outMeta );
00172
00174 virtual void Derive( vtkDataObject* );
00175
00177
00178 virtual void Assess( vtkTable*,
00179 vtkDataObject*,
00180 vtkTable* );
00182
00184
00185 virtual void Test( vtkTable*,
00186 vtkDataObject*,
00187 vtkDataObject* ) { return; };
00189
00190
00192
00193 virtual void SelectAssessFunctor( vtkTable* inData,
00194 vtkDataObject* inMeta,
00195 vtkStringArray* rowNames,
00196 AssessFunctor*& dfunc );
00197
00198
00199
00200
00201
00202 virtual void UpdateClusterCenters( vtkTable* newClusterElements,
00203 vtkTable* curClusterElements,
00204 vtkIdTypeArray* numMembershipChanges,
00205 vtkIdTypeArray* numElementsInCluster,
00206 vtkDoubleArray* error,
00207 vtkIdTypeArray* startRunID,
00208 vtkIdTypeArray* endRunID,
00209 vtkIntArray *computeRun );
00211
00215 virtual vtkIdType GetTotalNumberOfObservations( vtkIdType numObservations );
00216
00218
00222 int InitializeDataAndClusterCenters(vtkTable* inParameters,
00223 vtkTable* inData,
00224 vtkTable* dataElements,
00225 vtkIdTypeArray* numberOfClusters,
00226 vtkTable* curClusterElements,
00227 vtkTable* newClusterElements,
00228 vtkIdTypeArray* startRunID,
00229 vtkIdTypeArray* endRunID);
00231
00233
00236 virtual void CreateInitialClusterCenters(vtkIdType numToAllocate,
00237 vtkIdTypeArray* numberOfClusters,
00238 vtkTable* inData,
00239 vtkTable* curClusterElements,
00240 vtkTable* newClusterElements);
00242
00243
00245
00247 int DefaultNumberOfClusters;
00248
00249
00250
00251 char* KValuesArrayName;
00252
00253
00254 int MaxNumIterations;
00255
00256
00257 double Tolerance;
00258
00259
00260 vtkKMeansDistanceFunctor* DistanceFunctor;
00262
00263 private:
00264 vtkKMeansStatistics( const vtkKMeansStatistics& );
00265 void operator=( const vtkKMeansStatistics& );
00266 };
00267
00268 #endif