代码之家  ›  专栏  ›  技术社区  ›  user3452134

如何计算凝聚聚类的精度

  •  0
  • user3452134  · 技术社区  · 6 年前

    嗨,我在python中使用了aggregativeclustering示例,我试图估计性能,但它切换了原始标签 我试图通过makeblobs比较预测的标签y\uhc和原始标签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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Has QUIT--Anony-Mousse    6 年前

    集群可以也不能复制原始数据 分区

    您似乎假设集群1对应于标签1(在faftz中,一个可以被标记为‘iris setosa’,显然没有一个无监督的算法会产生这个集群名称……)。它通常不会-那里可能也没有相同数量的簇和类,并且可能存在未标记的噪声点。您可以使用匈牙利算法来计算最佳映射(或者只是贪婪匹配),以生成更直观的颜色映射。