作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 Java 实现 KMeans,但遇到了一个导致所有结果都丢失的情况。当给定一些随机选择的初始化质心,数据进入其中一个质心实际上并未定义簇的状态时,就会发生这种情况。例如,如果 K=3,则可能有 2 个质心更接近所有数据点,在这种情况下,在迭代过程中,我将只有 2 个簇,而不是 3 个。
据我了解 KMeans,当我们重置质心时,我们需要总结每个簇的所有数据点并除以簇的大小(以获得平均值)。因此,这意味着我们将拥有一个大小为 0 的簇,并且新的质心将是
[0/0, 0/0, ... 0/0]
关于处理此案,我有两个问题:(1) 如果我们丢失了其中一个集群,我们如何才能从中恢复?(2) 有什么方法可以解释除以 0 的情况吗?
我的这个逻辑的代码如下:
// do the sums
for (int i = 0; i < numDocuments; i++) {
int value = label[i]; // get the document's label (i.e. 0, 1, 2)
for (int j = 0; j < numWords; j++) {
tempCentroids[value][j] += data[i][j];
}
tally[value]++;
}
// get the average
for (int i = 0; i < k; i++) {
for (int j = 0; j < numWords; j++) {
tempCentroids[i][j] /= (double) tally[i]; // could have division by zero
System.out.println("tally[i] for centroid " + k + " is " + tally[i]);
}
}
提前致谢,
最佳答案
“例如,如果 K=3,可能有 2 个质心更接近所有数据点,在这种情况下,在迭代过程中,我将只有 2 个簇,而不是 3 个”
我认为您始终可以将为第三个簇选择的质心保留在第三个簇中,而不是在其他簇中。这样,您就可以维持集群的数量,并且不会遇到您提到的奇怪情况。 (我假设您选择随机质心作为数据集中的实际 K 个数据点)
您可能还想查看 K-means++ 算法,除了簇中心步骤的初始化之外,它与 Kmeans 算法相同。这将导致(可能)更好的分类。
关于java - 当簇中有零个元素时如何处理 kmeans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52885746/
我是一名优秀的程序员,十分优秀!