ComputeCentroid Distance, , . , :
1. static double Distance(double [] tuple, double [] vector)
2. {
3. double sumSquaredDiffs = 0.0;
4. for (int j = 0; j < tuple.Length; ++j)
5. sumSquaredDiffs += Math.Pow((tuple[j] - vector[j]), 2);
6. return Math.Sqrt(sumSquaredDiffs);
7. }
, . . , , .
, k-, . , . 160.0, 67.0, , . , . . (m) (standard deviation, sd) , (v) nv = (vm)/sd.
, . Assign . 6.
. 6. Assign
1. static bool Assign(double [][] rawData,
2. int [] clustering, double [][] centroids)
3. {
4. int numClusters = centroids.Length;
5. bool changed = false;
6. double [] distances = new double [numClusters];
7. for (int i = 0; i < rawData.Length; ++i)
8. {
9. for (int k = 0; k < numClusters; ++k)
10. distances[k] = Distance(rawData[i], centroids[k]);
11. int newCluster = MinIndex(distances);
12. if (newCluster!= clustering[i])
13. {
14. changed = true;
15. clustering[i] = newCluster;
16. }
17. }
18. return changed;
19. }
Assign centroids . distances, . MinIndex distances, , , .
MinIndex:
1. static int MinIndex(double [] distances)
|
|
2. {
3. int indexOfMin = 0;
4. double smallDist = distances[0];
5. for (int k = 0; k < distances.Length; ++k)
6. {
7. if (distances[k] < smallDist)
8. {
9. smallDist = distances[k]; indexOfMin = k;
10. }
11. }
12. return indexOfMin;
13. }
Assign, , clustering, , , clustering . , : clustering .
k- , . . 6, Assign , . . - . , , centroidIndexes, centroids. , centroids , (61.0, 120.0) 2 . 2. centroidIndexes , [3]. Assign , , . , .