CH3 K-means聚类
随机选取K个对象作为初始的聚类中心,然后计算每个样本与各个聚类中心之间的距离,把每个样本分配给距离它最近的聚类中心,聚类中心以及分配给它们的对象就代表一个聚类
每分配一次样本,聚类的聚类中心会根据聚类中现有的对象被重新计算
这个过程不断重复直到满足某个终止条件,可以是没有(或最小数目)样本被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小
在这里K就是我们想要分割的聚类个数
3.1 算法步骤
- 输入: 数据样本 { x i } i = 1 n \{x_i\}^n_{i=1} {xi}i=1n,聚类个数K
- 输出: 所有样本的聚类标签
{
y
i
}
i
=
1
n
\{y_i\}^n_{i=1}
{yi}i=1n
- 随机生成K个聚类中心, u 1 , … , u k u_1,\ldots,u_k u1,…,uk
- 重复如下至收敛:
- 计算每个样本与每一个聚类中心的距离(如欧式距离),离哪个聚类中心近,就划分到哪个聚类所属的集合
- 重新计算每个集合的聚类中心(集合中坐标的中心点)
- 返回所有样本的聚类标签
3.2 算法图解
3.3 目标函数
J = ∑ i = 1 n ∑ j = 1 k r i j ∣ ∣ x i − μ j ∣ ∣ 所有点到他距离中心的范数之和 J = \sum^n_{i=1}\sum^k_{j=1}r_{ij}||x_i-\mu_j||\quad\text{所有点到他距离中心的范数之和} J=i=1∑nj=1∑krij∣∣xi−μj∣∣所有点到他距离中心的范数之和
范数:
∣
∣
x
i
−
μ
j
∣
∣
=
(
x
i
−
μ
j
)
T
(
x
i
−
μ
j
)
=
(
x
i
T
−
μ
j
T
)
(
x
i
−
μ
j
)
=
x
i
T
x
i
−
2
x
i
μ
j
+
μ
j
T
μ
j
\begin{split} ||x_i-\mu_j|| &= (x_i-\mu_j)^T(x_i-\mu_j)\\ &= (x_i^T-\mu_j^T)(x_i-\mu_j)\\ &=x_i^Tx_i-2x_i\mu_j+\mu_j^T\mu_j \end{split}
∣∣xi−μj∣∣=(xi−μj)T(xi−μj)=(xiT−μjT)(xi−μj)=xiTxi−2xiμj+μjTμj
- 如果 x i x_i xi被分配到第j个类簇中,则 r i j = 1 r_{ij}=1 rij=1,否则 r i j = 0 r_{ij}=0 rij=0
- 通过对上式中
μ
i
\mu_i
μi求导可得类簇中心更新公式:
μ j = ∑ i = 1 n r i j x i ∑ i = 1 n r i j \mu_j = \frac{\sum^n\limits_{i=1}r_{ij}x_i}{\sum^n\limits_{i=1}r_{ij}} μj=i=1∑nriji=1∑nrijxi
3.4 例题
假设有如下8个点:(3,1), (3,2), (4,1), (4,2), (1,3), (1,4), (2,3), (2,4),使用K- means算法对其进行聚类。设初始聚类中心分别为(0,4)和(3,3),请写出详细的计算过程
1.数据
X | Y | |
---|---|---|
A1 | 3 | 1 |
A2 | 3 | 2 |
A3 | 4 | 1 |
A4 | 4 | 2 |
A5 | 1 | 3 |
A6 | 1 | 4 |
A7 | 2 | 3 |
A8 | 2 | 4 |
2.初始聚类中心分别为D1(0,4),D2(3,3)计算各点到两中心的距离
D1(0,4) | D2(3,3) | |
---|---|---|
A1(3,1) | 4.242 | 2 |
A2(3,2) | 3.605 | 1 |
A3(4,1) | 5 | 2.236 |
A4(4,2) | 4.472 | 1.414 |
A5(1,3) | 1.414 | 2 |
A6(1,4) | 1 | 2.236 |
A7(2,3) | 2.236 | 1 |
A8(2,4) | 2 | 1.414 |
3.根据上表分成两簇,{A1, A2, A3, A4, A7, A8}, {A5, A6}重新计算新的聚类中心
- D3(3, 2.167)
- x = (3+3+4+4+2+2)/6 = 3 (各点横坐标平均值)
- y = (1+2+1+2+3+4)/6 = 2.167 (各点纵坐标平均值)
- D4(1, 3.5)
- x = (1+1)/2 = 1
- y = (3+4)/2 = 3.5
4.计算新的距离表
D3(3, 2.167) | D4(1, 3.5) | |
---|---|---|
A1(3,1) | 1.167 | 3.201 |
A2(3,2) | 0.167 | 2.5 |
A3(4,1) | 1.536 | 3.905 |
A4(4,2) | 1.103 | 3.354 |
A5(1,3) | 2.166 | 0.5 |
A6(1,4) | 2.712 | 0.5 |
A7(2.3) | 1.301 | 1.118 |
A8(2,4) | 2.088 | 1.118 |
5.根据上表分成两簇,{A1, A2, A3, A4}, {A5, A6, A7, A8}重新计算新的聚类中心
- D5(3.5, 1.5)
- x = (3+3+4+4)/4 = 3.5
- y = (1+2+1+2)/4 = 1.5
- D6(1.5, 3.5)
- x = (1+1+2+2)/4 = 1.5
- y = (3+4+3+4)/4 = 3.5
6.计算新的距离表
D5(3.5, 1.5) | D6(1.5, 3.5) | |
---|---|---|
A1(3,1) | 0.707 | 2.915 |
A2(3.2) | 0.707 | 2.121 |
A3(4,1) | 0.707 | 3.535 |
A4(4,2) | 0.707 | 2.915 |
A5(1,3) | 2.915 | 0.707 |
A6(1,4) | 3.535 | 0.707 |
A7(2,3) | 2.121 | 0.707 |
A8(2,4) | 2.915 | 0.707 |
7.根据上表分成两簇,{A1, A2, A3, A4}, {A5, A6, A7, A8},和上一次分簇一致,停止计算