File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -231,9 +231,41 @@ func (c *kmeansClusterer) initializeMeansWithData() {
231231 c .m = make ([][]float64 , c .number )
232232 c .c = make ([]HardCluster , c .number )
233233
234- for i := 0 ; i < c .number ; i ++ {
235- c .m [i ] = c .d [rand .Intn (len (c .d )- 1 )]
234+ rand .Seed (time .Now ().UTC ().Unix ())
235+
236+ var (
237+ k int
238+ s , t , l , f float64
239+ d []float64 = make ([]float64 , len (c .d ))
240+ )
241+
242+ c .m [0 ] = c .d [rand .Intn (len (c .d )- 1 )]
243+
244+ for i := 1 ; i < c .number ; i ++ {
245+ s = 0
246+ t = 0
247+ for j := 0 ; j < len (c .d ); j ++ {
248+
249+ l = c .distance (c .m [0 ], c .d [j ])
250+ for g := 1 ; g < i ; g ++ {
251+ if f = c .distance (c .m [g ], c .d [j ]); f < l {
252+ l = f
253+ }
254+ }
255+
256+ d [j ] = math .Pow (l , 2 )
257+ s += d [j ]
258+ }
259+
260+ t = rand .Float64 () * s
261+ k = 0
262+ for s = d [0 ]; s < t ; s += d [k ] {
263+ k ++
264+ }
265+
266+ c .m [i ] = c .d [k ]
236267 }
268+
237269}
238270
239271func (c * kmeansClusterer ) initializeMeans () {
Original file line number Diff line number Diff line change 11package clusters
22
3+ import (
4+ "gonum.org/v1/gonum/floats"
5+ "math"
6+ )
7+
38func squaredDistance (a , b []float64 ) float64 {
4- var s float64
5- for i := range a {
6- s += (a [i ] - b [i ]) * (a [i ] - b [i ])
7- }
8- return s
9+ return math .Pow (floats .Distance (a , b , 2 ), 2 )
910}
You can’t perform that action at this time.
0 commit comments