有人能解释一下 fcluster 的标准是什么意思吗?我试图阅读文档,但我无法理解。maxclust 标准说明了什么?
scipy 包的 flcuster 标准是什么?
欢迎来到社区!
在阅读此答案之前,您可能需要参考关于 Agglomerative Hierarchical Clustering 的教程。我的解释更实用。
假设以下数据:
from scipy.cluster.hierarchy import ward, fcluster
from scipy.spatial.distance import pdist
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.text import TextPath
X = [[0, 0], [0, 1], [1, 0],
[0, 4], [0, 3], [1, 4],
[4, 0], [3, 0], [4, 1],
[4, 4], [3, 4], [4, 3]]
X = np.array(X)
Z = ward(pdist(X))
plt.plot(X[:,0],X[:,1],'o')
我们在二维上有 12 个点。这是它们的分布方式:
现在让我们看看maxclust如何影响集群。请注意,我用数字命名集群并绘制每个数据所属的集群名称,而不是它的点。
for tt in [1, 3, 5, 9]:
plt.figure(figsize=(8,8))
plt.title('t={}'.format(str(tt)))
plt.xlim((-1,5))
plt.ylim((-1,5))
memberships = fcluster(Z, t=tt, criterion='maxclust')
for ii in range(len(memberships)):
path = TextPath((X[ii,0],X[ii,1]), str(memberships[ii]))
plt.plot(X[ii,0],X[ii,1],marker=path,c='b',markersize=50)
plt.show()
结果如下所示。我解释每一个:
t是限制集群数量的参数,即您可以在输出中拥有最大t个集群。如果t=1,任何其他标准都将被忽略,因为所有数据点都必须在同一个集群中。
到现在为止还挺好。假设t=3。现在乐趣开始了。maxclust找到将在同一簇中的每对点之间的最佳距离。如果t=3,没有那个距离,你会得到不平衡的集群。在下图中,我们有 4 个明显的集群,如果我想要 3 个集群,其中两个将合并并导致一个“错误”的集群(为了简单起见,我们说是错误的)。maxclust距离阈值阻止算法这样做,因为它拒绝远点在同一个簇中。因此,您会看到数据聚集到 2 个集群而不是 3 个集群,这非常有意义。请注意,是的,我们有更大的集群。但他们是“正确的”。就像我们缩小并从更高的角度查看集群一样。
让我们一起去t=5。现在允许算法找到 4 个簇。拓扑告诉您找到“正确的集群”,即每对点具有相对较小距离的集群(与与其他集群的距离相比)是可能的。这意味着maxclust可以找到最佳距离阈值,并且 t 让我们有 4 个集群。所以它有效!
最后但并非最不重要的是t=9。不,我们可以拥有超过实际所需数量(4 个)的集群。现在maxclust尝试找到其对之间的最小距离,以使相同簇中的点彼此之间的距离比与其他簇中的其他点更近。正如您在每个真实聚类中看到的那样,中心点与其他两个点之间的距离小于这两个对角点之间的距离(因为该距离相同,聚类算法随机选择成员)。所以你看到每个真实的集群被分成两个,由于maxclust和t组合的效果
希望它有所帮助。祝你好运!




