聚类评价指标

最近在做聚类的项目,聚类得到结果后我们需要知道聚类的好坏,用哪个算法效果比较好。肯定要选择那个最好评价的算法。今天我们就不谈算法只谈算法结果的评价。
我也从网上看了很多的别人写的东西,总之是五花八门的。那下面我们言归正传。
聚类算法是机器学习算法中的一种无监督算法。那么在生活中我们大多数做项目的话其实数据集都是为标定的。我看到许多人有写到通过有label的样本,计算它的混淆矩阵。这不乏是一种办法,那么今天说的方法其实是一种内部方法,就是说通过聚类后的结果label来计算的一种评价指标。
内部有效性指标呢设计的时候从三个方面来看聚类的有效性:

  1. 度量各个聚类的分离程度,理论上,类分离程度越大,结果越好。
  2. 度量每个类内的内在紧致性,紧致性越大,聚类效果越好。
  3. 度量各个类表示的复杂度,在可行的类表示中选择简单的。

Silhouette

首先,我们先看评价指标的其中一个指标 :轮廓系数。
Silhouette 遵循类紧致性。Silhouette值用来描述一个目标对于目标所在簇与其他簇之间的相似性。其范围是从-1~+1,这个值越大表明目标与自己所在簇之间的匹配关系度越高,与其他簇的匹配关系度越低。如果这个值越高,那么聚类结果越好,如果是很小或是负值,那么可能是分簇太多或是太少造成的。
Silhouette是通过一些距离矩阵来计算的。

Silhouette的定义

假设数据集我们已经通过聚类算法分成了很多类。对于目标iii有i∈Cii\in C_ii∈Ci​,得到
a(i)=1∣Ci−1∣∑j∈Ci,i≠jd(i,j)a(i) = \frac{1}{\left | C_i -1 \right|}\sum_{j\in C_i,i\neq j}d(i,j)a(i)=∣Ci​−1∣1​j∈Ci​,i​=j∑​d(i,j)表示i与同簇之间其他目标的平均距离。
这里的d(i,j)d(i,j)d(i,j)是目标i和j在簇CiC_iCi​中的距离。那么a(i)a(i)a(i)可以说成是i被分配到这个簇的好坏程度。
那么下面我们就来讨论不同簇的不相似程度。
对于目标iii有i∈Cii\in C_ii∈Ci​,CkC_kCk​表示第K个簇,
b(i)=min⁡k≠i1∣Ck∣∑j∈Ckd(i,j)b(i) = \min_{k\neq i}\frac{1}{\left | C_k \right|}\sum_{j\in C_k}d(i,j)b(i)=k​=imin​∣Ck​∣1​j∈Ck​∑​d(i,j)表示i到除CiC_iCi​簇外其他簇CkC_kCk​中的点之间的平均距离作为簇之间的平均不相似度。我们用i到其它簇的最小平均距离表示b(i)。

