我正在尝试使用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
的某些值(其中包含对源数据的引用)。我对源数据进行了深度复制,但该错误已消失。我应该更仔细地检查代码。
谢谢。
答案 0 :(得分:1)
答案 1 :(得分:0)
分层聚类(和其他算法)产生包含离群的微小簇是相当普遍的。这就是例如DBSCAN具有噪声概念的原因。这样的数据点存在,并且不能很好地作为簇来处理。
因此,我怀疑是否有导致这种情况的“全局状态”。您可以简单地缩小范围,例如,仅尝试k = 12。如果您的假设是正确的,则使用单个k应该没问题。
如果您想更好地了解结果,请查看树状图。它比尝试不同的k更有参考价值。