为什么 Weka XMeans 系统地低估了集群的数量?
Why does Weka XMeans systematically underestimate the number of clusters?
我在使用 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,我才能真正看到 6 个簇。将 improve-structure 参数调高(到 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 的行为符合预期?
我想这就是我害怕的。一个心理问题(我想如果你搜索Gestalttheorie你可能会找到一些关于感知方面的解释)。
人眼在把握星团的形式时发现了六个圆圈。但是,k-means 和 x-means 只关注 距离 。因此,集群看起来相当尴尬。同样,在使用 6-means 多次重启后,我几乎总是获得如下集群:
这可能是局部最小值,可以通过 xmeans
解决
或 3 均值
这很有趣,因为有些点明显违反了预期。
如果你在R中使用K-Means你可以分析聚类结果的内部。这些表明这些看起来笨拙的集群通常表现得很好。因此,不会收敛到预期的不同结果。
我认为这可以通过使用不同的距离度量来解决。例如,平方欧几里得距离强制圆形形状。
或者使用一些基于内核的聚类技术和 RBF 内核
============================================= ==
编辑 1:
不过weka的结果一方面还是比较尴尬,我用RWeka运行做了几个实验。基本上我为 2
和 7
之间的每个初始簇大小做了 运行 100 个簇-运行s。我的预期是,对于 2
和 6
,对于其他我希望它们增长的集群大小,集群相当稳定。
然而,结果却大相径庭
所以基本上 2
和 6
相当稳定,但是,簇大小总是最多扩展 1.
让我们看看 BIC
我们可以观察到,随着簇大小的增加,BIC 并没有增加,而是强烈依赖于初始簇大小。
让我们再深入一点,看看初始集群大小为 3。运行 具有不同初始大小的多次重启会生成(可重现)以下两种情况:
不过BIC上的结果好像是BIC计算有BUG
我在使用 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,我才能真正看到 6 个簇。将 improve-structure 参数调高(到 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 的行为符合预期?
我想这就是我害怕的。一个心理问题(我想如果你搜索Gestalttheorie你可能会找到一些关于感知方面的解释)。
人眼在把握星团的形式时发现了六个圆圈。但是,k-means 和 x-means 只关注 距离 。因此,集群看起来相当尴尬。同样,在使用 6-means 多次重启后,我几乎总是获得如下集群:
或 3 均值
这很有趣,因为有些点明显违反了预期。
如果你在R中使用K-Means你可以分析聚类结果的内部。这些表明这些看起来笨拙的集群通常表现得很好。因此,不会收敛到预期的不同结果。
我认为这可以通过使用不同的距离度量来解决。例如,平方欧几里得距离强制圆形形状。 或者使用一些基于内核的聚类技术和 RBF 内核
============================================= ==
编辑 1:
不过weka的结果一方面还是比较尴尬,我用RWeka运行做了几个实验。基本上我为 2
和 7
之间的每个初始簇大小做了 运行 100 个簇-运行s。我的预期是,对于 2
和 6
,对于其他我希望它们增长的集群大小,集群相当稳定。
然而,结果却大相径庭
所以基本上 2
和 6
相当稳定,但是,簇大小总是最多扩展 1.
让我们看看 BIC
我们可以观察到,随着簇大小的增加,BIC 并没有增加,而是强烈依赖于初始簇大小。
让我们再深入一点,看看初始集群大小为 3。运行 具有不同初始大小的多次重启会生成(可重现)以下两种情况:
不过BIC上的结果好像是BIC计算有BUG