weka SimpleKMeans实现允许用户使用选项 -s 指定“种子值”。我不明白这意味着什么。在这个链接中,weka 架构师 Mark Hall 说它应该生成随机数。
Weka 实现应该遵循KMenas++上的论文(如文档中所述),如果我理解了,集群质心点是使用上述论文中的第 2.2 页第 3 页的方程 1b 确定的,并且没有其他来源的随机性。
谁能指出我做错了什么?
weka SimpleKMeans实现允许用户使用选项 -s 指定“种子值”。我不明白这意味着什么。在这个链接中,weka 架构师 Mark Hall 说它应该生成随机数。
Weka 实现应该遵循KMenas++上的论文(如文档中所述),如果我理解了,集群质心点是使用上述论文中的第 2.2 页第 3 页的方程 1b 确定的,并且没有其他来源的随机性。
谁能指出我做错了什么?
使用 k-means 算法(注意:k-means 算法不止一种;它们是启发式的,因为据报道找到最佳解决方案是 NP 难的)使用不同的随机初始中心进行多次迭代是一种常见的最佳实践.
因此,随机性通常与选择初始中心有关。K-means++ 是选择初始种子的另一种方法,幸运的是仍然是随机的(有些不是随机的,所以你不能再尝试通过多次运行来改善你的结果),但会尝试选择更好的起始情况。
你为什么要寻找另一个随机来源而不是初始手段?
我不推荐 Weka 进行集群。分类是可以的,但它对聚类和其他无监督方法的支持非常有限。相反,看看 ELKI。例如,他们的k-means 包非常详尽。他们有大约 6 种不同的方法来选择初始均值。大多数是随机的。最简单和最常见的初始化可能只是从数据库中的 k 个随机对象开始。IIRC,MacQueen 使用了前 k 个对象,因此该变体不是随机的(除非您先对数据集进行洗牌,这对于相当多的算法来说实际上是一个好主意 - 永远不要使用排序数据!)因此,这些初始化程序中的大多数将带有参数-kmeans.seed
which - 猜猜 - 允许您控制随机生成器播种,以获得可重复的结果。