好的聚类算法一般要求类簇具有高的类内(intra-cluster)相似度和低的(inter-cluster)相似度。
聚类算法有外部(External)评价指标和内部(Internal)评价指标两种,外部评价指标需要借助数据真实情况进行对比分析,内部评价指标不需要其他数据就可以进行指标的评估。
设有 N N N个 p p p维数据 X = [ x 1 , x 2 , ⋯ , x N ] T ∈ R N × p X=[x_1,x_2,\cdots,x_N]^T\in\mathbb{R}^{N\times p} X=[x1,x2,⋯,xN]T∈RN×p,真实数据共有 R R R簇 { U 1 , U 2 , ⋯ , U R } \{U_1,U_2,\cdots,U_R\} {U1,U2,⋯,UR},聚类算法将数据划分为 J J J簇 { V 1 , V 2 , ⋯ , V J } \{V_1,V_2,\cdots,V_J\} {V1,V2,⋯,VJ}。
Purity
P u r i t y ( U , V ) = 1 N ∑ k max j ∣ u k ∩ v j ∣ Purity(U,V) = \frac{1}{N}\sum_{k}\max_{j}|u_k\cap v_j| Purity(U,V)=N1k∑jmax∣uk∩vj∣
P u r i t y Purity Purity按照以下思路计算,对聚类算法得到的每一个簇,将其中样本数目最多的真实簇作为该簇的类别,并使用最大的样本数为该簇记分,最后将所有簇之和归一化。
举例来说,x, o ,
◊
\Diamond
◊是数据真实的三个类别,聚类算法将这些数据点划分为
c
l
u
s
t
e
r
1
cluster1
cluster1,
c
l
u
s
t
e
r
2
cluster2
cluster2,
c
l
u
s
t
e
r
3
cluster3
cluster3三类,在
c
l
u
s
t
e
r
1
cluster 1
cluster1 中 class x 数目最多为 5,在
c
l
u
s
t
e
r
2
cluster 2
cluster2中class o 数目最多为 4,在
c
l
u
s
t
e
r
3
cluster 3
cluster3中 class
◊
\Diamond
◊数目最多为 3。因此:
P
u
r
i
t
y
=
1
17
×
(
5
+
4
+
3
)
≈
0.7059
Purity=\frac{1}{17}\times(5+4+3)\approx0.7059
Purity=171×(5+4+3)≈0.7059
- P u r i t y ∈ [ 0 , 1 ] Purity\in[0,1] Purity∈[0,1],越接近1表示聚类结果越好。
- 该值无法用于权衡聚类质量与簇个数之间的关系。
互信息、标准化互信息、调整互信息
信息熵与列联表
对于标签向量
U
U
U,其信息熵为
H
(
U
)
=
−
∑
i
=
1
R
p
i
ln
p
i
=
−
∑
i
=
1
R
∣
U
i
∣
N
ln
∣
U
i
∣
N
H(U)=-\sum_{i=1}^Rp_i\ln p_i=-\sum_{i=1}^R\frac{|U_i|}{N}\ln \frac{|U_i|}{N}
H(U)=−i=1∑Rpilnpi=−i=1∑RN∣Ui∣lnN∣Ui∣
其中 p i = ∣ U i ∣ N p_i=\frac{|U_i|}{N} pi=N∣Ui∣表示第 i i i 簇的数据个数占比。
取矩阵
M
∈
R
R
×
J
M\in\mathbb{R}^{R\times J}
M∈RR×J为真实标签向量
U
U
U与预测标签向量的列联表,
M
i
j
=
∣
U
i
∩
V
j
∣
M_{ij}=|U_i\cap V_j|
Mij=∣Ui∩Vj∣
举例来说,对于
U
=
[
1
,
1
,
2
,
2
]
,
V
=
[
1
,
1
,
1
,
2
]
U=[1,1,2,2],V=[1,1,1,2]
U=[1,1,2,2],V=[1,1,1,2],有
U
1
=
{
1
,
2
}
,
U
2
=
{
3
,
4
}
,
V
1
=
{
1
,
2
,
3
}
,
V
2
=
{
4
}
U_1=\{1,2\},\quad U_2=\{3,4\},\quad V_1=\{1,2,3\},\quad V_2=\{4\}
U1={1,2},U2={3,4},V1={1,2,3},V2={4}
则
m
11
=
∣
{
1
,
2
}
∣
=
2
,
m
12
=
∣
∅
∣
=
0
,
m
21
=
∣
{
3
}
∣
=
1
,
m
22
=
∣
{
4
}
∣
=
1
m_{11}=|\{1,2\}|=2,\quad m_{12}=|\emptyset|=0,\quad m_{21}=|\{3\}|=1,\quad m_{22}=|\{4\}|=1
m11=∣{1,2}∣=2,m12=∣∅∣=0,m21=∣{3}∣=1,m22=∣{4}∣=1
列联表为
M
=
[
2
0
1
1
]
M=\left[\begin{matrix} 2&0\\ 1&1\\ \end{matrix}\right]
M=[2101]
互信息(Mutual information, MI)
互信息用来衡量两个数据分布的吻合程度。
M
I
(
U
,
V
)
=
H
(
V
)
−
H
(
V
∣
U
)
=
∑
i
=
1
R
∑
j
=
1
J
p
i
j
ln
p
i
j
p
i
p
j
MI(U,V)=H(V)-H(V|U)=\sum_{i=1}^R\sum_{j=1}^Jp_{ij}\ln\frac{p_{ij}}{p_ip_j}
MI(U,V)=H(V)−H(V∣U)=i=1∑Rj=1∑Jpijlnpipjpij
其中
p
i
=
∣
U
i
∣
N
p_i=\frac{|U_i|}{N}
pi=N∣Ui∣,
p
j
=
∣
V
j
∣
N
p_j=\frac{|V_j|}{N}
pj=N∣Vj∣,
p
i
j
=
∣
m
i
j
∣
N
p_{ij}=\frac{|m_{ij}|}{N}
pij=N∣mij∣
- M I ∈ [ 0 , 1 ] MI\in[0,1] MI∈[0,1],取值越大,表明聚类结果与真实情况越吻合。
标准化互信息(Normalized Mutual Information, NMI)
N M I ( U , V ) = M I ( U , V ) F ( H ( U ) , H ( V ) ) NMI(U,V)=\frac{MI(U,V)}{F(H(U),H(V))} NMI(U,V)=F(H(U),H(V))MI(U,V)
其中 F ( x 1 , x 2 ) F(x_1,x_2) F(x1,x2)可以是min函数、max函数,也可以是几何平均 F ( x 1 , x 2 ) = x 1 x 2 F(x_1,x_2)=\sqrt{x_1x_2} F(x1,x2)=x1x2,也可以是算术平均 F ( x 1 , x 2 ) = 1 2 ( x 1 + x 2 ) F(x_1,x_2)=\frac{1}{2}(x_1+x_2) F(x1,x2)=21(x1+x2)。
- N M I ∈ [ 0 , 1 ] NMI\in[0,1] NMI∈[0,1],取值越大,表明聚类结果与真实情况越吻合。
调整互信息(Adjusted Mutual Information, AMI)
MI(互信息指数)和NMI(标准化的互信息指数)不符合簇向量随机分配的理论,即随着分配簇的个数增加,MI和NMI亦会趋向于增加。
N
M
I
(
U
,
V
)
=
M
I
(
U
,
V
)
−
E
[
M
I
(
U
,
V
)
]
F
(
H
(
U
)
,
H
(
V
)
)
−
E
[
M
I
(
U
,
V
)
]
NMI(U,V)=\frac{MI(U,V)-E[MI(U,V)]}{F(H(U),H(V))-E[MI(U,V)]}
NMI(U,V)=F(H(U),H(V))−E[MI(U,V)]MI(U,V)−E[MI(U,V)]
其中
E
[
M
I
(
U
,
V
)
]
E[MI(U,V)]
E[MI(U,V)]为互信息
M
I
(
U
,
V
)
MI(U,V)
MI(U,V)的期望,
E
[
M
I
(
U
,
V
)
]
=
∑
i
=
1
R
∑
j
=
1
J
∑
k
=
(
a
i
+
b
j
−
N
)
+
m
i
n
(
a
i
,
b
j
)
k
N
ln
(
N
k
a
i
b
j
)
a
i
!
b
j
!
(
N
−
a
i
)
!
(
N
−
b
j
)
!
N
!
k
!
(
a
i
−
k
)
!
(
b
j
−
k
)
!
(
N
−
a
i
−
b
j
+
k
)
!
E[MI(U,V)]=\sum_{i=1}^R\sum_{j=1}^J\sum_{k=(a_i+b_j-N)^+}^{min(a_i,b_j)}\frac{k}{N}\ln(\frac{Nk}{a_ib_j})\frac{a_i!b_j!(N-a_i)!(N-b_j)!}{N!k!(a_i-k)!(b_j-k)!(N-a_i-b_j+k)!}
E[MI(U,V)]=i=1∑Rj=1∑Jk=(ai+bj−N)+∑min(ai,bj)Nkln(aibjNk)N!k!(ai−k)!(bj−k)!(N−ai−bj+k)!ai!bj!(N−ai)!(N−bj)!
其中
(
a
i
+
b
j
−
N
)
+
=
max
(
1
,
a
i
+
b
j
−
N
)
(a_i+b_j-N)^+=\max(1,a_i+b_j-N)
(ai+bj−N)+=max(1,ai+bj−N),
a
i
,
b
j
a_i,b_j
ai,bj分别表示列联表
M
M
M的第
i
i
i 行和第
j
j
j 列之和,
a
i
=
∑
j
=
1
J
m
i
j
,
b
j
=
∑
i
=
1
R
m
i
j
a_i=\sum_{j=1}^Jm_{ij},\quad b_j=\sum_{i=1}^Rm_{ij}
ai=j=1∑Jmij,bj=i=1∑Rmij
- A M I ∈ [ − 1 , 1 ] AMI\in[-1,1] AMI∈[−1,1],取值越大,表明聚类结果与真实情况越吻合。
Python代码
from sklearn.metrics.cluster import entropy, mutual_info_score, normalized_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')
兰德指数与调整兰德指数
兰德指数(Rand Index, RI)
兰德指数将聚类看成是一系列的决策过程,即对文档集上所有 C N 2 = N ( N − 1 ) / 2 C_N^2=N(N-1)/2 CN2=N(N−1)/2 个文档对进行决策。当且仅当两篇文档相似时,我们将它们归入同一簇中。
正确决策:
- TP 将两篇相似文档归入一个簇 (同 - 同);
- TN 将两篇不相似的文档归入不同的簇 (不同 - 不同)。
错误决策:
- FP 将两篇不相似的文档归入同一簇 (不同 - 同);
- FN 将两篇相似的文档归入不同簇 (同- 不同) (worse)。
RI 则是计算正确决策的比率
R
I
=
T
P
+
T
N
T
P
+
F
P
+
T
N
+
F
N
=
T
P
+
T
N
C
N
2
RI=\frac{TP+TN}{TP+FP+TN+FN}=\frac{TP+TN}{C_N^2}
RI=TP+FP+TN+FNTP+TN=CN2TP+TN
- R I ∈ [ 0 , 1 ] RI\in[0,1] RI∈[0,1],取值越大,表明聚类结果与真实情况越吻合。
调整兰德指数(Adjusted Rand Index, ARI)
RI 的问题在于对两个随机的划分, 其 RI 值不是一个接近于 0 的常数。ARI解决了RI不能很好的描述随机分配簇类标记向量的相似度问题。
A
R
I
=
R
I
−
E
[
R
I
]
max
(
R
I
)
−
E
[
R
I
]
ARI=\frac{RI-E[RI]}{\max(RI)-E[RI]}
ARI=max(RI)−E[RI]RI−E[RI]
- A R I ∈ [ − 1 , 1 ] ARI\in[-1,1] ARI∈[−1,1],取值越大,表明聚类结果与真实情况越吻合。
Python代码
from sklearn.metrics.cluster import adjusted_mutual_info_score
ARI = lambda x, y: adjusted_mutual_info_score(x, y)
聚类精确度(Accuracy, AC)
A
C
=
∑
i
=
1
N
δ
(
s
i
,
m
a
p
(
r
i
)
)
N
AC=\frac{\sum_{i=1}^N\delta(s_i,map(r_i))}{N}
AC=N∑i=1Nδ(si,map(ri))
其中
r
i
,
s
i
r_i,s_i
ri,si分别表示数据
x
i
x_i
xi所对应的获得的标签和真实标签,
δ
(
⋅
)
\delta(\cdot)
δ(⋅)为指示函数
δ
(
x
,
y
)
=
{
1
x
=
y
0
o
t
h
e
r
w
i
s
e
\delta(x,y)=\begin{cases} 1&x=y\\ 0&otherwise \end{cases}
δ(x,y)={10x=yotherwise
而式中的 map 则表示最佳类标的重现分配,以才能保证统计的正确。一般的该最佳重分配可以通过匈牙利算法 (Kuhn-Munkres or Hungarian Algorithm) 实现,从而在多项式时间内求解该任务(标签)分配问题。
[ML] 聚类评价指标
聚类效果评价指标:MI, NMI, AMI(互信息,标准化互信息,调整互信息)
聚类算法的评价指标
聚类︱python实现 六大 分群质量评估指标(兰德系数、互信息、轮廓系数)