下面我们来定义目标值i的Silhouette值。
s(i)=b(i)−a(i)max⁡(a(i),b(i)),if∣Ci∣>1s(i) = \frac{b(i)-a(i)}{\max(a(i),b(i))},if\left | C_i \right |>1s(i)=max(a(i),b(i))b(i)−a(i)​,if∣Ci​∣>1
and
s(i)=0,if∣Ci∣=1s(i)=0,if \left | C_i \right |=1s(i)=0,if∣Ci​∣=1
我们也可以写成
s(i)={1−a(i)/b(i),ifa(i)<b(i)0,ifa(i)=b(i)b(i)/a(i)−1,ifa(i)>b(i)s(i) = \left\{\begin{matrix} 1- a(i)/b(i),&if a(i)<b(i) \\ 0, &if a(i) = b(i) \\ b(i)/a(i) -1,&if a(i)>b(i) \end{matrix}\right.s(i)=⎩⎨⎧​1−a(i)/b(i),0,b(i)/a(i)−1,​ifa(i)<b(i)ifa(i)=b(i)ifa(i)>b(i)​
从以上定义我么你可以看到−1≤s(i)≤1-1 \leq s(i) \leq 1−1≤s(i)≤1
当a(i)≪b(i)a(i)\ll b(i)a(i)≪b(i)的时候,那么s(i)s(i)s(i)就越接近于1,对于簇中值i来说a(i)越小,那么i被分配到这个簇是很合理的。而b(i)的值比较大的时候从邻近簇来说i被分配到现在所在簇的结果不是合理的。因此当s(i)的值接近于1的时候说明配分配到所在簇是极其合理的。当s(i)接近与-1的时候说明,目标i更应该被分配到邻近簇。当s(i)接近与0的时候说明他应该在俩个簇的边界点上。

Silhouette coefficient

silhouette coefficient表示在整个数据集上s(i)的均值的最大值。可得到
SC=max⁡ksˉ(k)SC = \max_{k}\bar{s}(k)SC=kmax​sˉ(k)

轮廓系数的应用

在sklearn包中已经有用python实现的轮廓系数值的计算。下面我们来看一下吧。

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import pandas as pd
import matplotlib.pyplot as pltdata = pd.DataFrame([[12,45],[13,44.5],[18,222],[19,223],[12.33,32],[14,50]],columns=list('ab'))
km = KMeans(2)
pre = km.fit_predict(data)
SC = silhouette_score(data,pre)
print(SC)
color_dic = {0:'red',1:'blue',3:'black'}
colors = [color_dic[i] for i in pre]
plt.scatter(data.loc[:,'a'],data.loc[:,'b'],c=colors,alpha=0.7)
plt.show()

参考文献:
[1] 于剑 机器学习从公理到算法
[2] https://en.wikipedia.org/wiki/Silhouette_(clustering)

聚类评价指标(轮廓系数 Silhouette coefficient)相关推荐

  1. 聚类算法是什么?聚类(clustering)有哪些常用的评估方法?评估方法的公示是什么?轮廓系数(Silhouette Coefficient)、平方根标准误差、R方、ARI分别是什么?

    聚类(clustering)算法是一种无监督方法,无因变量或者目标变量: 核心就一句话: 物以类聚,人以群分 企业在进行客户分析时,往往希望通过了解不同的客户具有什么不同的特征来实现以下三种目的: 精 ...

  2. 如何选择kmeans中的k值——肘部法则–Elbow Method和轮廓系数–Silhouette Coefficient...

    肘部法则–Elbow Method 我们知道k-means是以最小化样本与质点平方误差作为目标函数,将每个簇的质点与簇内样本点的平方距离误差和称为畸变程度(distortions),那么,对于一个簇, ...

  3. point 如何求elbow_如何选择kmeans中的k值——肘部法则–Elbow Method和轮廓系数–Silhouette...

    肘部法则–Elbow Method 我们知道k-means是以最小化样本与质点平方误差作为目标函数,将每个簇的质点与簇内样本点的平方距离误差和称为畸变程度(distortions),那么,对于一个簇, ...

  4. Sklearn 成长之路(五)K-means聚类及其评价指标——轮廓系数

    聚类结果评价指标--轮廓系数 某个点的轮廓系数定义为: s=disMeanout−disMeaninmax(disMeanout,disMeanin)s =\frac{disMean_{out} - ...

  5. 聚类 - 3 - 轮廓系数

    本总结是是个人为防止遗忘而作,不得转载和商用. 用聚类算法分好类后如何判断分的效果呢?方法就是轮廓系数(Silhouette). Silhouette系数是对聚类结果有效性的解释和验证,由Peter ...

  6. Kmeans聚类③——Kmeans聚类原理轮廓系数Sklearn实现

    数据分析目录(文末有超级彩蛋!): 一.Excel系列--四大常用函数及十大高级图表 二.SQL系列--性能优化/多表关联/窗口分析函数等 三.统计学系列--概率论/置信区间/相关/抽样等 四.Pan ...

  7. 机器学习之K-Means聚类(python手写实现+使用Silhouette Coefficient来选取最优k值)

    文章目录 K-Means Silhouette Coefficient(轮廓系数) 代码实现 参考 K-Means K-Means聚类又叫K均值聚类,是一种线性时间复杂度的聚类方法,也是比较成熟的一种 ...

  8. 聚类总结(二)聚类性能评估、肘部法则、轮廓系数

    文章目录 一.聚类K的选择规则 1.1 肘部法则–Elbow Method 1.2 轮廓系数–Silhouette Coefficient 二.聚类性能评估 2.1 外部评估(external eva ...

  9. matlab聚类轮廓系数,R数据挖掘 第三篇:聚类的评估(簇数确定和轮廓系数)和可视化...

    在实际的聚类应用中,通常使用k-均值和k-中心化算法来进行聚类分析,这两种算法都需要输入簇数,为了保证聚类的质量,应该首先确定最佳的簇数,并使用轮廓系数来评估聚类的结果. 一,k-均值法确定最佳的簇数 ...

最新文章

  1. python爬虫一般格式
  2. python 数字证书模拟登录_用于生成WebService使用的数字证书及签署证书.python脚本...
  3. C语言rand(),srand()函数真实性能分析
  4. mysql语句中把string类型字段转datetime类型
  5. IntelliJ IDEA使用教程(很全)
  6. java local_java.time.LocalDateTime with()方法
  7. 数组java8求和_java – 如何使用IntStream对int数组的特定索引号求和?
  8. 【扫码登录的逻辑以及关于扫码登录的思考】
  9. 随机微分方程与 Ito Lemma 的关系
  10. Swift4-有妖气漫画精仿框架部分
  11. ADSL防御黑客攻击的十大方法(转)
  12. jdk8 下载 安装 配置及idea配置jdk环境
  13. 【c语言数学函数库】
  14. java文件上传下载接口_java 文件上传下载
  15. 移动机器人定位方法概述
  16. 关于激光校正的常见问题ReLEx SMILE:是的,在俄罗斯没有,但是在俄罗斯没有
  17. 天天向上的力量python代码解释_天天向上的力量 B
  18. python生成验证码的程序_用python生成验证码图片
  19. 缓解过拟合(overfitting)的方法
  20. android 壁纸制作教程,[教程]怎样制作Android手机壁纸/桌面

热门文章

  1. 无法访问其他计算机共享打印机,想共享别人的打印机,但显示无法连接到打印机怎么处理?高手来!...
  2. 【详细!!】计算机类书籍整理
  3. 必备技能 |《 Python数据挖掘》之什么是哑变量?
  4. 秋冬饮品研发没思路?带你看新品5大趋势!
  5. windows服务器日志文件定期清理,运维编排场景系列-----定时清理Windows服务器日志...
  6. windows系统目录programdata和program file(x86)
  7. 阿里达摩院XR实验室2022校招内推
  8. 至强系列服务器多少钱,至强E5-1600系列揭秘_服务器产业-中关村在线
  9. Python学习教程:针对任意多的分隔符拆分字符串
  10. Unity3D粒子系统实现落叶效果