我在使用Weka的XMeans群集器时遇到了一些麻烦。我和其他几个人交谈过,我们都同意下面的截图中有六个集群,如果你真的很难眯眼,至少要有两个集群。无论哪种方式,xMeans似乎都不同意。
XMeans似乎系统地低估了群集的数量,基于我设置的最小群集数量。最大聚类数保持在100,这是我得到的结果:
-L 1 // 1 cluster
-L 2 // 2 clusters
-L 3 // 3 clusters
-L 4 // 5 clusters
-L 5 // 6 clusters
-L 6 // 6 clusters
最令人震惊的是,-L 1
(和-H 100
)只找到了一个群集。只有将最小集群数量设为5才能实际看到六个集群。将改进结构参数提升到(达到100,000)似乎没有任何影响。 (我也玩过其他选项而没有看到任何差异。)以下是生成上述截图的选项,其中找到了一个中心:
private static final String[] XMEANS_OPTIONS = {
"-H", "100", // max number of clusters (default 4)
"-L", "1", // min number of clusters (default 2)
"-I", "100", // max overall iterations (default 1)
"-M", "1000000", // max improve-structure iterations (default 1000)
"-J", "1000000", // max improve-parameter iterations (default 1000)
};
显然我在这里遗漏了一些东西。如何使XMeans按预期运行?
答案 0 :(得分:4)
我认为这是我害怕的。一个心理问题(我想如果你搜索Gestalttheorie,你可能会在感知方面找到一些解释)。
人眼正在抓住星团的形状并找到六个圆圈。但是,k-means和x-means仅查看距离。因此,集群看起来很尴尬。在使用6-means进行多次重启之后,我几乎总能实现如下集群: 这可能是一个可能由xmeans解决的局部最小值
或3-means
这很有意思,因为有些观点明显违背了期望。
如果在R中使用K-Means,则可以分析聚类结果的内部。这些表明这些看起来很笨拙的群集通常表现得非常好。因此,对于预期的不同结果没有收敛。
我认为这可以通过使用不同的距离测量来解决。例如,平方欧几里德距离强制形状的圆形。 或者使用一些基于内核的聚类技术和RBF内核
===============================================
<强> EDIT1:强>
然而,weka结果的一个方面仍然相当尴尬,我使用RWeka进行了一些实验。基本上,我为2
和7
之间的每个初始群集大小运行了100次群集运行。我的期望是,对于2
和6
,群集对于我希望它们增长的其他群集大小相当稳定。
所以基本上2
和6
相当稳定,但群集大小总是最多花费1倍。
让我们来看看BIC
我们可以观察到,当增加簇大小时BIC没有增加,但是,强烈依赖于初始簇大小。
让我们进一步深入研究并查看初始簇大小3.运行具有不同初始大小的多次重启会生成(可重现)以下两种情况:
然而,BIC的结果似乎表明BIC计算中存在BUG。