Excellence is a continuous process and not an accident.

卓越是一个持续的过程而不是一个偶然事件。

标准化互信息NMI计算步骤及其Python实现标准化互信息NMI具体定义可以参考另一篇博客:

https://smj2284672469.github.io/2017/10/27/community-detection-measures/#more

本文介绍其计算步骤和代码实现

假设对于17个样本点(v1,v2,...,v17)进行聚类:

某一种算法得到聚类结果为:

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]

问题:需要度量算法结果与标准结果之间的相似度,如果结果

2185a

越相似NMI值应接近1;如果算法结果很差则NMI值接近0。

根据公式计算MI的值其中X=unique(A)=[1 2 3] , Y=unique(B)=[1 2 3]:

MI(X,Y)=∑i=1|X|∑j=1|Y|P(i,j)log(P(i,j)P(i)P′(j))

首先计算上式分子中联合概率分布P(i,j)=|Xi∩Yj|N

P(1,1)=5/17,P(1,2)=1/17,P(1,3)=2/17

P(2,1)=1/17,P(2,2)=4/17,P(2,3)=0

P(3,1)=0,P(3,2)=1/17,P(3,3)=3/17

再计算分母中概率函数P(i)=Xi/N,P(i)为i的概率分布函数,P′(j)为j的概率分布函数:

对于P(i):

P(1)=8/17,P(2)=5/17,p(3)=4/17

对于P(j):

P′(1)=6/17,P′(2)=6/17,P′(3)=5/17

根据以上计算可以计算出MI的值。

至于标准化互信息使用第二个公式计算:

NMI(X,Y)=2MI(X,Y)H(X)+H(Y)

上式分母中H(X),H(Y)分别为X,Y的熵:

H(X)=−∑i=1|X|P(i)log(P(i));H(Y)=−∑j=1|Y|P′(j)log(P′(j))

对于上面的例子,根据公式计算熵如下:

H(X)=P(1)log2(P(1))+P(2)log2(P(2))+P(3)log2(P(3))

H(Y)=P′(1)log2(P′(1))+P′(2)log2(P′(2))+P′(3)log2(P′(3))

综上则可以计算出NMI的值。

代码实现以上计算过程:

可以直接调用scikit-learn包中集成的度量函数

自己编写函数实现计算过程

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 = 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 MIhat

if __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)

python计算互信息_标准化互信息NMI计算步骤及其Python实现相关推荐

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

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

  2. python计算互信息_邻域互信息的python实现

    互信息中,涉及到熵的概念,首先我们看一下熵如何用python实现. 首先,我们知道,世界的确定性越大,所获取到的信息就会越少,所以对应的信息熵也会越小.所以我们的信息度量是随着概率增加而单调递减的函数 ...

  3. 蒙特卡洛python求解派_用蒙特卡洛方法计算派-python和R语言

    标签: 用蒙特卡洛方法算pi-基于python和R语言 最近follow了MOOC上一门python课,开始学Python.同时,买来了概率论与数理统计,准备自学一下统计.(因为被鄙视过不是统计专业却 ...

  4. 边缘计算架构_多接入边缘计算框架与参考架构简介

    1. 引言 在2014年,欧洲电信标准化协会(European Telecommunications Standards Institute, ETSI)将边缘计算与移动通信网络融合,提出了移动边缘计 ...

  5. 给定经纬度计算距离_通过经纬度坐标计算距离的方法(经纬度距离计算)ZZ

    通过经纬度坐标计算距离的方法(经纬度距离计算) 最近在网上搜索"通过经纬度坐标计算距离的方法",发现网上大部分都是如下的代码: #define PI 3.14159265 stat ...

  6. python ide 最好_我在iPad上最好的Python IDE

    python ide 最好 Having finished my first year at university, and being left with very little to do thi ...

  7. python 神经网络工具_神经网络15分钟入门!使用python从零开始写一个两层神经网络...

    本篇是该系列的第三篇,建议在阅读本篇文章之前先看前两篇文章. 在本文中将使用python实现之前描述的两层神经网络,并完成所提出的"象限分类"的问题. 需要注意的是,虽然标题叫做神 ...

  8. 阿里云大学python教程下载_阿里大学开放 11 门免费 Python 视频课程

    Python 语言近几年越来越火,语言使用率占比节节攀升. 我们知道Python 现在稳居世界编程语言前三名,在 PYPL 语言流行指数上更是稳居第一,可见 python 的适用范围.受众基础.影响力 ...

  9. python redis缓存_第二百九十五节,python操作redis缓存-字符串类型

    python操作redis缓存-字符串类型 首先要安装redis-py模块 python连接redis方式,有两种连接方式,一种是直接连接,一张是通过连接池连接 注意:以后我们都用的连接池方式连接,直 ...

最新文章

  1. Visual SLAM
  2. 程序员的周末:纯野的一天
  3. 聊天软件系统测试用例,QQ聊天框测试用例设计
  4. python xml解析dom_如何解析python中表示xml.dom.minidom节点的字符串?
  5. 既要宽广,又要深邃,这也行
  6. Java 洛谷 P1482 Cantor表(升级版)
  7. 安装python第三方库
  8. mysql 临时表 创建和插入
  9. springmvc如何进行json格式转换及 json化日期格式
  10. 《数据库原理》课程设计报告
  11. JPG格式图片怎么减小体积?一招教你轻松压缩JPG图片
  12. python爬取网页数据软件,有哪些不错的爬虫软件是可以免费爬取网页数据的?
  13. 最快的Android TreeView出现了!
  14. onsubmit和submit()详解
  15. LMS151-10100单线激光雷达与RealSense双目相机的联合标定
  16. CVPR2020/UDA/图像翻译-Cross-domain Correspondence Learning for Exemplar-based Image Translation基于范例的跨域对应
  17. 找规律万能公式_万能公式:找规律什么的都弱爆了 | 死理性派小组 | 果壳网 科技有意思...
  18. 机器学习笔记之概率图模型(一)背景介绍
  19. Html5基础知识笔记
  20. linux API大全

热门文章

  1. 【NvRAM】apk中中读写nvram
  2. STM32模数转换器(ADC)
  3. 整型数组处理算法(十一)请实现一个函数:线段重叠。[风林火山]
  4. 现场直击 | 沈阳新技术交流会,实景三维再“出圈”
  5. 【报告分享】 中国饭店协会:2020中国餐饮业年度报告(附下载)
  6. 怎么打开手机的USB调试将手机连接到电脑
  7. 题解 P5022 【旅行】
  8. 有机纺织品GOTS认证咨询,审核员通过哪几方面验厂?
  9. 事件相关功能磁共振波谱技术(fMRS)
  10. Unity3D星际航行游戏完整开发过程