Python机器学习——聚类的有效性指标
聚类有效性指标(Cluster Validity Index,CVI)用于度量聚类的效果。很显然,希望彼此相似的样本在一个簇,彼此不相似的样本尽量在不同的簇。也就是说:同一簇的样本彼此之间相似,不同簇之间的样本尽可能不同。
聚类的性能指标分为两类:
- 外部指标:该指标由聚类结果和某个参考模型进行比较而获得;
- 内部指标:该指标由本身的聚类结果而得到,不利用任何参考模型;
外部指标
给定数据集D=x⃗ 1,x⃗ 2,...,x⃗ ND=x→1,x→2,...,x→N。假设某个参考模型给出的簇划分为C∗C∗={C∗1C1∗,C∗2C2∗,…,C∗k′′Ck"∗},其簇标记向量为λ⃗ ∗λ→∗。若聚类算法给出的簇划分为C=C={C1,C2,...,CKC1,C2,...,CK},其簇标记向量为λ⃗ λ→。定义:
a=|SS|,SS=[(x⃗ i,x⃗ j)|λi=λj,λ∗i=λ∗j,i<j]a=|SS|,SS=[(x→i,x→j)|λi=λj,λi∗=λj∗,i<j]
b=|SD|,SD=[(x⃗ i,x⃗ j)|λi=λj,λ∗i≠λ∗j,i<j]b=|SD|,SD=[(x→i,x→j)|λi=λj,λi∗≠λj∗,i<j]
c=|DS|,DS=[(x⃗ i,x⃗ j)|λi≠λj,λ∗i=λ∗j,i<j]c=|DS|,DS=[(x→i,x→j)|λi≠λj,λi∗=λj∗,i<j]
d=|DD|,DD=[(x⃗ i,x⃗ j)|λi≠λj,λ∗i≠λ∗j,i<j]d=|DD|,DD=[(x→i,x→j)|λi≠λj,λi∗≠λj∗,i<j]
其中,|.|表示集合元素的个数,各集合的意义如下:
- SSSS:包含了同时隶属于CC和C∗C∗的样本对;
- SDSD:包含了隶属于CC,但是不隶属于C∗C∗的样本对;
- DSDS:包含了不隶属于CC,但是隶属于C∗C∗的样本对;
- DDDD:包含了既不隶属于CC,又不隶属于C∗C∗的样本对;
由于每个样本对仅属于一个集合,因此有:
a+b+c+d=N(N−1)2a+b+c+d=N(N−1)2
使用上述定义式,可以有下面这些外部指标外部指标:
Jaccard系数(Jaccard Cofficient,JC):
JC=aa+b+cJC=aa+b+c
它刻画了所有属于同一类的样本对(要么在CC中属于同一类,要么在C∗C∗中属于同一类),同时在C,C∗C,C∗中属于同一类的样本量的比值。
FM指数(Fowlkes and Mallows Index,FMI):
FMI=aa+b⋅aa+c−−−−−−−−−−−√FMI=aa+b⋅aa+c
它刻画的是:在CC中属于同一类的样本对中,同时属于C∗C∗的样本对的比例为p1p1,在C∗C∗中属于同一类的样本对中,同时属于CC的样本对的比例为p2p2,FMI就是p1p1和p2p2的几何平均。
- Rand指数(Rand Index,RI):
RI=2(a+d)N(N−1)RI=2(a+d)N(N−1)
它刻画的是同时隶属C,C∗C,C∗的样本对与同时不隶属于C,C∗C,C∗的样本对之和占所有样本对的比例。
- ARI指数(Adjusted Rand Index,ARI):
ARI=RI−E[RI]max(RI)−E[RI]ARI=RI−E[RI]max(RI)−E[RI]
使用RI时有个问题,就是对于随机聚类,RI不保证接近0(可能还很大)。而ARI指数就可以利用随机聚类情况下的RI即E[RI]来解决这个问题.
这些外部指标性能度量的结果都在[0,1]之间,这些值越大,说明聚类的性能越好。
内部指标
给定数据集D=D={x⃗ 1,x⃗ 1,...,x⃗ Nx→1,x→1,...,x→N}。若聚类给出的簇划分为C=C={C1,C2,...,CKC1,C2,...,CK},定义
avg(Ck)=2|Ck|(|Ck−1|)∑x⃗ i,x⃗ j∈Ck,i≠jdistance(x⃗ i,x⃗ j),k=1,2,...,Kavg(Ck)=2|Ck|(|Ck−1|)∑x→i,x→j∈Ck,i≠jdistance(x→i,x→j),k=1,2,...,K
diam(Ck)=maxx⃗ i,x⃗ j∈Ck,i≠jdistance(x⃗ i,x⃗ j),k=1,2,...,Kdiam(Ck)=maxx→i,x→j∈Ck,i≠jdistance(x→i,x→j),k=1,2,...,K
dmin(Ck,Cl)=minx⃗ i∈Ck,x⃗ j∈Cldistance(x⃗ i,x⃗ j),k=1,2,...,K;k≠ldmin(Ck,Cl)=minx→i∈Ck,x→j∈Cldistance(x→i,x→j),k=1,2,...,K;k≠l
dcen(Ck,Cl)=distance(μ⃗ k,μ⃗ l),k=1,2,...,K;k≠ldcen(Ck,Cl)=distance(μ→k,μ→l),k=1,2,...,K;k≠l
其中,distance(x⃗ i,x⃗ j)distance(x→i,x→j)表示两点x⃗ i,x⃗ jx→i,x→j之间的距离;μ⃗ kμ→k表示簇CkCk的中心点,μ⃗ lμ→l表示簇ClCl的中心点;distance(μ⃗ k,μ⃗ l)distance(μ→k,μ→l)表示簇Ck,ClCk,Cl的中心点之间的距离。上述定义的意义如下:
- avg(Ck)avg(Ck):簇CkCk中每对样本之间的平均距离;
- diam(Ck)diam(Ck):簇CkCk中距离最远的两个点的距离;
- dmin(Ck,Cl)dmin(Ck,Cl):簇C)k,ClC)k,Cl之间最近的距离;
- dcen(Ck,Cl)dcen(Ck,Cl):簇Ck,ClCk,Cl中心点之间的距离;
使用上述定义式,可有以下的内部指标。
- DB指数(Davies-Bouldin Index ,DBI):
DBI=1K∑k=1Kmaxk≠l(avg(Ck)+avg(Cl)dcen(Ck,Cl))DBI=1K∑k=1Kmaxk≠l(avg(Ck)+avg(Cl)dcen(Ck,Cl))
它刻画的是:给定两个簇,每个簇样本之间平均值之和比上两个簇的中心点之间的距离作为度量。然后考察该度量对所有簇的平均值。显然DBIDBI越小越好。如果每个簇样本之间的平均值越小(即簇内样本距离都很近),则DBIDBI越小;如果簇间中心点的距离越大(即簇样本距离互相都很远),则DBIDBI越小。
- Dunn指数(Dunn Index,DI):
DI=mink≠ldmin(Ck,Cl)maxidiam(Ci)DI=mink≠ldmin(Ck,Cl)maxidiam(Ci)
它刻画的是任意两个簇之间最近的距离的最小值,除以任意一个簇内距离最远的两个点的距离的最大值。显然DIDI越大越好。如果任意两个簇之间最近的距离的最小值越大(即簇间样本距离相互都很远),则DIDI越大;如果任意一个簇内距离最远的两个点的距离的最大值越小(即簇内样本距离都很近),则DIDI越大。
Python机器学习——聚类的有效性指标相关推荐
- 机器学习 | 聚类评估指标
文章目录 1. 聚类评估指标 1.1 外部评估指标 RI 兰德指数 ARI 调整兰德指数 Jaccard JC指数 FMI FMI指数 MI 互信息 NMI 归一化互信息 AMI 调整互信息 1.2 ...
- Python机器学习之旅-1.聚类_KMeans
k-means是针对聚类所得簇划分的最小化平方误差 采用的是贪心的策略(最小化式不容易解决,属于NP难问题),主要分三步进行 1.初始化,随机分配簇的中心 2.反复迭代计算簇中心 3.等到为簇中心分配 ...
- 聚类的外部指标(Purity, ARI, NMI, ACC) 和内部指标(NCC,Entropy,Compactness,Silhouette Index),附代码 (Python 和 Matlab)
聚类性能评估的外部指标和内部指标,附代码 (Python 和 Matlab) 文章目录 聚类性能评估的外部指标和内部指标,附代码 (Python 和 Matlab) 1 外部指标 1.1 Purity ...
- python机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例
python机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例 目录 机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例
- 机器学习 聚类篇——python实现DBSCAN(基于密度的聚类方法)
机器学习 聚类篇--python实现DBSCAN(基于密度的聚类方法) 摘要 python实现代码 计算实例 摘要 DBSCAN(Density-Based Spatial Clustering of ...
- python机器学习库sklearn——k均值聚类
全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 k均值聚类的相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article/de ...
- 【Python机器学习】聚类算法任务,评价指标SC、DBI、ZQ等系数详解和实战演示(附源码 图文解释)
需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一.聚类任务 设样本集S={x_1,x_2,-,x_m}包含m个未标记样本,样本x_i=(x_i^(1),x_i^(2),-,x_i^(n))是一 ...
- 8.5 Python机器学习--微博聚类和音乐分类理论记录
Python机器学习: 隆重推出scikit-learn机器学习库 Scikit-Learn是基于python的机器学习模块 Scikit-Learn中的机器学习模型非常丰富,包括SVM,决策树, G ...
- python机器学习手写算法系列——kmeans聚类
从机器学习到kmeans 聚类是一种非监督学习,他和监督学习里的分类有相似之处,两者都是把样本分布到不同的组里去.区别在于,分类分析是有标签的,聚类是没有标签的.或者说,分类是有y的,聚类是没有y的, ...
最新文章
- 机器学习模型建立的几点建议
- Java根据当前日期获得这一周的日期
- Python 多进程异常处理的方法,你会吗
- linux内核配置参考,[转]Linux内核配置选项 参考(3)
- Git 分支创建并推送到现有仓库
- Python3标准库built-in、itertools、functools中的生成器
- eclipse中git分支创建与合并(-)
- Java进阶:Docker
- 拓端tecdat|R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析
- 方舟服务器设置文档,方舟云服务器设置
- Tableau常用可视化图形介绍及其适用场景
- web应用程序;web服务器;访问网站过程;Tomcat;发布网站;http;Maven;servlet;MVC
- 练习打字速度效果很好的网站(本人亲测)
- 基于opencv的身份证识别(KNN与OCR两种算法)
- dcloud wap2app上架应用宝过审方法
- 元气骑士icloud共享吧_如何禁用OS X的iCloud照片和视频共享
- Keil无法跳转到(go to definition)函数定义的地方,而是出现Browser
- Linux 系统硬盘不能识别挂载 bad magic number in super-block问题的修复
- 假星探街头忽悠女子当模特骗其千余元
- 计算机考研408每日一题 day121