标准化互信息NMI计算步骤及其Python实现
来源:互联网 发布:前端js模块化开发 编辑:程序博客网 时间:2024/05/20 06:31
Excellence is a continuous process and not an accident.
卓越是一个持续的过程而不是一个偶然事件。
标准化互信息NMI计算步骤及其Python实现
标准化互信息NMI具体定义可以参考另一篇博客:
https://smj2284672469.github.io/2017/10/27/community-detection-measures/#more
本文介绍其计算步骤和代码实现
假设对于17个样本点
某一种算法得到聚类结果为:
A=[1 2 1 1 1 1 1 2 2 2 2 3 1 1 3 3 3]
标准的聚类结果为:
B=[1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3]
问题:需要度量算法结果与标准结果之间的相似度,如果结果越相似NMI值应接近1;如果算法结果很差则NMI值接近0。
根据公式计算MI的值其中X=unique(A)=[1 2 3] , Y=unique(B)=[1 2 3]:
首先计算上式分子中联合概率分布
再计算分母中概率函数
对于
对于
根据以上计算可以计算出MI的值。
至于标准化互信息使用第二个公式计算:
上式分母中
对于上面的例子,根据公式计算熵如下:
综上则可以计算出NMI的值。
代码实现以上计算过程:
- 可以直接调用scikit-learn包中集成的度量函数
- 自己编写函数实现计算过程
Python代码实现如下(包含上述两种方式):
# -*- coding:utf-8 -*-'''Created on 2017年10月28日@summary: 利用Python实现NMI计算@author: dreamhome'''import mathimport numpy as npfrom sklearn import metricsdef NMI(A,B): #样本点数 total = len(A) A_ids = set(A) B_ids = set(B) #互信息计算 MI = 0 eps = 1.4e-45 for 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])/total py = 1.0*len(idBOccur[0])/total pxy = 1.0*len(idABOccur)/total MI = MI + pxy*math.log(pxy/(px*py)+eps,2) # 标准化互信息 Hx = 0 for idA in A_ids: idAOccurCount = 1.0*len(np.where(A==idA)[0]) Hx = Hx - (idAOccurCount/total)*math.log(idAOccurCount/total+eps,2) Hy = 0 for 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实现
- NMI(标准化互信息) python实现
- 标准化互信息NMI的实现源码。
- 社区发现的3个评估指标:标准化互信息NMI,ARI指标,以及模块度(modularity)
- 图像相似性度量——互信息计算Matlab实现
- 独立向量信号互信息计算——Matlab实现
- 列向量互信息计算
- Mutual information and Normalized Mutual information 互信息和标准化互信息
- Mutual information and Normalized Mutual information 互信息和标准化互信息
- Mutual information and Normalized Mutual information 互信息和标准化互信息
- Mutual information and Normalized Mutual information 互信息和标准化互信息
- MATLAB计算图像互信息值
- opencv计算图像互信息熵
- opencv计算图像互信息熵
- ssh互信详细步骤
- Purity、NMI、RI、Precision、Recall、F值,聚类指标的计算JAVA实现。
- 聚类︱python实现 六大 分群质量评估指标(兰德系数、互信息、轮廓系数)
- 互信息
- 浅谈Java编程中的内存泄露问题
- 每日产品辣评:丑出境界,苹果发布史上最贵充电宝
- Unity-Unity编辑器Part5
- 新战场,中国快递行业的航空梦
- Uber 董事会今日投票选 CEO,最关键人选却在此时宣布退出
- 标准化互信息NMI计算步骤及其Python实现
- 人命优先于动物!德国首个无人驾驶道德指引出台
- Java:switch()
- 脑机接口公司Neuralink融资2700万美元,马斯克否认
- 阿里巴巴修改用户服务协议;京东拟在北京南六环试点无人机送快递:Uber 今日投票选 CEO,候选人却宣布退出| 雷锋早报
- 独家 | 人工智能行业薪酬曝光,是时候转行了
- 京东拟申请在北京南六环试点:用无人机送快递
- MIT研究员使用无人机跟踪仓库库存
- 创建“Hello World“图形用户界面