轮廓系数(Silhouette Coefficient)用来评估聚类的效果。但是,其缺陷是计算复杂度为O(n2),需要计算距离矩阵,那么当数据量上到百万,甚至千万级别时,计算开销会非常巨大(想想也是醉了,从来不敢在这个量级上计算轮廓系数)。现在讨论一种快速计算轮廓系数的方法,将复杂度降为O(n),同时简单的分析快速计算方法与原始方法的效果差异。

快速方法

大致思路是计算每个点与k个簇的平均中心点的距离的平方,使用这个距离表示每个点与簇的距离关系,而不是原始定义中使用每个点与每个簇的平均距离平方和。使用d1表示原始方法的欧式距离,d2表示快速计算方法,假设某个簇有n个点,任意点为b,如下

d1=1ni=1n(bci)2,d2=(b1ni=1nci)2

现在计算两个距离的差值,

Δ=d1d2=1ni=1n(bci)2(b1ni=1nci)2=1n2(ni=1nci(i=1nci)2)

根据柯西不等式变形式Δ0恒成立 所以,快速计算法计算的欧式距离永远小于原始计算方法

轮廓系数应用于Kmeans聚类评估

轮廓系数的计算公式如下

s(i)={1a(i)/b(i),if a(i)<b(i)0,if a(i)=b(i)b(i)/a(i)1,if a(i)>b(i)

其中a(i)是到本类的聚类,b(i)是到最近的其他簇的距离,由于kmeans算法,a(i)b(i)恒成立,所以s(i)0。但是由于快速算法的结果均比原始方法小,导致并不能明显的看出轮廓系数在两种计算方法上的大小关系,所以从目前来看,并不能否认快速计算方法与原始计算方法有明显的差异。

参考