聚类︱python实现 六大 分群质量评估指标(兰德系数、互信息、轮廓系数)

之前关于聚类题材的博客有以下两篇: 1、 笔记︱多种常见聚类模型以及分群质量评估(聚类注意事项、使用技巧) 2、k-means+python︱scikit-learn中的KMeans聚类实现 .

1 R语言中的分群质量——轮廓系数

因为先前惯用R语言,那么来看看R语言中的分群质量评估,节选自笔记︱多种常见聚类模型以及分群质量评估(聚类注意事项、使用技巧)

没有固定标准,一般会3-10分群。或者用一些指标评价,然后交叉验证不同群的分群指标。 一般的指标:轮廓系数silhouette(-1,1之间,值越大,聚类效果越好)(fpc包),兰德指数rand;R语言中有一个包用30种方法来评价不同类的方法(NbClust),但是速度较慢 商业上的指标:分群结果的覆盖率;分群结果的稳定性;分群结果是否从商业上易于理解和执行 轮廓系数旨在将某个对象与自己的簇的相似程度和与其他簇的相似程度进行比较。轮廓系数最高的簇的数量表示簇的数量的最佳选择。

一般来说,平均轮廓系数越高,聚类的质量也相对较好。在这,对于研究区域的网格单元,最优聚类数应该是2,这时平均轮廓系数的值最高。但是,聚类结果(k=2)的 SSE 值太大了。当 k=6 时,SEE 的值会低很多,但此时平均轮廓系数的值非常高,仅仅比 k=2 时的值低一点。因此,k=6 是最佳的选择。 .

2 python中的分群质量

主要参考来自官方文档:Clustering

部分内容来源于:机器学习评价指标大汇总 个人比较偏好的三个指标有:Calinski-Harabaz Index(未知真实index的模型评估)、Homogeneity, completeness and V-measure(聚类数量情况)、轮廓系数

1.1 Adjusted Rand index 调整兰德系数

>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]

>>> metrics.adjusted_rand_score(labels_true, labels_pred)  
0.24

.

1.2 Mutual Information based scores 互信息

Two different normalized versions of this measure are available, Normalized Mutual Information(NMI) and Adjusted Mutual Information(AMI). NMI is often used in the literature while AMI was proposed more recently and is normalized against chance:

>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]

>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)  
0.22504

.

1.3 Homogeneity, completeness and V-measure

同质性homogeneity:每个群集只包含单个类的成员。 完整性completeness:给定类的所有成员都分配给同一个群集。

>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]

>>> metrics.homogeneity_score(labels_true, labels_pred)  
0.66...

>>> metrics.completeness_score(labels_true, labels_pred) 
0.42...

两者的调和平均V-measure:

>>> metrics.v_measure_score(labels_true, labels_pred)    
0.51...

.

1.4 Fowlkes-Mallows scores

The Fowlkes-Mallows score FMI is defined as the geometric mean of the pairwise precision and recall:

>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>>
>>> metrics.fowlkes_mallows_score(labels_true, labels_pred)  
0.47140...

.

1.5 Silhouette Coefficient 轮廓系数

>>> import numpy as np
>>> from sklearn.cluster import KMeans
>>> kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
>>> labels = kmeans_model.labels_
>>> metrics.silhouette_score(X, labels, metric='euclidean')
...                                                      
0.55...

.

1.6 Calinski-Harabaz Index

这个计算简单直接,得到的Calinski-Harabasz分数值ss越大则聚类效果越好。Calinski-Harabasz分数值ss的数学计算公式是(理论介绍来源于:用scikit-learn学习K-Means聚类):

 也就是说,类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数会高。  在scikit-learn中, Calinski-Harabasz Index对应的方法是metrics.calinski_harabaz_score. 在真实的分群label不知道的情况下,可以作为评估模型的一个指标。 同时,数值越小可以理解为:组间协方差很小,组与组之间界限不明显。 与轮廓系数的对比,笔者觉得最大的优势:快!相差几百倍!毫秒级

>>> import numpy as np
>>> from sklearn.cluster import KMeans
>>> kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
>>> labels = kmeans_model.labels_
>>> metrics.calinski_harabaz_score(X, labels)  
560.39...

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一心无二用,本人只专注于基础图像算法的实现与优化。

关于《半反去雾算法》一文的四宗罪。

  最近在看一篇关于去雾的算法的文章:A Fast Semi-Inverse Approach to Detect and Remove the Haze fr...

1828
来自专栏人人都是极客

OpenCV在车道线查找中的使用

本篇是自动驾驶系列的第二篇,在后台留言索取代码会提供源码链接。这次的目标是编写一个软件流水线来识别汽车前置摄像头的视频中的车道边界。摄像机标定图像,试验路图像和...

3087
来自专栏智能算法

分类算法之朴素贝叶斯分类(Naive Bayesian classification)

如果用一句话来概括贝叶斯分类器,那就是:根据样本集中的先验信息,来推算出某一个样本属于某一类的概率,然后根据推算出来的结果将该样本分为某类 。贝叶斯分类是一类分...

34412
来自专栏智能算法

分类算法之朴素贝叶斯分类(Naive Bayesian classification)

如果用一句话来概括贝叶斯分类器,那就是:根据样本集中的先验信息,来推算出某一个样本属于某一类的概率,然后根据推算出来的结果将该样本分为某类 。贝叶斯分类是一类分...

2807
来自专栏技术翻译

Scikit-Learn: 机器学习的灵丹妙药

Scikit-Learn是python的核心机器学习包,它拥有支持基本机器学习项目所需的大部分模块。该库为从业者提供了一个统一的API(ApplicationP...

1011
来自专栏SIGAI学习与实践平台

OCR技术简介

光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。亦即将图...

3191
来自专栏SimpleAI

【DL笔记9】搭建CNN哪家强?TensorFlow,Keras谁在行?

从【DL笔记1】到【DL笔记N】,是我学习深度学习一路上的点点滴滴的记录,是从Coursera网课、各大博客、论文的学习以及自己的实践中总结而来。从基本的概念、...

1012
来自专栏AI科技评论

ACL2016最佳论文:通过整合基于路径的方法和分布式的方法,改善词对检测

摘要 在自然语言处理(NLP)中,理清词对关系是一项的关键任务 ,在一份使用两种互补方法的文献中也强调这一点。分布式方法:其监督式的变体是目前最好的任务执行器...

3235
来自专栏新智元

【中秋赏阅】美丽的神经网络:13种细胞构筑的深度学习世界

【新智元导读】人是视觉动物,因此要了解神经网络,没有什么比用图将它们的形象画出来更加简单易懂了。本文囊括 26 种架构,虽然不都是神经网络,但却覆盖了几乎所有常...

3286
来自专栏人人都是极客

OpenCV在车道线查找中的使用

本篇是自动驾驶系列的第二篇,在后台留言索取代码会提供源码链接。这次的目标是编写一个软件流水线来识别汽车前置摄像头的视频中的车道边界。摄像机标定图像,试验路图像和...

1.2K17

扫码关注云+社区