我看到,对于k-means,我们有Lloyd的算法,Elkan的算法,我们也有k-means的分层版本。
对于所有这些算法,我看到Elkan的算法可以提高速度。但我想知道的是所有这些k-means算法的质量。每次,我们运行这些算法,由于它们的启发式和概率性,结果会有所不同。现在,我的问题是,当涉及像k-means这样的聚类算法时,如果我们想要在所有这些k-means算法之间获得更好的质量结果(如较小的失真等),哪种算法能够给出你质量更好?有可能测量这样的东西吗?
答案 0 :(得分:4)
更好的解决方案通常是具有更好(更低)J(x,c)
值的解决方案,其中:
J(x,c) = 1/|x| * Sum(distance(x(i),c(centroid(i)))) for each i in [1,|x|]
Wherre:
x
是样本列表|x|
的大小为x
(元素数量)[1,|x|]
从1到|x|
(包括)的所有数字c
是群集的质心(或平均值)列表(即,k
群集| c | = k)distance(a,b)
(有时表示为|| a-b ||是“点”a到“点”b之间的距离(在欧几里德2D空间中它是sqrt((a.x-b.x)^2 + (a.y-b.y)^2)
)x(i)
请注意,此方法不需要切换到监督技术,可以完全自动化!
答案 1 :(得分:1)
据我了解,您需要一些带标签的数据来交叉验证您的聚类算法。
答案 2 :(得分:1)
双月数据集的病理情况怎么样?无监督的k-means将严重失败。我所知道的高质量方法采用了一种使用互信息和组合优化的概率方法。基本上,您将聚类问题视为在两个聚类的情况下找到完整点集的最佳[cluster]子集的问题。
您可以找到relevant paper here(第42页)和要使用的相应Matlab code here(结帐双月案例)。如果您对C ++高性能实现感兴趣,速度大于30倍,那么您可以找到它here HPSFO。
答案 3 :(得分:0)
要比较质量,您应该有一个标记的数据集,并按照NMI
等标准衡量结果