聚类模型评价(python)

原文链接:聚类模型评价(python实现)

微信公众号:机器学习养成记 搜索添加微信公众号:chenchenwings


在使用聚类方法的过程中,常常涉及到如何选择合适的聚类数目、如何判断聚类效果等问题,本篇文章我们就来介绍几个聚类模型的评价指标,并展示相关指标在python中的实现方法。

概述

评价指标分为外部指标和内部指标两种,外部指标指评价过程中需要借助数据真实情况进行对比分析,内部指标指不需要其他数据就可进行评估的指标。下表中列出了几个常用评价指标的相关情况:

python实现

轮廓系数(Silhouette Coefficient)

轮廓系数可以用来选择合适的聚类数目。根据折线图可直观的找到系数变化幅度最大的点,认为发生畸变幅度最大的点就是最好的聚类数目。

from sklearn.metrics import silhouette_score

data2 = data1.sample(n=2000,random_state=123,axis=0)

silhouettescore=[]

for i in range(2,8):

    kmeans=KMeans(n_clusters=i,random_state=123).fit(data2.iloc[:,1:4])

    score=silhouette_score(data2.iloc[:,1:4],kmeans.labels_)

    silhouettescore.append(score)

plt.figure(figsize=(10,6))

plt.plot(range(2,8),silhouettescore,linewidth=1.5,linestyle='-')

plt.show()

数目在2到3时畸变程度越大,因此选择2类较好。

Calinski-Harabaz 指数

Calinski-Harabaz指数也可以用来选择最佳聚类数目,且运算速度远高于轮廓系数,因此个人更喜欢这个方法。当内部数据的协方差越小,类别之间的协方差越大,Calinski-Harabasz分数越高。

from sklearn.metrics import calinski_harabaz_score

for i in range(2,7):

    kmeans=KMeans(n_clusters=i,random_state=123).fit(data2.iloc[:,1:4])

    score=calinski_harabaz_score(data2.iloc[:,1:4],kmeans.labels_)

    print('聚类%d簇的calinski_harabaz分数为:%f'%(i,score))

#聚类2簇的calinski_harabaz分数为:3535.009345

#聚类3簇的calinski_harabaz分数为:3153.860287

#聚类4簇的calinski_harabaz分数为:3356.551740

#聚类5簇的calinski_harabaz分数为:3145.500663

#聚类6簇的calinski_harabaz分数为:3186.529313

可见,分为两类的值最高,结论与上面的轮廓系数判断方法一致。

调整兰德系数(Adjusted Rand index,ARI)

从兰德系数开始,为外部指标。兰德指数用来衡量两个分布的吻合程度,取值范围[-1,1],数值越接近于1越好,并且在聚类结果随机产生时,指标接近于0。为方便演示,省去聚类过程,直接用样例数据展示实现方法。

from sklearn.metrics import adjusted_rand_score

labels_true = [0, 0, 1, 1, 0, 1]

labels_pred = [0, 0, 1, 1, 1, 2]

ari=adjusted_rand_score(labels_true, labels_pred) 

print('兰德系数为:%f'%(ari))

#兰德系数为:0.117647

互信息(Adjusted Mutual Information,AMI)

互信息也是用来衡量两个分布的吻合程度,取值范围[-1,1],值越大聚类效果与真实情况越吻合。

from sklearn.metrics import adjusted_mutual_info_score

labels_true = [0, 0, 1, 1, 0, 1]

labels_pred = [0, 0, 1, 1, 1, 2]

ami=adjusted_mutual_info_score(labels_true, labels_pred)

print('互信息为:%f'%(ami))

#互信息为:0.225042

V-measure

说V-measure之前要先介绍两个指标:

同质性(homogeneity):每个群集只包含单个类的成员。

完整性(completeness):给定类的所有成员都分配给同一个群集。

V-measure是两者的调和平均。V-measure取值范围为 [0,1],越大越好,但当样本量较小或聚类数据较多的情况,推荐使用AMI和ARI。

from sklearn import metrics

labels_true = [0, 0, 0, 1, 1, 1]

labels_pred = [0, 0, 1, 1, 2, 2]

h_score=metrics.homogeneity_score(labels_true, labels_pred)

c_score=metrics.completeness_score(labels_true, labels_pred)

V_measure=metrics.v_measure_score(labels_true, labels_pred)   

print('h_score为:%f \nc_score为:%f \nV_measure为:%f'%(h_score,c_score,V_measure))

#h_score为:0.666667

#c_score为:0.420620

#V_measure为:0.515804

Fowlkes-Mallows Index(FMI)

FMI是对聚类结果和真实值计算得到的召回率和精确率,进行几何平均的结果,取值范围为 [0,1],越接近1越好。

from sklearn.metrics import fowlkes_mallows_score

labels_true = [0, 0, 0, 1, 1, 1]

labels_pred = [0, 0, 1, 1, 2, 2]

fmi=fowlkes_mallows_score(labels_true, labels_pred) 

print('FMI为:%f'%(fmi))

#FMI为:0.471405

一般情况下,主要是对无y值的数据进行聚类操作。如果在评价中用到外部指标,就需通过人工标注等方法获取y值,成本较高,因此内部指标的实际实用性更强。


推荐文章

·Bagging算法(R语言)

·静态爬虫与地址经纬度转换(python)

·特征工程(一):前向逐步回归(R语言)

·聚类(三):KNN算法(R语言)

·小案例(六):预测小偷行为(python)

·ggplot2:正负区分条形图及美化

扫描二维码,关注我们。

如需转载,请在开篇显著位置注明作者和出处,并在文末放置机器学习养成记二维码和添加原文链接。

快来关注我们吧!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容