SMILE xmeans 给出了错误的聚类
SMILE xmeans gave wrong clustering
我正在用这个二维数组和 smile-core 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
刚刚尝试了另一个更长的数组,长度=233,
Array(Array(1.2,2.2,3.2)
....
Array(33.4,43.4,53.4)
...
Array(121.1,171.1,221.1))
它给出了两个质心。所以看起来 xmeans 对最小数据行数有要求。
我正在用这个二维数组和 smile-core 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
刚刚尝试了另一个更长的数组,长度=233,
Array(Array(1.2,2.2,3.2)
....
Array(33.4,43.4,53.4)
...
Array(121.1,171.1,221.1))
它给出了两个质心。所以看起来 xmeans 对最小数据行数有要求。