我看到对于k-means,我们有Lloyd算法,Elkan算法,我们还有k-means的分层版本。
对于所有这些算法,我看到Elkan的算法可以在速度方面提供提升。但我想知道的是,所有这些k-means算法的质量。由于它们的启发式和概率性质,每次我们运行这些算法时,结果都会不同。现在,我的问题是,当涉及到k-means这样的聚类算法时,如果我们想要有更好的质量结果(比如在较小的失真等方面)。在所有这些k-means算法中,哪种算法能为您提供更好的质量?有没有可能测量这样的东西?
发布于 2012-12-13 16:40:32
更好的解决方案通常是具有更好(较低) J(x,c)
值的解决方案,其中:
J(x,c) = 1/|x| * Sum(distance(x(i),c(centroid(i)))) for each i in [1,|x|]
,其中:
x
是samples|x|
的列表是elements)[1,|x|]
的大小( (inclusive)c
是从1到x
的所有数字|x|
是集群的质心(或均值)列表(即,对于点聚类|c| = k)distance(a,b)
(有时表示为||a-b||是“点”a到“点”b之间的距离(在欧几里得2D空间中,它是sqrt((a.x-b.x)^2 + (a.y-b.y)^2)
)x(i)
的质心/平均值
请注意,这种方法不需要切换到监督技术,并且可以完全自动化!
发布于 2012-12-13 15:39:23
据我所知,你需要一些带标签的数据来交叉验证你的聚类算法。
发布于 2012-12-13 17:55:55
两个月的数据集的病理情况如何?无监督的k-means算法将会严重失败。据我所知,一种高质量的方法使用了更多的概率方法,使用了互信息和组合优化。基本上,您可以将聚类问题转换为在两个集群的情况下找到全点集的最佳集群子集的问题。
您可以找到relevant paper here (第42页)和相应的Matlab code here来玩(查看两个月的情况)。如果你对它的C++高性能实现感兴趣,它的速度超过30倍,那么你可以找到here HPSFO。
https://stackoverflow.com/questions/13854492
复制相似问题