聚类的评价指标NMI标准化互信息+python实现+sklearn调库

  • 概念
  • 引例
  • 公式
    • 信息熵
    • 相对熵(relative entropy)
    • 互信息
    • *归一化互信息(NMI)
  • 代码
    • python
    • sklearn

概念

标准化互信息(normalized Mutual Information, NMI)用于度量聚类结果的相似程度,是community detection的重要指标之一,其取值范围在[0 1]之间,值越大表示聚类结果越相近,且对于[1, 1, 1, 2] 和 [2, 2, 2, 1]的结果判断为相同

引例

对于6个点(v1, v2, …, v6),若聚成3个类
真实值为v1, v2, v3一个类,v4一个类,v5,v6一个类,则其结果可写为[1, 1, 1, 2, 3, 3] (相同的数字表示对应的id属于同一个类)

通过自己的聚类算法,得到v1, v4一个类,v2, v5一个类 v3, v6一个类,则结果为[1, 2, 3, 1, 2, 3]

如何度量算法结果与标准结果之间的相似度,使结果越相似,值应接近1;如果算法结果很差则值接近0?

公式

信息熵

H(X)=−∑ip(xi)log⁡p(xi)H(X)=-\sum_{i} p\left(x_{i}\right) \log p\left(x_{i}\right) H(X)=−i∑​p(xi​)logp(xi​)

相对熵(relative entropy)

又被称为Kullback-Leibler散度(Kullback-Leibler divergence,KL散度)或信息散度(information divergence)

是两个概率分布(probability distribution)间差异的非对称性度量 。在在信息理论中,相对熵等价于两个概率分布的信息熵(Shannon entropy)的差值

设p(x),q(x)是随机变量X上的两个概率分布,则在离散与连续随机变量的情形下,相对熵的定义分别为:KL(p∥q)=∑p(x)log⁡p(x)q(x)KL(p∥q)=∫p(x)log⁡p(x)q(x)\begin{array}{l} K L(p \| q)=\sum p(x) \log \frac{p(x)}{q(x)} \\ \\ K L(p \| q)=\int p(x) \log \frac{p(x)}{q(x)} \end{array} KL(p∥q)=∑p(x)logq(x)p(x)​KL(p∥q)=∫p(x)logq(x)p(x)​​
KL散度可以理解为两个概率分布的距离,但不是真的距离,即p对q的相对熵与q对p的相对熵不相等。

互信息

互信息(Mutual Information)是信息论里一种有用的信息度量,它可以看成是一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不肯定性。

设两个随机变量 (X,Y)(X,Y)(X,Y)的联合分布为 p(x,y)p(x,y)p(x,y),边缘分布分别为 p(x),p(y)p(x),p(y)p(x),p(y)

互信息 I(X;Y)I(X;Y)I(X;Y) 是联合分布 p(x,y)p(x,y)p(x,y)与乘积分布 p(x)(y)p(x)(y)p(x)(y) 的相对熵,即公式为:
I(X;Y)=∑x∑yp(x,y)log⁡p(x,y)p(x)p(y)I(X ; Y)=\sum_{x} \sum_{y} p(x, y) \log \frac{p(x, y)}{p(x) p(y)} I(X;Y)=x∑​y∑​p(x,y)logp(x)p(y)p(x,y)​

*归一化互信息(NMI)

将互信息缩放在[0,1]之间。比较常见的归一化方法:
NMI(X;Y)=2I(X;Y)H(X)+H(Y)N M I(X ; Y)=2 \frac{I(X ; Y)}{H(X)+H(Y)} NMI(X;Y)=2H(X)+H(Y)I(X;Y)​

代码

python

# -*- coding:utf-8 -*-
'''
Created on 2017年10月28日@summary: 利用Python实现NMI计算@author: dreamhome
'''
import math
import numpy as np
from sklearn import metrics
def NMI(A,B):#样本点数total = len(A)A_ids = set(A)B_ids = set(B)#互信息计算MI = 0eps = 1.4e-45for idA in A_ids:for idB in B_ids:idAOccur = np.where(A==idA)idBOccur = np.where(B==idB)idABOccur = np.intersect1d(idAOccur,idBOccur)px = 1.0*len(idAOccur[0])/totalpy = 1.0*len(idBOccur[0])/totalpxy = 1.0*len(idABOccur)/totalMI = MI + pxy*math.log(pxy/(px*py)+eps,2)# 标准化互信息Hx = 0for idA in A_ids:idAOccurCount = 1.0*len(np.where(A==idA)[0])Hx = Hx - (idAOccurCount/total)*math.log(idAOccurCount/total+eps,2)Hy = 0for idB in B_ids:idBOccurCount = 1.0*len(np.where(B==idB)[0])Hy = Hy - (idBOccurCount/total)*math.log(idBOccurCount/total+eps,2)MIhat = 2.0*MI/(Hx+Hy)return MIhatif __name__ == '__main__':A = np.array([1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3])B = np.array([1,2,1,1,1,1,1,2,2,2,2,3,1,1,3,3,3])print NMI(A,B)print metrics.normalized_mutual_info_score(A,B)

