聚类指标ACC和Purity

聚类的评价指标ACC与purity有相似的地方,在一些情况下二者的数值会相等,而它们又不是一个东西

ACC

聚类准确率,假设有 N N N个样本,第 i i i个样本聚类产生的标签是 p i p_i pi,真实标签是 y i y_i yi,那么
A C C = 1 N ∑ i N y i = m a p ( p i ) ACC = \frac{1}{N}\sum^N_i{y_i = map(p_i)} ACC=N1iNyi=map(pi)
其中 m a p ( ⋅ ) map(\cdot) map()表示聚类标签的再分配,一般采用匈牙利算法实现,直观的一个例子如下:
y = [ 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 ] y = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3] y=[1,1,1,1,1,2,2,2,2,2,3,3,3,3,3]
p = [ 2 , 2 , 2 , 3 , 1 , 2 , 3 , 3 , 3 , 3 , 1 , 1 , 2 , 2 , 3 ] p = [2,2,2,3,1,2,3,3,3,3,1,1,2,2,3] p=[2,2,2,3,1,2,3,3,3,3,1,1,2,2,3]
那么,对于第一类,聚类标签中标签2最多,那么真实标签1和聚类标签2匹配,此时匹配了3个,而且聚类标签2不能在匹配给其他真实标签了,第二类显然是和聚类标签3匹配,个数为4,第三类就只能和聚类标签1匹配,个数为2,总计匹配到9个,那么 A C C = 9 15 = 0.67 ACC = \frac{9}{15} = 0.67 ACC=159=0.67

上面是一种简单的情况,实际上匈牙利算法在这里的作用是要找到一种聚类标签最佳匹配使得匹配到的个数(上式的分子)最大。

Purity

基于以上,假设共聚出来 C C C个簇,每一类是 I I I,那么 p u r i t y purity purity的定义如下:
p u r i t y = 1 N ∑ I C m a x ∣ P I ⋂ Y J ∣ purity = \frac{1}{N}\sum^C_Imax|P_I\bigcap Y_J| purity=N1ICmaxPIYJ
写的有点乱,简单来说就是,每一个簇,对应的标签中哪个最多就认为是属于哪个类,上面的例子来说,将 p p p排序,并与 y y y对应:
y = [ 1 , 3 , 3 , 1 , 1 , 1 , 2 , 3 , 3 , 1 , 2 , 2 , 2 , 2 , 3 ] y = [1,3,3,1,1,1,2,3,3,1,2,2,2,2,3] y=[1,3,3,1,1,1,2,3,3,1,2,2,2,2,3]
p = [ 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 ] p = [1,1,1,2,2,2,2,2,2,3,3,3,3,3,3] p=[1,1,1,2,2,2,2,2,2,3,3,3,3,3,3]
那么簇1对应类别3,匹配到的个数为2,簇2匹配到的是1,个数3,簇3匹配2,个数是4,那么 p u r i t y = 9 15 = 0.67 purity = \frac{9}{15} = 0.67 purity=159=0.67,和 A C C ACC ACC一样!

区别

那么,什么时候不一样呢?如下面一个极端的例子:
y = [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 3 ] y = [1,1,1,1,1,1,1,1,1,1,1,1,1,2,3] y=[1,1,1,1,1,1,1,1,1,1,1,1,1,2,3]
p = [ 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 ] p = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3] p=[1,1,1,1,1,2,2,2,2,2,3,3,3,3,3]
按照 A C C ACC ACC,类别1匹配到的是1(或者2),个数5,类别2匹配的是3,类别3只能匹配3但3已经被类别2匹配,那么它的匹配个数为0,所以, A C C = 0.4 ACC = 0.4 ACC=0.4

那么, p u r i t y purity purity呢,簇1对应第1类,簇2对应的也是1,簇3也是!那么 p u r i t y = 13 15 = 0.87 purity = \frac{13}{15} = 0.87 purity=1513=0.87

你可能感兴趣的:(聚类,机器学习,算法)