聚类的评价指标NMI标准化互信息+python实现+sklearn调库
聚类的评价指标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)logp(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)logp(x)q(x)KL(p∥q)=∫p(x)logp(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)logp(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调库相关推荐
- 用Python的sklearn库进行PCA(主成分分析)
在python的sklearn的库里面集成很多机器学习算法的库,其中也包括主成分分析的方法. 1.PCA算法的原理: PCA主要是用来数据降维,将高纬度的特征映射到低维度的特征,加快机器学习的速度.比 ...
- 聚类效果评价指标:MI, NMI, AMI(互信息,标准化互信息,调整互信息)
聚类效果评价指标:MI, NMI, AMI(互信息,标准化互信息,调整互信息) 简介 在无监督学习中,常见的两种任务为聚类与降维.这里给出三个聚类效果评价指标:互信息,标准化互信息,调整互信息(MI, ...
- 标准化互信息NMI计算步骤及其Python实现
Excellence is a continuous process and not an accident. 卓越是一个持续的过程而不是一个偶然事件. 原文地址:https://dreamhomes ...
- python计算互信息_标准化互信息NMI计算步骤及其Python实现
Excellence is a continuous process and not an accident. 卓越是一个持续的过程而不是一个偶然事件. 标准化互信息NMI计算步骤及其Python实现 ...
- 互信息python代码_转:标准化互信息NMI计算步骤及其Python实现
标准化互信息NMI计算步骤 Python 实现 代码: ''' 利用Python实现NMI计算''' import math import numpy as np from sklearn impor ...
- 社团划分评估-标准化互信息NMI的Python实现
标准化互信息nmi是评估社团划分质量的一项重要指标,我在网上找了很久没有找到能用的,干脆自己参照公式写了一个,如果对你有帮助,请一键三连. 首先附上论文地址 NMI的公式定义如下: 最后附上代码: # ...
- 社区发现的3个评估指标:标准化互信息NMI,ARI指标,以及模块度(modularity)
原文地址: 一.已知真实社区划分结果 1.NMI指数,互信息和标准化互信息 具体公式和matlab代码参见博客,Python代码参加,C++代码参见 1 2 3 4 5 6 7 8 9 10 11 1 ...
- 社区发现的3个评估指标:标准化互信息NMI,ARI指标,以及模块度(modularity)...
转载请注明出处:http://www.cnblogs.com/bethansy/p/6890972.html 一.已知真实社区划分结果 1.NMI指数,互信息和标准化互信息 具体公式和matlab代码 ...
- 聚类算法评价指标python实现_[ML] 聚类评价指标
本文将介绍几个常见的聚类评价指标: Purity, NMI, RI, Precision(查准率), Recall(查全率), F, ARI, Accuracy(正确率). 好的聚类算法,一般要求类簇 ...
最新文章
- MacBook(m1)配置Python注意事项(自用,持续更新)
- Oracle TNSListener服务启动后自动停止问题
- 【★★★★★模板专区★★★★★】
- boolean类型_JS核心理论之《数据类型、类型转换、深浅拷贝与参数传递》
- 简述LINQ的发展历程
- js 的push方法
- jQuery als.js 跑马灯
- Slate轨道工具使用(一)—Track,Clip
- 和与余数的和同余理解_同余及同余特性
- 投稿经验分享之二:国际EI会议(可检索)
- 人民币对美元汇率中间价报6.7802元 上调167个基点
- 适合在企业网站展示企业发展历程的时间轴滑动特效源码
- ​力扣解法汇总954-二倍数对数组
- Verilog RTL 代码实战 01——半加器全加器
- Win7 未识别网络 的20种常见解决方案
- 【教程】扫描识别工具Dynamic Web TWAIN使用教程:条码读取器(上)
- JEDEC79-4翻译告一段落
- OA软件厂商的综合素质到底有多重要?
- java byte char io流_一文带你看懂JAVA IO流,史上最全面的IO教学
- au6989sn-gtd_GTD和OmniFocus 2-我的工作流程
热门文章
- python网络爬虫——CrawlSpider
- 2015下半年软件设计师考点,难点
- “System.BadImageFormatException”类型的未经处理的异常在 halcondotnet.dll 中发生
- motan源码分析六:客户端与服务器的通信层分析
- 大学有python专业吗-那个选错专业的大学生,后来去干嘛了?
- vs2015 CMake Recast库编译方式
- CityEngine之cga语法------------NIL()(结束循环)
- Ubuntu中jupyter使用(踩坑)
- MacBook上u盘无法格式化
- 学习笔记-《GPU 编程与CG 语言之阳春白雪下里巴人》