我正在处理我需要使用群集的数据。
我知道Spark框架不会让我拥有一个集群;最小簇数为2。
我创建了一些虚拟随机数据来测试我的程序,我的程序显示错误的结果,因为我的KMeans函数正在生成一个集群!怎么会?我不明白。是因为我的数据是随机的吗?我没有在我的kmeans上指明任何东西。这是处理K-Means的代码的一部分:
kmeans = new BisectingKMeans();
model = kmeans.fit(dataset); //trains the k-means with the dataset to create a model
clusterCenters = model.clusterCenters();
dataset.show(false);
for(Vector v : clusterCenters){
System.out.println(v);
}
输出如下:
+----+----+------+
|File|Size|Volume|
+----+----+------+
|F1 |13 |1689 |
|F2 |18 |1906 |
|F3 |16 |1829 |
|F4 |14 |1726 |
|F5 |10 |1524 |
|F6 |16 |1844 |
|F7 |15 |1752 |
|F8 |12 |1610 |
|F9 |10 |1510 |
|F10 |11 |1554 |
|F11 |12 |1632 |
|F12 |13 |1663 |
|F13 |18 |1901 |
|F14 |13 |1686 |
|F15 |18 |1910 |
|F16 |19 |1986 |
|F17 |11 |1585 |
|F18 |10 |1500 |
|F19 |13 |1665 |
|F20 |13 |1664 |
+----+----+------+
only showing top 20 rows
[-1.7541523789077474E-16,2.0655699373151038E-15] //only one cluster center!!! why??
为什么会这样?我需要解决这个问题才能解决这个问题?只有一个集群毁了我的程序
答案 0 :(得分:0)
在随机数据上,二等分k-means的正确输出通常只是一个集群。
使用二等分k-means,您只能提供最大个数量的聚类。但如果结果没有改善,它可以提早停止。在你的情况下,将数据分成两个集群显然没有提高质量,所以不接受这种二分法。