Python机器学习——聚类的有效性指标

  聚类有效性指标(Cluster Validity Index,CVI)用于度量聚类的效果。很显然,希望彼此相似的样本在一个簇,彼此不相似的样本尽量在不同的簇。也就是说:同一簇的样本彼此之间相似,不同簇之间的样本尽可能不同。

  聚类的性能指标分为两类:

  • 外部指标:该指标由聚类结果和某个参考模型进行比较而获得;
  • 内部指标:该指标由本身的聚类结果而得到,不利用任何参考模型;

外部指标

  给定数据集 D=x⃗ 1,x⃗ 2,...,x⃗ N D = x → 1 , x → 2 , . . . , x → N 。假设某个参考模型给出的簇划分为 C C ∗ ={ C1 C 1 ∗ , C2 C 2 ∗ ,…, Ck′′ C k " ∗ },其簇标记向量为 λ⃗  λ → ∗ 。若聚类算法给出的簇划分为 C= C = { C1,C2,...,CK C 1 , C 2 , . . . , C K },其簇标记向量为 λ⃗  λ → 。定义:
a=|SS|SS=[(x⃗ i,x⃗ j)|λi=λj,λi=λj,i<j] a = | S S | , S S = [ ( x → i , x → j ) | λ i = λ j , λ i ∗ = λ j ∗ , i < j ]
b=|SD|SD=[(x⃗ i,x⃗ j)|λi=λj,λiλj,i<j] b = | S D | , S D = [ ( x → i , x → j ) | λ i = λ j , λ i ∗ ≠ λ j ∗ , i < j ]
c=|DS|DS=[(x⃗ i,x⃗ j)|λiλj,λi=λj,i<j] c = | D S | , D S = [ ( x → i , x → j ) | λ i ≠ λ j , λ i ∗ = λ j ∗ , i < j ]
d=|DD|DD=[(x⃗ i,x⃗ j)|λiλj,λiλj,i<j] d = | D D | , D D = [ ( x → i , x → j ) | λ i ≠ λ j , λ i ∗ ≠ λ j ∗ , i < j ]
  其中,|.|表示集合元素的个数,各集合的意义如下:

  • SS S S :包含了同时隶属于 C C C C ∗ 的样本对;
  • SD S D :包含了隶属于 C C ,但是不隶属于 C C ∗ 的样本对;
  • DS D S :包含了不隶属于 C C ,但是隶属于 C C ∗ 的样本对;
  • DD D D :包含了既不隶属于 C C ,又不隶属于 C C ∗ 的样本对;

  由于每个样本对仅属于一个集合,因此有:

a+b+c+d=N(N1)2 a + b + c + d = N ( N − 1 ) 2
  使用上述定义式,可以有下面这些 外 部 指 标

  • Jaccard系数(Jaccard Cofficient,JC):

    JC=aa+b+c J C = a a + b + c
    它刻画了所有属于同一类的样本对(要么在 C C 中属于同一类,要么在 C C ∗ 中属于同一类),同时在 C,C C , C ∗ 中属于同一类的样本量的比值。

  • FM指数(Fowlkes and Mallows Index,FMI):

    FMI=aa+baa+c F M I = a a + b ⋅ a a + c
    它刻画的是:在 C C 中属于同一类的样本对中,同时属于 C C ∗ 的样本对的比例为 p1 p 1 ,在 C C ∗ 中属于同一类的样本对中,同时属于 C C 的样本对的比例为 p2 p 2 ,FMI就是 p1 p 1 p2 p 2 的几何平均。

  • Rand指数(Rand Index,RI)
    RI=2(a+d)N(N1) R I = 2 ( a + d ) N ( N − 1 )
    它刻画的是同时隶属 C,C C , C ∗ 的样本对与同时不隶属于 C,C C , C ∗ 的样本对之和占所有样本对的比例。
  • ARI指数(Adjusted Rand Index,ARI):
    ARI=RIE[RI]max(RI)E[RI] A R I = R I − E [ R I ] m a x ( R I ) − E [ R I ]
    使用RI时有个问题,就是对于随机聚类,RI不保证接近0(可能还很大)。而ARI指数就可以利用随机聚类情况下的RIE[RI]来解决这个问题.

  这些外部指标性能度量的结果都在[0,1]之间,这些值越大,说明聚类的性能越好

内部指标

  给定数据集 D= D = { x⃗ 1,x⃗ 1,...,x⃗ N x → 1 , x → 1 , . . . , x → N }。若聚类给出的簇划分为 C= C = { C1,C2,...,CK C 1 , C 2 , . . . , C K },定义
avg(Ck)=2|Ck|(|Ck1|)x⃗ i,x⃗ jCk,ijdistance(x⃗ i,x⃗ j)k=1,2,...,K a v g ( C k ) = 2 | C k | ( | C k − 1 | ) ∑ x → i , x → j ∈ C k , i ≠ j d i s t a n c e ( x → i , x → j ) , k = 1 , 2 , . . . , K
diam(Ck)=maxx⃗ i,x⃗ jCk,ijdistance(x⃗ i,x⃗ j)k=1,2,...,K d i a m ( C k ) = max x → i , x → j ∈ C k , i ≠ j d i s t a n c e ( x → i , x → j ) , k = 1 , 2 , . . . , K
dmin(Ck,Cl)=minx⃗ iCk,x⃗ jCldistance(x⃗ i,x⃗ j)k=1,2,...,K;kl d m i n ( C k , C l ) = min x → i ∈ C k , x → j ∈ C l d i s t a n c e ( x → i , x → j ) , k = 1 , 2 , . . . , K ; k ≠ l
dcen(Ck,Cl)=distance(μ⃗ k,μ⃗ l),k=1,2,...,K;kl d c e n ( C k , C l ) = d i s t a n c e ( μ → k , μ → l ) , k = 1 , 2 , . . . , K ; k ≠ l

  其中, distance(x⃗ i,x⃗ j) d i s t a n c e ( x → i , x → j ) 表示两点 x⃗ i,x⃗ j x → i , x → j 之间的距离; μ⃗ k μ → k 表示簇 Ck C k 的中心点, μ⃗ l μ → l 表示簇 Cl C l 的中心点; distance(μ⃗ k,μ⃗ l) d i s t a n c e ( μ → k , μ → l ) 表示簇 Ck,Cl C k , C l 的中心点之间的距离。上述定义的意义如下:

  • avg(Ck) a v g ( C k ) :簇 Ck C k 中每对样本之间的平均距离;
  • diam(Ck) d i a m ( C k ) :簇 Ck C k 中距离最远的两个点的距离;
  • dmin(Ck,Cl) d m i n ( C k , C l ) :簇 C)k,Cl C ) k , C l 之间最近的距离;
  • dcen(Ck,Cl) d c e n ( C k , C l ) :簇 Ck,Cl C k , C l 中心点之间的距离;

  使用上述定义式,可有以下的内部指标。

  • DB指数(Davies-Bouldin Index ,DBI):
    DBI=1Kk=1Kmaxkl(avg(Ck)+avg(Cl)dcen(Ck,Cl)) D B I = 1 K ∑ k = 1 K max k ≠ l ( a v g ( C k ) + a v g ( C l ) d c e n ( C k , C l ) )
    它刻画的是:给定两个簇,每个簇样本之间平均值之和比上两个簇的中心点之间的距离作为度量。然后考察该度量对所有簇的平均值。显然 DBI D B I 越小越好。如果每个簇样本之间的平均值越小(即簇内样本距离都很近),则 DBI D B I 越小;如果簇间中心点的距离越大(即簇样本距离互相都很远),则 DBI D B I 越小。
  • Dunn指数(Dunn Index,DI):
    DI=minkldmin(Ck,Cl)maxidiam(Ci) D I = m i n k ≠ l d m i n ( C k , C l ) m a x i d i a m ( C i )
    它刻画的是任意两个簇之间最近的距离的最小值,除以任意一个簇内距离最远的两个点的距离的最大值。显然 DI D I 越大越好。如果任意两个簇之间最近的距离的最小值越大(即簇间样本距离相互都很远),则 DI D I 越大;如果任意一个簇内距离最远的两个点的距离的最大值越小(即簇内样本距离都很近),则 DI D I 越大。

你可能感兴趣的:(数据挖掘,python)