zoukankan      html  css  js  c++  java
  • 聚类算法性能评估

    如何评价聚类算法的性能呢?特别是应用在没有类别标注的数据集上。针对不同的数据特点,有以下两种方式:

    1、如果被用来评估的数据本身带有正确的类别信息,可以使用ARI(Adjusted Rand Index)

    ARI指标与分类问题中计算准确性的方法类似,同时也兼顾到了类簇无法和分类一一对应的问题

    用法:

    1 from sklearn import metrics  #导入metrics包
    2 print(metrics.adjusted_rand_score(y_test,y_pred))

    2、如果被用于评估的数据没有所属类别,那么我们习惯使用轮廓系数(Silhouette Coefficient)来度量聚类结果的质量。

    • 轮廓系数同时兼顾了聚类的凝聚度Cohesion和分离度Separation,用于评估聚类的效果并且取值范围为[-1,1]。
    • 轮廓系数越大,表示聚类的效果越好
    • 具体计算步骤如下:
    • (1)对于已聚类数据中第i个样本x,计算样本xi与其同一个簇内的所有其他样本距离的平均值ai,用于量化簇内的凝聚度
    • (2)选取xi外的一个簇b,计算xi与簇b中所有样本的平均距离,遍历所有其他簇,找到最近的这个平均距离bi,用于量化簇之间的分离度
    • (3)对于样本xi,轮廓系数为sci=(bi-ai)/max(bi,ai)
    • (4)最后对所有样本x求取平均值即为当前聚类结果的整体轮廓系数

    用法:

    import numpy as np
    from sklearn.cluster import KMeans
    from sklearn.metrics import silhouette_score
    import matplotlib.pyplot as plt
    
    #分割出3*2=6个子图 并在子图1上作图
    plt.subplot(3,2,1)
    
    #初始化原始数据点
    x1 = np.array([1,2,3,1,5,6,5,5,6,7,8,9,7,9])
    x2 = np.array([1,3,2,2,8,6,7,6,7,1,2,1,1,3])
    X=np.array(zip(x1,x2)).reshape(len(x1),2)
    
    #在1号子图上作出原始数据点阵的分布
    plt.xlim([0,10])
    plt.ylim([0,10])
    plt.title('Instances')
    plt.scatter(x1,x2)
    
    colors = ['b','g','r','c','m','y','k','b']
    markers = ['o','s','D','v','^','p','*','+']
    
    clusters = [2,3,4,5,8]
    subplot_counter = 1
    sc_scores = []
    for t in clusters:
        subplot_counter += 1
        plt.subplot(3,2,,subplot_counter)
        kmeans_model = KMeans(n_clusters=t).fit(X)
    
        for i,l in enumerate(kmeans_model.labels_):
            plt.plot(x1[i],x2[i],color=colors[l],marker=markers[l],ls='None')
        plt.xlim([0,10])
        plt.ylim([0,10])
    
        sc_score = silhouette_score(X,kmeans_model.labels_,metric='euclidean')
        sc_scores.append(sc_score)
    
    #绘制轮廓系数与不同类簇数量的直观显示图
        plt.title('K=%s,silhouette coefficient=%0.03f'%(t,sc_score))
    
    #绘制轮廓系数与不同类簇数量关系曲线
    plt.figure()
    plt.plot(clusters,sc_scores,'*-')
    plt.xlabel('Number of Cluster')
    plt.ylabel('Sihouette Coefficient Score')
    
    plt.show()

     

  • 相关阅读:
    php7 & lua 压测对比
    .NET CORE——Console中使用依赖注入
    EntityFramework Core 自动绑定模型映射
    月末总结与推书
    Dapper连接与事务的简单封装
    EntityFramework Core 学习扫盲
    从输入url到页面返回到底发生了什么
    [译]C#和.NET中的字符串
    利用C#迭代器的一个杨辉三角示例
    用 dotTrace 进行性能分析时,各种不同性能分析选项的含义和用途
  • 原文地址:https://www.cnblogs.com/cola-1998/p/10237190.html
Copyright © 2011-2022 走看看