Sci-kit学习集群模型是否具有隐藏的全局状态?

时间:2018-06-23 04:33:27

标签: scikit-learn cluster-analysis

我正在尝试使用scikit-learn的AgglomerativeClustering模型对某些数据进行聚类。

为了确定更好的参数,我在for循环中尝试了不同的参数。似乎只有第一个结果分布良好,而其他的聚类结果却过于分散,主要是一个大的聚类(〜2000)和其他具有1或2个元素的聚类。

我的代码如下所示:

for n in range(8, 15):
    model = AgglomerativeClustering(n)
    result = do_cluster(model, data_to_cluster)
    show_cluster_result(result)

在我的do_cluster函数中,我只是做model.fit_predict(data_to_cluster)

我假设在群集之类的东西之后必须 重置 model

谁能告诉我我在想什么。


在阅读了类似的答案后,我重新检查了我的代码。我的代码有一个愚蠢的错误,该错误在显示结果期间更改了data_to_cluster的某些值(其中包含对源数据的引用)。我对源数据进行了深度复制,但该错误已消失。我应该更仔细地检查代码。

谢谢。

2 个答案:

答案 0 :(得分:1)

您将在每次迭代时实例化一个新模型,因此在这些实例之间不会传递全局状态。

如果您对聚类不满意,请尝试调整此聚类算法的某些输入参数(请参见API docs)或尝试其他聚类算法(link)。

答案 1 :(得分:0)

分层聚类(和其他算法)产生包含离群的微小簇是相当普遍的。这就是例如DBSCAN具有噪声概念的原因。这样的数据点存在,并且不能很好地作为簇来处理。

因此,我怀疑是否有导致这种情况的“全局状态”。您可以简单地缩小范围,例如,仅尝试k = 12。如果您的假设是正确的,则使用单个k应该没问题。

如果您想更好地了解结果,请查看树状图。它比尝试不同的k更有参考价值。