【k-means clustering】【一】基础算法

本文详细介绍了Kmeans算法,给出输入样本集、聚类簇数等输入输出信息,阐述算法步骤。还给出样例数据,通过选择初始质心进行迭代计算,不断更新簇和质心,直至质心不再变化结束迭代,最后指出质心是与簇中样本点最近的位置。

算法描述

输入样本集: X={x1,x2,...xn}X=\{x_1, x_2,... x_n\}X={x1,x2,...xn}
聚类簇数K
输出划分 C={c1,c2,...ck}C=\{c_1, c_2, ... c_k\}C={c1,c2,...ck}
最大迭代次数N

  1. 从数据集X中随机选择k个数据作为初始k个质心(centroids) {μ1,μ2,...μk}\{\mu_1, \mu_2,... \mu_k\}{μ1,μ2,...μk}
  2. 对于n=1,2,…N,
    a) 将C初始化为Ct=∅,t=1,2,...kC_t=\varnothing,t=1,2,...kCt=,t=1,2,...k
    b) 对于i=1,2,…m,计算样本xix_ixi和各个质心μj\mu_jμj的距离:
    di−>j=∣∣xi−μj∣∣2d_{i->j}=||x_i-\mu_j||^2di>j=xiμj2
    xix_ixi标记最小的为di−>jd_{i->j}di>j所对应的类别λi\lambda_iλi,此时更新
    Cλi=Cλi⋃{xi} C_{\lambda_i}=C_{\lambda_i} \bigcup \{x_i\} Cλi=Cλi{xi}
    c) 对于j=1,2,…k, 对CjC_jCj中所有的样本点重新计算质心
    μj=1∣Cj∣∑x∈Cjx \mu_j=\frac 1 {|C_j|} \sum_{x\in C_j}x μj=Cj1xCjx
    d) 如果所有k个质心没有变换转到步骤3,否则返回步骤2
  3. 输出C

算法实例

样例数据如下:

X = {(0,1), (1,2), (1,1), (3,3), (3,2), (4,4)}
样例数据

计算推演

  1. 选择(0,1), (1,1) 为质心, C1=∅;C2=∅C_1=\varnothing; C_2=\varnothingC1=;C2=
  2. 迭代计算

2-1) 计算距离
节点1:
d1−>1=0d_{1->1}=0d1>1=0
d1−>2=(0−1)2+(1−2)2=2d_{1->2}=(0-1)^2 + (1-2)^2 = 2d1>2=(01)2+(12)2=2
离质心1近,所以标记为C1C_1C1
节点2:
d2−>1=(1−0)2+(2−1)2=2d_{2->1}=(1-0)^2 + (2-1)^2 = 2d2>1=(10)2+(21)2=2
d2−>2=0d_{2->2}=0d2>2=0
离质心2近,所以标记为C2C_2C2
节点3:
d3−>1=(1−0)2+(1−1)2=1d_{3->1}=(1-0)^2 + (1-1)^2 = 1d3>1=(10)2+(11)2=1
d3−>2=(1−1)2+(1−2)2=1d_{3->2}=(1-1)^2 + (1-2)^2 = 1d3>2=(11)2+(12)2=1
相同距离,按优先归到C1C_1C1
节点4:
d4−>1=(3−0)2+(3−1)2=13d_{4->1}=(3-0)^2 + (3-1)^2 = 13d4>1=(30)2+(31)2=13
d4−>2=(3−1)2+(3−2)2=5d_{4->2}=(3-1)^2 + (3-2)^2 = 5d4>2=(31)2+(32)2=5
离质心2近,所以标记为C2C_2C2
节点5:
d5−>1=(3−0)2+(2−1)2=10d_{5->1}=(3-0)^2 + (2-1)^2 = 10d5>1=(30)2+(21)2=10
d5−>2=(3−1)2+(2−2)2=4d_{5->2}=(3-1)^2 + (2-2)^2 = 4d5>2=(31)2+(22)2=4
离质心2近,所以标记为C2C_2C2
节点5:
d6−>1=(4−0)2+(4−1)2=25d_{6->1}=(4-0)^2 + (4-1)^2 = 25d6>1=(40)2+(41)2=25
d6−>2=(4−1)2+(4−2)2=13d_{6->2}=(4-1)^2 + (4-2)^2 = 13d6>2=(41)2+(42)2=13
离质心2近,所以标记为C2C_2C2
更新簇
C1=∅⋃{x1,x3}={x1,x3}C_1 = \varnothing \bigcup \{x_1,x_3\} = \{x_1,x_3\}C1={x1,x3}={x1,x3}
C2=∅⋃{x2,x4,x5,x6}={x2,x4,x5,x6}C_2 = \varnothing \bigcup \{x_2,x_4,x_5,x_6\} = \{x_2,x_4,x_5,x_6\}C2={x2,x4,x5,x6}={x2,x4,x5,x6}
更新质心
μ1=((0+1)/2,(1+1)/2)=(0.5,1)\mu_1 = ((0+1)/2, (1+1)/2) = (0.5,1)μ1=((0+1)/2,(1+1)/2)=(0.5,1)
μ2=((1+3+3+4)/4,(2+3+2+4)/4)=(2.75,2.75)\mu_2 = ((1+3+3+4)/4,(2+3+2+4)/4) = (2.75,2.75)μ2=((1+3+3+4)/4,(2+3+2+4)/4)=(2.75,2.75)
{μ1,μ2}={(0.5,1),(2.75,2.75)}\{\mu_1, \mu_2\} = \{(0.5,1), (2.75,2.75)\}{μ1,μ2}={(0.5,1),(2.75,2.75)}

