【发布时间】:2014-07-19 23:33:45
【问题描述】:
我正在使用 scikit 对一些数据进行聚类。
我有最简单的任务:我知道集群的数量。而且,我确实知道每个集群的大小。是否可以指定此信息并将其传递给 K-means 函数?
【问题讨论】:
-
您能评论一下这个问题的根源吗?
标签: python cluster-analysis scikit-learn k-means
我正在使用 scikit 对一些数据进行聚类。
我有最简单的任务:我知道集群的数量。而且,我确实知道每个集群的大小。是否可以指定此信息并将其传递给 K-means 函数?
【问题讨论】:
标签: python cluster-analysis scikit-learn k-means
没有。您需要某种类型的约束聚类算法来执行此操作,并且没有在 scikit-learn 中实现。 (这不是“最简单的任务”,除了一些启发式地将样本从一个集群移动到另一个集群之外,我什至不知道有什么原则算法可以做到这一点。)
【讨论】:
我只能想到蛮力算法。如果集群分离得很好,那么您可以尝试使用不同的随机初始化运行集群多次,只提供集群数量作为输入。在每个集群的每次迭代计数大小之后,对其进行排序并与已知集群大小的排序列表进行比较。如果它们不匹配冲洗并重复。
【讨论】:
K-means 是方差最小化,您的目标似乎是生成预定义大小的分区,而不是最小方差。
但是,here is a tutorial 展示了如何修改 k-means 以生成相同大小的集群。您可以轻松扩展它以生成所需大小的集群,而不是平均大小。以这种方式修改 k-means 相当容易。但在大多数数据集上,结果将比 k-means 结果更无意义。 K-means 通常与随机凸分区一样好。
【讨论】: