具有最小群集大小约束的群集(k均值或其他方式)


14

我需要将单位聚类为聚类,以最小化组内平方和(WSS),但我需要确保每个聚类至少包含单位。是否知道R的任何聚类功能是否允许在最小聚类大小约束下聚集成聚类?kmeans()似乎没有提供大小限制选项。ķkmk

Answers:


5

使用EM群集

在EM聚类中,该算法迭代地优化初始聚类模型以适合数据并确定数据点在聚类中存在的概率。当概率模型拟合数据时,该算法将结束该过程。确定拟合的函数是给定模型的数据的对数似然性。

如果在此过程中生成了空集群,或者一个或多个集群的成员资格降到给定阈值以下,则将在新点重新播种人口少的集群,并重新运行EM算法。


谢谢,玛丽安娜。我希望有一个不那么依赖(通常是不合理的)参数模型的解决方案,但是一定会研究它。
赛勒斯S 2010年

4

本文解决了这个问题:

Bradley,PS,KP Bennett和Ayhan Demiriz。“约束k均值聚类。” Microsoft Research,Redmond(2000):1-8。

我在python中实现了该算法。


这太完美了,谢谢!我使用rPythonR中的包为我从R脚本访问的该实现创建接口。
Michael Ohlrogge'2

@MichaelOhlrogge在编写调用R形式的python包的接口上的某个地方(github?)上有示例吗?谢谢!
Matifou

抱歉,我环顾了旧代码,但找不到了。
Michael Ohlrogge

3

我认为这只是将k均值作为if循环的一部分进行测试的问题,它测试了簇的大小,即簇k中的Count n-还请记住,对于相同数据的每次运行,k均值将给出不同的结果,因此您可能应该将其作为循环的一部分来运行,以提取“最佳”结果


1
谢谢,亚历克斯。我看到了一个问题:如果在循环中生成的解决方案从不满足约束条件,该怎么办?如果将k均值设置为在没有群集大小限制的情况下运行,则可能会发生这种情况。我希望避免这种情况的解决方案。(应用程序的性质使我确实需要确保群集的大小最小。)
Cyrus S 2010年

1

您的数据集有多大?也许您可以尝试运行分层聚类,然后根据树状图确定保留哪些聚类。

如果您的数据集很大,则还可以结合使用两种聚类方法:初始的非层次聚类,然后使用非层次分析中的组进行层次聚类。您可以在Martínez-Pastor等人(2005)中找到这种方法的示例。


谢谢,曼努埃尔。实际上,这听起来很有趣。我需要考虑分层划分是否会施加某些约束,这些约束会阻止算法直接在大小约束下实现最佳集群划分。但从直觉上讲,我可以看到这可能有效。
Cyrus S

0

这可以通过将集群分配步骤(EM中的E)公式化为最小成本流(MCF)线性网络优化问题来实现。

我编写了一个python程序包,该程序包使用Google的Operations Research工具的SimpleMinCostFlow(这是一种快速的C ++实现)。它具有标准的scikit-lean API。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.