2-2) 计算距离
节点1:
d1−>μ1=(0−0.5)2+(1−1)2=0.25d_{1->\mu_1}=(0-0.5)^2 + (1-1)^2 = 0.25d1>μ1=(00.5)2+(11)2=0.25
d1−>μ2=(0−2.75)2+(1−2.75)2=10.62d_{1->\mu_2}=(0-2.75)^2 + (1-2.75)^2 = 10.62d1>μ2=(02.75)2+(12.75)2=10.62
离质心1近,所以标记为C1C_1C1
节点2:
$d_{2->\mu_1}=(1-0.5)^2 + (2-1)^2 = 1.25 $
$d_{2->\mu_2}=(1-2.75)^2 + (2-2.75)^2 = 3.62 $
离质心1近,所以标记为C1C_1C1
节点3:
d3−>μ1=(1−0.5)2+(1−1)2=0.25d_{3->\mu_1}=(1-0.5)^2 + (1-1)^2 = 0.25d3>μ1=(10.5)2+(11)2=0.25
d3−>μ2=(1−2.75)2+(1−2.75)2=6.12d_{3->\mu_2}=(1-2.75)^2 + (1-2.75)^2 = 6.12d3>μ2=(12.75)2+(12.75)2=6.12
离质心1近,所以标记为C1C_1C1
节点4:
d4−>μ1=(3−0.5)2+(3−1)2=10.25d_{4->\mu_1}=(3-0.5)^2 + (3-1)^2 = 10.25d4>μ1=(30.5)2+(31)2=10.25
d4−>μ2=(3−2.75)2+(3−2.75)2=2.5d_{4->\mu_2}=(3-2.75)^2 + (3-2.75)^2 = 2.5d4>μ2=(32.75)2+(32.75)2=2.5
离质心2近,所以标记为C2C_2C2
节点5:
d5−>μ1=(3−0.5)2+(2−1)2=7.25d_{5->\mu_1}=(3-0.5)^2 + (2-1)^2 = 7.25d5>μ1=(30.5)2+(21)2=7.25
d5−>μ2=(3−2.75)2+(2−2.75)2=0.12d_{5->\mu_2}=(3-2.75)^2 + (2-2.75)^2 = 0.12d5>μ2=(32.75)2+(22.75)2=0.12
离质心2近,所以标记为C2C_2C2
节点6:
d6−>μ1=(4−0.5)2+(4−1)2=21.25d_{6->\mu_1}=(4-0.5)^2 + (4-1)^2 = 21.25d6>μ1=(40.5)2+(41)2=21.25
d6−>μ2=(4−2.75)2+(4−2.75)2=3.12d_{6->\mu_2}=(4-2.75)^2 + (4-2.75)^2 = 3.12d6>μ2=(42.75)2+(42.75)2=3.12
离质心2近,所以标记为C2C_2C2
更新簇
C1={x1,x2,x3}C_1 = \{x_1,x_2,x_3\}C1={x1,x2,x3}
C2={x5,x4,x6}C_2 = \{x_5,x_4,x_6\}C2={x5,x4,x6}
更新质心
μ1=((1+1+0)/3,(2+1+1/)3)=(0.67,1.33)\mu_1 = ((1+1+0)/3, (2+1+1/)3) = (0.67,1.33)μ1=((1+1+0)/3,(2+1+1/)3)=(0.67,1.33)
μ2=((3+3+4)/3,(3+2+4)/3)=(3.33,3)\mu_2 = ((3+3+4)/3,(3+2+4)/3) = (3.33,3)μ2=((3+3+4)/3,(3+2+4)/3)=(3.33,3)
{μ1,μ2}={(0.67,1.33),(3.33,3)}\{\mu_1, \mu_2\} = \{ (0.67,1.33), (3.33,3)\}{μ1,μ2}={(0.67,1.33),(3.33,3)}

