Коэффициент Silhoutte для k означает кластеризацию с использованием Голанга
Я пытаюсь вычислить коэффициент silhoutte для кластера, и мой код показывает ошибку...
package gomeans
import("fmt"
"math"
)
type KScore struct {
K int
Score float64
}
func Score(dataset []Point, k int) (float64, error) {
cc := Run(dataset, 3)
//fmt.Printf(cc)
//if err != nil {
// return -1.0, err
//}
var si float64
var sc int64
for ci, c := range cc {
for _, p := range Cluster {
ai := AverageDistance(p, Cluster)
//fmt.Println(ai)
_, bi := Neighbour(p, ci)
si += (bi - ai) / math.Max(ai, bi)
sc++
}
}
fmt.Println(si)
return si / float64(sc), nil
}
func AverageDistance(o Point, observations []Point) float64 {
var d float64
var l int
for _, oo := range observations {
dist := o.Distance(oo)
if dist == 0 {
continue
}
l++
d += dist
}
if l == 0 {
return 0
}
return d / float64(l)
}
func (cl Cluster) Neighbour(point Point, fromCluster int) (int, float64) {
var d float64
nc := -1
for i, cluster := range cl {
if i == fromCluster {
continue
}
cd := AverageDistance(point, cluster)
if nc < 0 || cd < d {
nc = i
d = cd
}
}
return nc, d
}
type Point struct {
X float64
//Y float64
}
type Cluster struct {
Center Point
Points []Point
}
кластер и точка две структуры, как определено выше.
и это показывает ошибку. ошибки: 24:15: тип Cluster не является выражением 29:13: undefined: сосед 66:20: не может варьироваться по cl (тип Cluster), кто-нибудь может помочь?