K-means 算法
K-means 算法
算法过程描述
- 随机选取k个点作为簇的中心
- 对于每一个样本的计算到中心的距离,并将样本分到最近的簇中
- 更新簇的中心位置
- 重复上述2-3步,直至簇的中心位置不在发生改变
其中目标函数为
J
=
∑
i
=
1
N
∑
k
=
1
K
r
i
,
k
∣
∣
x
i
?
μ
k
∣
∣
2
J=\sum_{i=1}^N\sum_{k=1}^Kr_{i,k}||x^i-\mu^k||^2
J=i=1∑N?k=1∑K?ri,k?∣∣xi?μk∣∣2
其中
r
i
,
k
∈
{
0
,
1
}
r_{i,k}\in\{0,1\}
ri,k?∈{0,1}表示样本
x
i
x_i
xi?是否属于簇
k
k
k
因为如果簇中心位置 μ k \mu^k μk确定,那么 r i , k r_{i,k} ri,k?也同时将确定,为了优化目标函数,k-means采用迭代求解的方法,首先固定 μ k \mu^k μk,优化 r i , k r_{i,k} ri,k?;然后固定 r i , k r_{i,k} ri,k?优化 μ k \mu^k μk。
首先初始化簇中心,固定 μ k \mu^k μk,最小化 J ( r i , k ) J(r_{i,k}) J(ri,k?):
分配每个样本点到其最近的中心点所在的簇
z
i
=
a
r
g
?
m
i
n
k
′
dist
(
x
i
,
μ
k
)
{
r
i
,
k
=
1
,
k
=
z
i
r
i
,
k
=
0
,
k
≠
z
i
z_i= \mathrm{arg\ min}_{k^{\prime}}\text{dist}(x^i,\mu^k)\\ \begin{cases}r_{i,k}=1,k=z_i\\r_{i,k}=0,k\neq z_i\end{cases}
zi?=arg?mink′?dist(xi,μk){ri,k?=1,k=zi?ri,k?=0,k=zi??
然后固定簇中心
μ
k
\mu^k
μk,最小化
J
(
μ
k
)
J(\mu^k)
J(μk):
μ
k
=
∑
i
r
i
,
k
x
i
∑
i
r
i
,
k
{\mu}^k=\frac{\sum_ir_{i,k}{x}^i}{\sum_ir_{i,k}}
μk=∑i?ri,k?∑i?ri,k?xi?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!