zoukankan      html  css  js  c++  java
  • 聚类时的轮廓系数评价和inertia_

    在进行聚类分析时,机器学习库中提供了kmeans++算法帮助训练,然而,根据不同的问题,需要寻找不同的超参数,即寻找最佳的K值

    最近使用机器学习包里两个内部评价聚类效果的方法:clf=KMeans(n_clusters=k,n_jobs=20)

    其中方法一:clf.inertia_是一种聚类评估指标,我常见有人用这个。说一下他的缺点:这个评价参数表示的是簇中某一点到簇中距离的和,这种方法虽然在评估参数最小时表现了聚类的精细性,但是这种情况会出现划分过于精细的状况,并且未考虑和簇外点的距离最大化,因此,我推荐使用方法二

          方法二:使用轮廓系数法进行K值的选择,在此,我需要解释一下轮廓系数,以及为何选用轮廓系数作为内部评价的标准,轮廓系数的公式为:S=(b-a)/max(a,b),其中a是单个样本离同类簇所有样本的距离的平均数,b是单个样本到不同簇所有样本的平均。

    轮廓系数表示了同类样本间距离最小化,不同类样本间距离最大的度量

    关于通过轮廓系数选择K值得问题:

    通过建立循环来选取K值

    # 构造自定义函数,用于绘制不同k值和对应轮廓系数的折线图
    def k_silhouette(X, clusters):
    K = range(2,clusters+1)
    # 构建空列表,用于存储个中簇数下的轮廓系数
    S = []
    for k in K:
    kmeans = KMeans(n_clusters=k)
    kmeans.fit(X)
    labels = kmeans.labels_

    # 调用字模块metrics中的silhouette_score函数,计算轮廓系数
    S.append(metrics.silhouette_score(X, labels, metric='euclidean'))

    # 中文和负号的正常显示
    plt.rcParams['font.sans-serif'] = [u'SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    # 设置绘图风格
    plt.style.use('ggplot')
    # 绘制K的个数与轮廓系数的关系
    plt.plot(K, S, 'b*-')
    plt.xlabel('簇的个数')
    plt.ylabel('轮廓系数')
    # 显示图形
    plt.show()

    # 自定义函数的调用(指定原始数据和选取范围)
    k_silhouette(X, 15)

  • 相关阅读:
    TC配置文件WCMD.INI详解,只能在ini重修改的配置
    Source Insight中的多行注释
    ACE_Timer_Heap_T定时器
    什么是代理服务器
    太阳能传感器目前主要故障问题解决方案
    source insight中文显示和处理
    C#3.0新特性小结(2)
    .NET中事务操作小结(1)
    常用的正则表达式收藏版
    几种流行的Ajax开发框架比较
  • 原文地址:https://www.cnblogs.com/laowangxieboke/p/11177651.html
Copyright © 2011-2022 走看看