轮廓 (聚类)

来自testwiki
imported>虹色分子2022年5月22日 (日) 17:05的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

在机器学习与数据挖掘领域,轮廓指的是一种反映数据聚类结果一致性的方法,可以用于评估聚类后簇与簇之间的离散程度。[1]轮廓的取值范围为[-1, +1],如果某一样本的轮廓接近1,则说明样本聚类结果合理;如果接近-1,则说明其更应该分类到其他的簇;如果轮廓近似为0,则说明该样本在两个簇的边界上。所有样本轮廓的均值称为聚类结果的轮廓系数(Silhouette Coefficiency),是该聚类是否合理、有效的度量。

定义

该图显示了Orange数据挖掘套件渲染的动物园数据集中的三种动物的轮廓。 在图底部的轮廓值反映了该数据集中海豚和鼠海豚是离群值(outlier)

假设某一数据集使用如k-means等聚类方法分成了k 个簇:

对于某一属于簇Ci样本i,记为 iCi ,设d(i,j)为样本ij之间的距离,求算样本i与其他样本之间的平均距离的公式如下(由于不计算样本与自身的距离d(i,i),故计算平均值时样本总数为|Ci|1):

a(i)=1|Ci|1jCi,ijd(i,j)

上述公式结果记为a(i),它反映了样本i当前聚类结果的优劣(值越小,聚类结果越好)。

然后,我们定义样本与某簇Ck的平均相异性为与样本i距离簇的平均值i到簇Ck内所有样本的距离均值 (CkCi),则对于样本 iCi,有i最小平均距离b(i)对应的簇Ck,我们称其为i的“相邻簇”:

b(i)=minki1|Ck|jCkd(i,j)

结合上述内容,我们定义i的轮廓值为:

s(i)=b(i)a(i)max{a(i),b(i)}

等效为:

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)

对于上述定义,显然1s(i)1.

为了防止簇数量暴增,对于仅有一个样本的簇(|Ci|=1),定义其s(i)=0a(i)反映了i与其所属簇的距离,较小的a(i)值说明其与所属簇的关系紧密;而较大的b(i)反映了i与其他簇关系疏远;故为提高s(i)(或称为优化聚类结果),我们需要使a(i)b(i)[2]

考夫曼(Kaufman)等人定义了轮廓系数(silhouette coefficient )的概念——在某个数据集的有限种聚类方法中,平均s(i)的最大值[3]

SC=maxks~(k)

上式中s~(k)代表被分为k个簇后该数据集的平均s(i)


评价

轮廓系数一般不能用于横向评价多种聚类方法。凸簇(如经由DBSCAN方法得出的簇)的轮廓系数一般高于其他类型的簇。

途中蓝色线条是DBSCAN的轮廓系数,随着参数变化其SC迅速增大。然而实际聚类结果很差。

另见

  • Davies–Bouldin指数
  • k-medoids
  • 如何确定数据集中有多少簇

参考文献

Template:Reflist