- 聚类算法是一类典型的无监督算法,那么为什么还有有监督的评估方式呢?
- 所谓的 “无监督” 算法指的是模型对于数据的训练和划分不依靠数据的标签,但是我们可以用标签来判断这个模型划分的是不是符合我们的要求。
纯度 Purity
- 假设对包含
N
N
N 个样本的数据集,用 kmeans 划分成
k
k
k 个聚类簇
C
i
,
.
.
.
C
k
C_i,...C_k
Ci,...Ck,
∣
C
i
∣
|C_i|
∣Ci∣ 表示的是这个簇中的样本个数,
P
i
(
j
)
P_i(j)
Pi(j) 代表在第
i
i
i 个聚类簇中标签为
j
j
j 的样本的概率;纯度 purity 的公式如下:
- 在这个例子中,一共有两个聚类簇,即 i = 1 , 2 i=1,2 i=1,2,一共有两种不同的标签,因此 j = 1 , 2 j=1,2 j=1,2。
- 在第一个 cluster 中 P y e s = 1 P_{yes}=1 Pyes=1, P n o = 0 P_{no}=0 Pno=0,因此 max j \max_{j} maxj 的结果是 P y e s = 1 P_{yes}=1 Pyes=1。
- 在第二个 cluster 中 P y e s = 0.6 , P n o = 0.4 P_{yes}=0.6, P_{no}=0.4 Pyes=0.6,Pno=0.4,因此,选最大的 P y e s = 0.6 P_{yes}=0.6 Pyes=0.6
- 然后套用 purity 的公式可以得到对两个聚类中心按照样本的数量进行加权求和: C 1 N ∗ 1 + C 2 N ∗ 0.6 = 2 12 ∗ 1 + 10 12 ∗ 0.6 = 0.67 \frac{C_1}{N} * 1 + \frac{C_2}{N} * 0.6=\frac{2}{12} * 1 + \frac{10}{12} * 0.6=0.67 NC1∗1+NC2∗0.6=122∗1+1210∗0.6=0.67
- 因此,通过 purity 这个指标衡量当前聚类算法的结果是 0.67。
- 通过上面的例子可以看出 purity 衡量了什么呢?其实最理想的聚类情况是,每个 cluster 中只有一个类标签,这个时候对数据的划分是最精确的,基本上等价于拟合数据很好的分类器。因此让我们看一下这时候的 purity 是不是最大。
Cluster | Play=yes | Play=no |
---|---|---|
1 | 2 | 0 |
2 | 0 | 10 |
- 还是按照上面的思路:
- 在第一个 cluster 中,最终选择 P y e s = 1 P_{yes}=1 Pyes=1
- 在第二个 cluster 中,最终选择 P n o = 1 P_{no}=1 Pno=1
- 按照系数加权求和 2 12 ∗ 1 + 10 12 ∗ 1 = 1 \frac{2}{12} * 1 + \frac{10}{12} * 1=1 122∗1+1210∗1=1 这时候纯度最高。
- 无论怎么对数据划分,只要每个 cluster 中只有一种标签的样本,那么纯度就是最高的 1 1 1。
熵 Entropy
- 与 purity 不同的是,我们希望聚类算法最后的熵越小越好。
- N N N 个样本, k k k 个簇,第 i i i 个簇的样本数 ∣ C i ∣ |C_i| ∣Ci∣,每个 cluster 中关于标签 label 的信息熵为 H ( c l a s s ) H(class) H(class)
- 根据熵的定义 e n t r o p y = ∑ − P l o g 2 P entropy=\sum-Plog_2P entropy=∑−Plog2P,数据越趋向于均匀分布,熵就越大,而数据越趋向于集中,熵就越小。
- 在当前的情境下,如果一个 cluster 中的标签非常一致,只有一种,那么熵肯定是最小的,而相反,如果一个 cluster 各种标签的样本是均匀的,那么熵就是大的。下面也用上面的例子来演示:
- 对于第一个 C 1 C_1 C1, H 1 = − ∑ j = 1 c P 1 ( j ) l o g 2 ( P 1 ( j ) ) = − 1 l o g 2 ( 1 ) − 0 l o g 2 0 = 0 H_1=-\sum_{j=1}^c P_1(j)log_2(P_1(j))=-1log_2(1)-0log_20=0 H1=−∑j=1cP1(j)log2(P1(j))=−1log2(1)−0log20=0
- 对于第二个 C 2 C_2 C2, H 2 = − 0.6 l o g 2 ( 0.6 ) − 0.4 l o g 2 0.4 = 0.97 H_2=-0.6log_2(0.6)-0.4log_20.4=0.97 H2=−0.6log2(0.6)−0.4log20.4=0.97
- 再根据 entropy 指标的定义加权求和所有 cluster 的 entropy = 2 12 ∗ 0 + 10 12 ∗ 0.97 = 0.81 \frac{2}{12} * 0 + \frac{10}{12} * 0.97=0.81 122∗0+1210∗0.97=0.81
- 所以使用 entropy 指标衡量当前的聚类算法的结果是 0.81 0.81 0.81