我不明白在 fcluster 中工作的阈值的详细行为(方法 ='complete')
I don't understand the detailed behavior of the threshold working in fcluster (method ='complete')
Xi=[[0,5,10,8,3],[5,0,1,3,2],[10,1,0,5,1],[8,3,5 ,0,6],[3,2,1,6,0]]
Xi = 距离矩阵
shc.fcluster(shc.linkage(Xi,'complete'),9,criterion='distance')
在此代码中阈值 = 9
聚类后结果为array([3, 1, 1, 2, 1], dtype=int32)
我不明白为什么数组 [2 ,1 ,1, 1, 1]
此图像表示聚类后
https://drive.google.com/file/d/17806FuPuNpJiqhT12jiuFOMGNUvB1vjT/view?usp=sharing
import numpy as np
import pandas as pd
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
from scipy.spatial.distance import pdist
import matplotlib.pyplot as plt
import seaborn as sns
你有这个距离矩阵
Xi = np.array([[0,5,10,8,3],[5,0,1,3,2],[10,1,0,5,1],[8,3,5,0,6],[3,2,1,6,0]])
我们可以想象为
df = pd.DataFrame(Xi)
# fill NaNs and mask 0s
df.fillna(0, inplace=True)
mask = np.zeros_like(df)
mask[np.triu_indices_from(mask)] = True
sns.heatmap(df, annot=True, fmt='.0f', cmap="YlGnBu", mask=mask);
现在,我们得到 pdist
p = pdist(Xi)
和链接
Z = linkage(p, method='complete')
您将 9
设置为阈值,因此
dendrogram(Z)
plt.axhline(9, color='k', ls='--');
你有 3 个集群
fcluster(Z, 9, criterion='distance')
array([3, 1, 1, 2, 1], dtype=int32)
# 0 1 2 3 4 <- elements
是正确的,你可以用树状图验证
- 簇
1
中的元素 1
、2
和 4
- 簇
2
中的元素 3
- 簇
3
中的元素 0
如果你只想要两个集群,你必须选择12
,例如thershold
dendrogram(Z)
plt.axhline(12, color='k', ls='--');
这样你就有了预期的结果
fcluster(Z, 12, criterion='distance')
array([2, 1, 1, 1, 1], dtype=int32)
# 0 1 2 3 4 <- elements
Xi=[[0,5,10,8,3],[5,0,1,3,2],[10,1,0,5,1],[8,3,5 ,0,6],[3,2,1,6,0]]
Xi = 距离矩阵
shc.fcluster(shc.linkage(Xi,'complete'),9,criterion='distance')
在此代码中阈值 = 9
聚类后结果为array([3, 1, 1, 2, 1], dtype=int32)
我不明白为什么数组 [2 ,1 ,1, 1, 1]
此图像表示聚类后 https://drive.google.com/file/d/17806FuPuNpJiqhT12jiuFOMGNUvB1vjT/view?usp=sharing
import numpy as np
import pandas as pd
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
from scipy.spatial.distance import pdist
import matplotlib.pyplot as plt
import seaborn as sns
你有这个距离矩阵
Xi = np.array([[0,5,10,8,3],[5,0,1,3,2],[10,1,0,5,1],[8,3,5,0,6],[3,2,1,6,0]])
我们可以想象为
df = pd.DataFrame(Xi)
# fill NaNs and mask 0s
df.fillna(0, inplace=True)
mask = np.zeros_like(df)
mask[np.triu_indices_from(mask)] = True
sns.heatmap(df, annot=True, fmt='.0f', cmap="YlGnBu", mask=mask);
现在,我们得到 pdist
p = pdist(Xi)
和链接
Z = linkage(p, method='complete')
您将 9
设置为阈值,因此
dendrogram(Z)
plt.axhline(9, color='k', ls='--');
你有 3 个集群
fcluster(Z, 9, criterion='distance')
array([3, 1, 1, 2, 1], dtype=int32)
# 0 1 2 3 4 <- elements
是正确的,你可以用树状图验证
- 簇
1
中的元素 - 簇
2
中的元素 - 簇
3
中的元素
1
、2
和 4
3
0
如果你只想要两个集群,你必须选择12
,例如thershold
dendrogram(Z)
plt.axhline(12, color='k', ls='--');
这样你就有了预期的结果
fcluster(Z, 12, criterion='distance')
array([2, 1, 1, 1, 1], dtype=int32)
# 0 1 2 3 4 <- elements