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

聚类效果评价指标:MI,NMI,AMI (互信息,标准化互信息,调整互信息)
聚类效果评价指标:MI, NMI, AMI (互信息,标准化互信息,调整互信息)
简介
在⽆监督学习中,常见的两种任务为聚类与降维。这⾥给出三个聚类效果评价指标:互信息,标准化互信息,调整互信息(MI, NMI, AMI),分别给出它们的计算⽅法与代码。需要指出的是,这三个指标均需要已知数据点的真实标签。
Preliminaries and Notation
已知  个  维的数据,构成数据矩阵  ;对每个数据  ,其对应标签(label)为  ;
标签中共有  个不同的取值,或者说数据共有  类,其对应的标签组成向量  ;我们取⾃然数  ⾄  来为这  个数据点依次编号,并取  ,则有
其中  代表归属于第  类的数据集合;如对向量  ,则有
这⾥需要指出的是,如果整个数据集共有5类,则我们默认⽤⾃然数1⾄5来代表这5类;对于  ⽽⾔,其包含  类,则⽤⾃然数  ⾄  来代表这  个类别。
shuangwang所谓聚类问题,即为对原始数据集  进⾏⼀种划分;通过某种聚类算法(如DBSCAN、谱聚类等),我们可以得到⼀个对  的划分,即
类似地,我们有
其中  代表聚类结果中归属于第  类的数据集合。
信息熵与列联表(contingency table)
在介绍互信息之前,⾸先介绍⼀下⾹农熵(信息熵)和列联表(contingency table)。对上述标签向量  ,其⾹农熵(信息熵)可以被计算为:
其中对数函数的底常取  或⾃然对数 ;
N D X =[x ,x ,⋯,x ]∈12N R D ×N x ∈i R D ×1u ∈i R R R U =[u ,u ,⋯,u ]∈12N R N 1N N S =1,2,⋯,N {}S =U =i =1∪
R
i U ,U ,⋯,U {12R }
U i i U =[1,1,2,2,3,3,3]N =7,R =3,U =11,2,U ={}23,4,U ={}35,6,7{}
U R 1R R X X V =[v ,v ,⋯,v ]∈12N R N S =V =i =1∪
C
i V ,V ,⋯,V {12C }
V i i U ∈R N H(U )=−p log p i =1∑
R
i i
(1)
2e
为归属于第  类的数据个数占数据总量的⽐例,即
如对向量  ,则有  , ;
对向量  ,则有  , ;
对向量  ,则有  , ;不难发现,信息熵是⾮负的,因为  。
我们取矩阵  为真实标签向量  与预测标签向量  的列联表(contingency table),满⾜
其中  , 。如对向量  ,有
因此,
列联表为
钻井泥浆膨润土互信息(Mutual information)
互信息的计算公式如下:
p i i p =i N
U ∣i ∣(2)
U =[1,1,1]p =11H(U )=−1⋅log(1)=0U =[1,2,3]p =1p =2p =331
H(U )=−3⋅⋅31
log()=31
log 3U =[1,2,2]p =1,p =31
232
H(U )=−⋅31
log()−31
⋅32
log()=32
log 3−⋅32
log 20<p ≤i 1M ∈R R ×C U V m =ij U ∩V ∣i j ∣(3)
i =1,2,⋯,R j =1,2,⋯,C U =[1,1,2,2],V =[1,1,1,2]U 1V 1=1,2{}=1,2,3{}
U 2V 2=3,4{}=4{}
m 11m 12m 21m 22=U ∩V =1,2=2∣11∣∣{}∣=U ∩V =∅=0∣12∣∣∣=U ∩V =3=1∣21∣∣{}∣=U ∩V =4=1
∣22∣∣{}∣M =[210
1]
其中
如对向量  ,有
标准化互信息(NMI, Normalized Mutual Information)
通常采⽤NMI和AMI来作为衡量聚类效果的指标。标准化互信息的计算⽅法如下:
其中  可以为 / 函数;可以为⼏何平均,即  ;可以为算术平均,即  。
通常我们选取算术平均,则标准化互信息即可被计算为
调整互信息(AMI, Adjusted Mutual Information)
调整互信息的计算要复杂⼀些,其计算⽅法如下:
MI(U ,V )=
p log i =1
∑R
j =1∑
C
i ,j (p ×p i j p i ,j
)
(4)
p =i ,j =N
U ∩V ∣i j ∣N m ij
(5)
p =i ,p =N U ∣i ∣j N
V ∣j ∣U =[1,1,2,2],V =[1,1,1,2]p 1,1p 1,2p 2,1p 2,2=m /N =0.511=m /N =012=m /N =0.2521=m /N =0.25
22NMI(U ,V )=F H U ,H V (()())
MI(U ,V )
(6)
F (x ,x )12min max F (x ,x )=12x x 12F (x ,x )=
122x +x 12
NMI(U ,V )=2H U +H V ()()
MI(U ,V )
(7)
AMI(U ,V )=F H U ,H V −E MI(U ,V )(()()){}
MI(U ,V )−E MI(U ,V ){}
(8)
其中, 为互信息  的期望,计算⽅法为
其中  为  ;
分别为列联表  的第  ⾏和与第  列和,具体为
如果我们选取函数  为  函数,则调整互信息可被计算为
如果我们选取函数  为⼏何平均,则调整互信息可被计算为
如果我们选取函数  为算术平均,则调整互信息可被计算为
编程实现
Python中的 sklearn  库⾥有这三个指标的类,可以直接调⽤;matlab中似乎没有到现成的包,因此⾃⼰编写。
python
这⾥NMI和AMI的计算均采⽤算术平均; 函数的底为⾃然对数  。
E MI(U ,V ){}MI(U ,V )E MI(U ,V ){}i =1∑R j =1∑
C
=log k =a +b −N (i j )
+
∑min a ,b (i j )N k
(a ×b i j N ×k )N !k !a −k !b −k !N −a −b +k !
(i )(j )(i j )a !b !N −a !N −b !i j (i )(j )(9)
a +
b −N (i j )+
max 1,a +b −N (i j )a ,b i j M i j a =
m i j =1∑ij
b =
m j i =1∑
R ij
(10)
F (x ,x )12max AMI(U ,V )=max H U ,H V −E MI(U ,V )(()()){}
MI(U ,V )−E MI(U ,V ){}
两河文明
(11)
F (x ,x )12AMI(U ,V )=小鼠步态分析实验
−E MI(U ,V )H U ⋅H V ()(){}
MI(U ,V )−E MI(U ,V ){}(12)
F (x ,x )12AMI(U ,V )=H U +H V −E MI(U ,V )21
(()()){}
MI(U ,V )−E MI(U ,V ){}(13)
log e
ics.cluster import entropy, mutual_info_score, normalized_mutual_info_score, adjusted_mutual_info_score
MI =lambda x, y: mutual_info_score(x, y)
NMI =lambda x, y: normalized_mutual_info_score(x, y, average_method='arithmetic')
AMI =lambda x, y: adjusted_mutual_info_score(x, y, average_method='arithmetic')
A =[1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3]
B =[1,2,1,1,1,1,1,2,2,2,2,3,1,1,3,3,3]
#print(entropy(A))
#print(MI(A, B))
print(NMI(A, B))
print(AMI(A, B))
C =[1,1,2,2,3,3,3]
D =[1,1,1,2,1,1,1]
print(NMI(C, D))
print(AMI(C, D))
matlab
log e
这⾥的NMI与AMI的代码实现均采⽤的算术平均,  函数的底采⽤⾃然对数  。
函数⽂件:
NMI_AMI.m人造奶油生产工艺
function [NMI, AMI] = NMI_AMI(X, Y)
%NMI_AMI return NMI, AMI
% MI: mutual information
% H; entropy
% NMI: normalized mutual infomation
% AMI: adjusted mutual infomation
% NMI(X, Y) = MI(X, Y) / F(H(X), H(Y))
% AMI(X, Y) = (MI(X, Y) - EMI(X, Y)) / (F(H(X) + H(Y)) - EMI(X, Y))
% F(x, y) is a function, can be "mean", "max", "geometric", "arithmetic"
% here we both use arithmetric
NMI = 2 * MI(X, Y) / (H(X) + H(Y));
AMI = (MI(X, Y) - EMI(X, Y)) / (1/2 * (H(X) + H(Y)) - EMI(X, Y));
end陈启源
function [res] = MI(X, Y)
%MI mutual infomation
n = length(X);
X_list = unique(X);
Y_list = unique(Y);
res = 0;
for x = X_list
for y = Y_list
loc_x = find(X == x);
loc_y = find(Y == y);
loc_xy = intersect(loc_x, loc_y);
res = res + length(loc_xy) / n * log(length(loc_xy) / n / ((length(loc_x) / n) * (length(loc_y) / n)) + eps);
end
end
end
function [res] = H(X)

本文发布于:2024-09-22 10:23:07,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/204371.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:互信息   数据   聚类
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议