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

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的数学计算公式是:



 也就是说,类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的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...

python实现六大分群质量评估指标(兰德系数、互信息、轮廓系数)的更多相关文章

  1. 社区发现的3个评估指标:标准化互信息NMI,ARI指标,以及模块度(modularity)

    转载请注明出处:http://www.cnblogs.com/bethansy/p/6890972.html 一.已知真实社区划分结果 1.NMI指数,互信息和标准化互信息 具体公式和matlab代码 ...

  2. Python机器学习笔记:常用评估指标的用法

    在机器学习中,性能指标(Metrics)是衡量一个模型好坏的关键,通过衡量模型输出y_predict和y_true之间的某种“距离”得出的. 对学习器的泛化性能进行评估,不仅需要有效可行的试验估计方法 ...

  3. 用K-Means聚类分析做客户分群

    聚类指的是把集合,分组成多个类,每个类中的对象都是彼此相似的.K-means是聚类中最常用的方法之一,它是基于点与点距离的相似度来计算最佳类别归属. 在使用该方法前,要注意(1)对数据异常值的处理:( ...

  4. 【机器学习】--模型评估指标之混淆矩阵,ROC曲线和AUC面积

    一.前述 怎么样对训练出来的模型进行评估是有一定指标的,本文就相关指标做一个总结. 二.具体 1.混淆矩阵 混淆矩阵如图:  第一个参数true,false是指预测的正确性.  第二个参数true,p ...

  5. 评估指标:准确率(Precision)、召回率(Recall)以及F值(F-Measure)

    为了能够更好的评价IR系统的性能,IR有一套完整的评价体系,通过评价体系可以了解不同信息系统的优劣,不同检索模型的特点,不同因素对信息检索的影响,从而对信息检索进一步优化. 由于IR的目标是在较短时间 ...

  6. 客户主题分析(tableau)—客户分群

    主要分析方面:客户合理分群 客户分群实现:使用聚类构建指标,需理解聚类的分析逻辑,需使用软件:tableau 聚类方法:选择3指标分别为购买总金额,客户购买次数.类平均购买价格(四类的平均购买价格,四 ...

  7. 【Model Log】模型评估指标可视化,自动画Loss、Accuracy曲线图工具,无需人工参与!

    1. Model Log 介绍 Model Log 是一款基于 Python3 的轻量级机器学习(Machine Learning).深度学习(Deep Learning)模型训练评估指标可视化工具, ...

  8. python脚本实现集群检测和管理

    python脚本实现集群检测和管理 场景是这样的:一个生产机房,会有很多的测试机器和生产机器(也就是30台左右吧),由于管理较为混乱导致了哪台机器有人用.哪台机器没人用都不清楚,从而产生了一个想法-- ...

  9. 聚类结果的评估指标及其JAVA实现

    一. 前言 又GET了一项技能.在做聚类算法的时候,由于要评估所提出的聚类算法的好坏,于是需要与一些已知的算法对比,或者用一些人工标注的标签来比较,于是用到了聚类结果的评估指标.我了解了以下几项. 首 ...

随机推荐

  1. uploadify插件Http Error(302)错误记录(MVC)

    由于项目(asp.net MVC)需要做一个附件上传的功能,使用的是jQuery的Uploadify插件的2.1.0版本,上传文件到自己项目指定的文件夹下面.做完之后,在谷歌上测试是正确的,在火狐上报 ...

  2. Building OpenCascade on Windows with Visual Studio

    Building OpenCascade on Windows with Visual Studio eryar@163.com 摘要Abstract:详细说明OpenCascade的编译配置过程,希 ...

  3. 简单java在线测评程序

    简单java程序在线测评程序 一.前言 大家过年好!今年的第一篇博客啊!家里没有网,到处蹭无线!日子过得真纠结!因为毕设的需求,简单写了一个java程序在线测评程序,当然也可以在本地测试. 二.思路 ...

  4. MyBatis中#,$的用法区别

    #可以防止SQL注入 $用在一些特殊的SQL语句例如 order by ${...} , desc/asc PS:大部分用#,一些特殊情况用$

  5. Android 仿微信小视频录制

    Android 仿微信小视频录制 WechatShortVideo和WechatShortVideo文章

  6. hdoj 3635 Dragon Balls【并查集求节点转移次数+节点数+某点根节点】

    Dragon Balls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  7. 摘录DirectShow数据,视频采集

    DirectShow在,数据流(Data Flow)它们是依次流过每Filter的.管理其数据具有其自己的方法,并且并没有向用户提供一个统一的接口,供用户操作数据流.这里以提取视频採集在的每帧为位图数 ...

  8. 基于jQuery的ajax系列之用FormData实现页面无刷新上传

    接着上一篇ajax系列之用jQuery的ajax方法向服务器发出get和post请求写,这篇主要写如何利用ajax和FormData实现页面无刷新的文件上传效果,主要用到了jQuery的ajax()方 ...

  9. python+selenium自动化软件测试(第2章):WebDriver API

    2.1 操作元素基本方法 前言前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可 ...

  10. js实现键盘按键检测

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...