Local definitions

Vector clustering

Distance measure between two vectors

dist1[a_, b_] := Sqrt[(a - b) . (a - b)] ;

dist = Compile[{{a, _Real, 1}, {b, _Real, 1}}, Sqrt[(a - b) . (a - b)]] ;

Assign class-centroid labels to single datum

AssignClass[x_, μs_] := Module[{tmp}, tmp = dist[x, #] & /@ μs ; Position[tmp, Min[tmp]] // Flatten // First] ;

One step of the k-means algorithm

KMeansOne[data_, μs_] := Module[{k, cl}, k = Length[μs] ; cl ... mp; /@ data ; Mean /@ (Part[data, Flatten[Position[cl, #]]] & /@ Range[k]) ] ;

Complete k-means algorithm

KMeansAll1[data_, μs_, tst_:.01] := NestWhile[KMeansOne[data, #] &, μs, (conv[#1, #2] >tst) &, 2] ;

KMeansAll[data_, n_, tst_:.01] := Module[{tmp, μs}, tmp = {} ; Wh ...  ; μs = (data[[#]]) & /@ tmp ; KMeansAll1[data, μs, tst] ] ;


Created by Mathematica  (February 5, 2004)