0

我正在用这个二维数组和微笑核心 2.4.0 测试 xmeans 聚类。

import smile.clustering.xmeans

val arrData = Array(Array(0.0,0,0),
  Array(0.0,0,0),
  Array(0,0.0,0),
  Array(0,0,0.0),
  Array(0,0,0.0),
  Array(100,100.0,100),
  Array(100,100,100.0),
  Array(100.0,100,100),
  Array(100,100.0,100),
  Array(100,100,100.0),
  Array(1000,1000.0,1000),
  Array(1000,1000,1000.0),
  Array(1000,1000.0,1000),
  Array(1000.0,1000,1000),
  Array(1000,1000.0,1000),
  Array(1000,1000,1000.0))

val fitX = xmeans(arrData, 10)

println("k: " + fitX.k)
println("size: " + fitX.centroids.size)
println("centroids: " + fitX.centroids(0)(0)+"-"+fitX.centroids(0)(1)+"-"+fitX.centroids(0)(2))
println("distortion: " + fitX.distortion)
for (a<-0 to fitX.y.length)  println("y: "+a+" "+ fitX.y(a))

我不明白为什么它会给出以下输出,因为很明显元素是 0,100,1000。不应该只有一个集群,并且质心只是 3 个特征的平均值。我做错什么了吗?

k: 1
size: 1
centroids: 406.25-406.25-406.25
distortion: 1.0228125E7
y: 0 0
y: 1 0
y: 2 0
y: 3 0
....
y:15 0
4

1 回答 1

0

只是尝试了另一个更长的数组,长度= 233,

Array(Array(1.2,2.2,3.2)
....
Array(33.4,43.4,53.4)
...
Array(121.1,171.1,221.1))

它给出了两个质心。所以看起来 xmeans 对最小数据行数有要求。

于 2021-07-23T04:18:24.973 回答