【问题标题】:how to compute accuracy of AgglomerativeClustering如何计算 AgglomerativeClustering 的准确性
【发布时间】:2019-02-14 05:58:39
【问题描述】:

嗨,我在 AgglomerativeClustering 的 python 中使用了示例,我尝试估计性能,但它切换了原始标签 我尝试比较预测标签 y_hc 和 make blobs 返回的原始标签 y

import scipy.cluster.hierarchy as sch
from sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import make_blobs
import numpy as np
import matplotlib.pyplot as plt
data,y = make_blobs(n_samples=300, n_features=2, centers=4, cluster_std=2, random_state=50)
plt.figure(2)
# create dendrogram
dendrogram = sch.dendrogram(sch.linkage(data, method='ward'))
plt.title('dendrogram')

# create clusters linkage="average", affinity=metric , linkage = 'ward' affinity = 'euclidean'
hc = AgglomerativeClustering(n_clusters=4, linkage="average", affinity='euclidean')

# save clusters for chart
y_hc = hc.fit_predict(data,y)

plt.figure(3)

# create scatter plot
plt.scatter(data[y==0,0], data[y==0,1], c='red', s=50)
plt.scatter(data[y==1, 0], data[y==1, 1], c='black', s=50)
plt.scatter(data[y==2, 0], data[y==2, 1], c='blue', s=50)
plt.scatter(data[y==3, 0], data[y==3, 1], c='cyan', s=50)

plt.xlim(-15,15)
plt.ylim(-15,15)


plt.scatter(data[y_hc ==0,0], data[y_hc == 0,1], s=10, c='red')
plt.scatter(data[y_hc==1,0], data[y_hc == 1,1], s=10, c='black')
plt.scatter(data[y_hc ==2,0], data[y_hc == 2,1], s=10, c='blue')
plt.scatter(data[y_hc ==3,0], data[y_hc == 3,1], s=10, c='cyan')
for ii in range(4):
        print(ii)
        i0=y_hc==ii
        counts = np.bincount(y[i0])
        valCountAtorgLbl = (np.argmax(counts))
        accuracy0Tp=100*np.max(counts)/y[y==valCountAtorgLbl].shape[0]
        accuracy0Fp = 100 * np.min(counts) / y[y ==valCountAtorgLbl].shape[0]

print([accuracy0Tp,accuracy0Fp])
plt.show()

【问题讨论】:

    标签: cluster-analysis hierarchical-clustering hierarchical


    【解决方案1】:

    集群可以复制原始标签,只能复制原始分区

    您似乎假设集群 1 对应于标签 1(在 faftz 中,可以将其标记为“iris setosa”,显然无监督算法无法得出此集群名称......)。它通常不会 - 那里可能没有相同数量的集群和类,并且可能存在未标记的噪声 piintsl 您可以使用匈牙利算法来计算最佳映射(或只是贪婪匹配)以产生更多直观的颜色映射。

    【讨论】:

    • 当我将 1 映射到它最重要的位置时,您如何看待仅控制映射标签等
    • 最好的结果可能有不同数量的簇。你为什么不直接使用文献中建立的方法? ARI 和 NMI。或者提到的找到 best 映射的匈牙利算法。 (选择最大值仅适用于 balanced 类。
    猜你喜欢
    • 2021-05-10
    • 2020-12-31
    • 2023-03-05
    • 1970-01-01
    • 2018-07-03
    • 2013-11-20
    • 2012-07-10
    相关资源
    最近更新 更多