Cluster (. 7) , , .
. 7. Cluster
1. static int [] Cluster(double [][] rawData, int numClusters,
2. int numAttributes, int maxCount)
3. {
4. bool changed = true;
5. int ct = 0;
6. int numTuples = rawData.Length;
7. int [] clustering = InitClustering(numTuples, numClusters, 0);
8. double [][] means = Allocate(numClusters, numAttributes);
9. double [][] centroids = Allocate(numClusters, numAttributes);
10. UpdateMeans(rawData, clustering, means);
11. UpdateCentroids(rawData, clustering, means, centroids);
12. while (changed == true && ct < maxCount)
13. {
14. ++ct;
15. changed = Assign(rawData, clustering, centroids);
16. UpdateMeans(rawData, clustering, means);
17. UpdateCentroids(rawData, clustering, means, centroids);
18. }
19. return clustering;
20. }
while , , . , . means , , , Cluster, UpdateMeans UpdateCentroids.
InitClustering clustering:
1. static int [] InitClustering(int numTuples,
2. int numClusters, int randomSeed)
3. {
4. Random random = new Random(randomSeed);
5. int [] clustering = new int [numTuples];
6. for (int i = 0; i < numClusters; ++i)
7. clustering[i] = i;
8. for (int i = numClusters; i < clustering.Length; ++i)
9. clustering[i] = random.Next(0, numClusters);
10. return clustering;
11. }
InitClustering 0 numClusters1 0 numClusters1 , . .
, k-, , , , . , k-, , .