在机器学习与数据挖掘领域,轮廓 指的是一种反映数据聚类 结果一致性的方法,可以用于评估聚类后簇与簇之间的离散程度。[ 1] 轮廓的取值范围为[-1, +1],如果某一样本的轮廓接近1,则说明样本聚类结果合理;如果接近-1,则说明其更应该分类到其他的簇;如果轮廓近似为0,则说明该样本在两个簇的边界上。所有样本轮廓的均值称为聚类结果的轮廓系数(Silhouette Coefficiency),是该聚类是否合理、有效的度量。
该图显示了Orange数据挖掘套件渲染的动物园数据集中的三种动物的轮廓。 在图底部的轮廓值反映了该数据集中海豚和鼠海豚是离群值(outlier)
假设某一数据集使用如k-means 等聚类方法分成了
k
{\displaystyle k}
个簇:
对于某一属于簇
C
i
{\displaystyle C_{i}}
样本
i
{\displaystyle i}
,记为
i
∈
C
i
{\displaystyle i\in C_{i}}
,设
d
(
i
,
j
)
{\displaystyle d(i,j)}
为样本
i
{\displaystyle i}
与
j
{\displaystyle j}
之间的距离,求算样本
i
{\displaystyle i}
与其他样本之间的平均距离的公式如下(由于不计算样本与自身的距离
d
(
i
,
i
)
{\displaystyle d(i,i)}
,故计算平均值时样本总数为
|
C
i
|
−
1
{\displaystyle |C_{i}|-1}
):
a
(
i
)
=
1
|
C
i
|
−
1
∑
j
∈
C
i
,
i
≠
j
d
(
i
,
j
)
{\displaystyle a(i)={\frac {1}{|C_{i}|-1}}\sum _{j\in C_{i},i\neq j}d(i,j)}
上述公式结果记为
a
(
i
)
{\displaystyle a(i)}
,它反映了样本
i
{\displaystyle i}
当前聚类结果的优劣(值越小,聚类结果越好)。
然后,我们定义样本与某簇
C
k
{\displaystyle C_{k}}
的平均相异性为与样本
i
{\displaystyle i}
距离簇的平均值
i
{\displaystyle i}
到簇
C
k
{\displaystyle C_{k}}
内所有样本的距离均值 (
C
k
≠
C
i
{\displaystyle C_{k}\neq C_{i}}
),则对于样本
i
∈
C
i
{\displaystyle i\in C_{i}}
,有
i
{\displaystyle i}
最小平均距离
b
(
i
)
{\displaystyle b(i)}
对应的簇
C
k
{\displaystyle C_{k}}
,我们称其为
i
{\displaystyle i}
的“相邻簇”:
b
(
i
)
=
min
k
≠
i
1
|
C
k
|
∑
j
∈
C
k
d
(
i
,
j
)
{\displaystyle b(i)=\min _{k\neq i}{\frac {1}{|C_{k}|}}\sum _{j\in C_{k}}d(i,j)}
结合上述内容,我们定义
i
{\displaystyle i}
的轮廓值为:
s
(
i
)
=
b
(
i
)
−
a
(
i
)
max
{
a
(
i
)
,
b
(
i
)
}
{\displaystyle s(i)={\frac {b(i)-a(i)}{\max\{a(i),b(i)\}}}}
等效为:
s
(
i
)
=
{
1
−
a
(
i
)
/
b
(
i
)
,
if
a
(
i
)
<
b
(
i
)
0
,
if
a
(
i
)
=
b
(
i
)
b
(
i
)
/
a
(
i
)
−
1
,
if
a
(
i
)
>
b
(
i
)
{\displaystyle s(i)={\begin{cases}1-a(i)/b(i),&{\mbox{if }}a(i)<b(i)\\0,&{\mbox{if }}a(i)=b(i)\\b(i)/a(i)-1,&{\mbox{if }}a(i)>b(i)\\\end{cases}}}
对于上述定义,显然
−
1
≤
s
(
i
)
≤
1.
{\displaystyle -1\leq s(i)\leq 1.}
为了防止簇数量暴增,对于仅有一个样本的簇(
|
C
i
|
=
1
{\displaystyle |C_{i}|=1}
),定义其
s
(
i
)
=
0
{\displaystyle s(i)=0}
。
a
(
i
)
{\displaystyle a(i)}
反映了
i
{\displaystyle i}
与其所属簇的距离,较小的
a
(
i
)
{\displaystyle a(i)}
值说明其与所属簇的关系紧密;而较大的
b
(
i
)
{\displaystyle b(i)}
反映了
i
{\displaystyle i}
与其他簇关系疏远;故为提高
s
(
i
)
{\displaystyle s(i)}
(或称为优化聚类结果),我们需要使
a
(
i
)
≪
b
(
i
)
{\displaystyle a(i)\ll b(i)}
[ 2] 。
考夫曼(Kaufman)等人定义了轮廓系数(silhouette coefficient )的概念——在某个数据集的有限种聚类方法中,平均
s
(
i
)
{\displaystyle s(i)}
的最大值[ 3] :
S
C
=
max
k
s
~
(
k
)
{\displaystyle SC=\max _{k}{\tilde {s}}\left(k\right)}
上式中
s
~
(
k
)
{\displaystyle {\tilde {s}}\left(k\right)}
代表被分为
k
{\displaystyle k}
个簇后该数据集的平均
s
(
i
)
{\displaystyle s(i)}
。
轮廓系数一般不能用于横向评价多种聚类方法。凸簇(如经由DBSCAN方法得出的簇)的轮廓系数一般高于其他类型的簇。
途中蓝色线条是DBSCAN的轮廓系数,随着参数变化其SC迅速增大。然而实际聚类结果很差。
Davies–Bouldin指数
k-medoids
如何确定数据集中有多少簇