标准化互信息NMI计算步骤及其Python实现 https://blog.csdn.net/DreamHome_S/article/details/78379635?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.baidujs&dist_request_id=1328603.9611.16149098780214877&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.baidujs

sklearn

from sklearn import metrics
A = [1, 1, 1, 2, 3, 3]
B = [1, 2, 3, 1, 2, 3]
result_NMI=metrics.normalized_mutual_info_score(A, B)
print("result_NMI:",result_NMI)

聚类的评价指标NMI标准化互信息+python实现+sklearn调库相关推荐

  1. 用Python的sklearn库进行PCA(主成分分析)

    在python的sklearn的库里面集成很多机器学习算法的库,其中也包括主成分分析的方法. 1.PCA算法的原理: PCA主要是用来数据降维,将高纬度的特征映射到低维度的特征,加快机器学习的速度.比 ...

  2. 聚类效果评价指标:MI, NMI, AMI(互信息,标准化互信息,调整互信息)

    聚类效果评价指标:MI, NMI, AMI(互信息,标准化互信息,调整互信息) 简介 在无监督学习中,常见的两种任务为聚类与降维.这里给出三个聚类效果评价指标:互信息,标准化互信息,调整互信息(MI, ...

  3. 标准化互信息NMI计算步骤及其Python实现

    Excellence is a continuous process and not an accident. 卓越是一个持续的过程而不是一个偶然事件. 原文地址:https://dreamhomes ...

  4. python计算互信息_标准化互信息NMI计算步骤及其Python实现

    Excellence is a continuous process and not an accident. 卓越是一个持续的过程而不是一个偶然事件. 标准化互信息NMI计算步骤及其Python实现 ...

  5. 互信息python代码_转:标准化互信息NMI计算步骤及其Python实现

    标准化互信息NMI计算步骤 Python 实现 代码: ''' 利用Python实现NMI计算''' import math import numpy as np from sklearn impor ...

  6. 社团划分评估-标准化互信息NMI的Python实现

    标准化互信息nmi是评估社团划分质量的一项重要指标,我在网上找了很久没有找到能用的,干脆自己参照公式写了一个,如果对你有帮助,请一键三连. 首先附上论文地址 NMI的公式定义如下: 最后附上代码: # ...

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

    原文地址: 一.已知真实社区划分结果 1.NMI指数,互信息和标准化互信息 具体公式和matlab代码参见博客,Python代码参加,C++代码参见 1 2 3 4 5 6 7 8 9 10 11 1 ...

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

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

  9. 聚类算法评价指标python实现_[ML] 聚类评价指标

    本文将介绍几个常见的聚类评价指标: Purity, NMI, RI, Precision(查准率), Recall(查全率), F, ARI, Accuracy(正确率). 好的聚类算法,一般要求类簇 ...

最新文章

  1. MacBook(m1)配置Python注意事项(自用,持续更新)
  2. Oracle TNSListener服务启动后自动停止问题
  3. 【★★★★★模板专区★★★★★】
  4. boolean类型_JS核心理论之《数据类型、类型转换、深浅拷贝与参数传递》
  5. 简述LINQ的发展历程
  6. js 的push方法
  7. jQuery als.js 跑马灯
  8. Slate轨道工具使用(一)—Track,Clip
  9. 和与余数的和同余理解_同余及同余特性
  10. 投稿经验分享之二:国际EI会议(可检索)
  11. 人民币对美元汇率中间价报6.7802元 上调167个基点
  12. 适合在企业网站展示企业发展历程的时间轴滑动特效源码
  13. ​力扣解法汇总954-二倍数对数组
  14. Verilog RTL 代码实战 01——半加器全加器
  15. Win7 未识别网络 的20种常见解决方案
  16. 【教程】扫描识别工具Dynamic Web TWAIN使用教程:条码读取器(上)
  17. JEDEC79-4翻译告一段落
  18. OA软件厂商的综合素质到底有多重要?
  19. java byte char io流_一文带你看懂JAVA IO流,史上最全面的IO教学
  20. au6989sn-gtd_GTD和OmniFocus 2-我的工作流程

热门文章

  1. python网络爬虫——CrawlSpider
  2. 2015下半年软件设计师考点,难点
  3. “System.BadImageFormatException”类型的未经处理的异常在 halcondotnet.dll 中发生
  4. motan源码分析六:客户端与服务器的通信层分析
  5. 大学有python专业吗-那个选错专业的大学生,后来去干嘛了?
  6. vs2015 CMake Recast库编译方式
  7. CityEngine之cga语法------------NIL()(结束循环)
  8. Ubuntu中jupyter使用(踩坑)
  9. MacBook上u盘无法格式化
  10. 学习笔记-《GPU 编程与CG 语言之阳春白雪下里巴人》