2-3) 计算距离
节点1:
d1−>μ1=(0−0.67)2+(1−1.33)2=0.56d_{1->\mu_1}=(0-0.67)^2 + (1-1.33)^2 = 0.56d1>μ1=(00.67)2+(11.33)2=0.56(最近)
d1−>μ2=(0−3.33)2+(1−3)2=15.09d_{1->\mu_2}=(0-3.33)^2 + (1-3)^2 = 15.09d1>μ2=(03.33)2+(13)2=15.09
节点2:
d2−>μ1=(1−0.67)2+(2−1.33)2=0.56d_{2->\mu_1}=(1-0.67)^2 + (2-1.33)^2 = 0.56d2>μ1=(10.67)2+(21.33)2=0.56(最近)
d2−>μ2=(1−3.33)2+(2−3)2=5.43d_{2->\mu_2}=(1-3.33)^2 + (2-3)^2 = 5.43d2>μ2=(13.33)2+(23)2=5.43
节点3:
d3−>μ1=(1−0.67)2+(1−1.33)2=0.56d_{3->\mu_1}=(1-0.67)^2 + (1-1.33)^2 = 0.56d3>μ1=(10.67)2+(11.33)2=0.56(最近)
d3−>μ2=(1−3.33)2+(1−3)2=8.43d_{3->\mu_2}=(1-3.33)^2 + (1-3)^2 = 8.43d3>μ2=(13.33)2+(13)2=8.43
节点4:
d4−>μ1=(3−0.67)2+(3−1.33)2=8.21d_{4->\mu_1}=(3-0.67)^2 + (3-1.33)^2 = 8.21d4>μ1=(30.67)2+(31.33)2=8.21
d4−>μ2=(3−3.33)2+(3−3)2=0.11d_{4->\mu_2}=(3-3.33)^2 + (3-3)^2 = 0.11d4>μ2=(33.33)2+(33)2=0.11(最近)
节点5:
d5−>μ1=(3−0.67)2+(2−1.33)2=5.89d_{5->\mu_1}=(3-0.67)^2 + (2-1.33)^2 = 5.89d5>μ1=(30.67)2+(21.33)2=5.89
d5−>μ2=(3−3.33)2+(2−3)2=1.11d_{5->\mu_2}=(3-3.33)^2 + (2-3)^2 = 1.11d5>μ2=(33.33)2+(23)2=1.11(最近)
节点6:
d6−>μ1=(4−0.67)2+(4−1.33)2=18.22d_{6->\mu_1}=(4-0.67)^2 + (4-1.33)^2 = 18.22d6>μ1=(40.67)2+(41.33)2=18.22
d6−>μ2=(4−3.33)2+(4−3)2=1.45d_{6->\mu_2}=(4-3.33)^2 + (4-3)^2 = 1.45d6>μ2=(43.33)2+(43)2=1.45(最近)
更新簇
没有变化
更新质心
质心没有变化,结束迭代,输出C

将质心画出来(×)
质心位置
可见“质心”就是各个点形成形状的“质量重心”,他反应的是与簇中各个样本点都最近的一个位置。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值