机器学习(K-Means算法)
前言
监督学习是有一系列标签数据,寻找假设函数去拟合这些标签。无监督学习是寻找到一些隐含在系列无标签数据中的结构。K-Means聚类算法是常用的无监督学习方法之一。
一、K-Means算法
输入为:
①聚类个数:K
②训练集:
{
x
(
1
)
,
x
(
2
)
,
.
.
.
,
x
(
m
)
}
\begin{Bmatrix}{x^{(1)},x^{(2)},...,x^{(m)}}\end{Bmatrix}
{x(1),x(2),...,x(m)}
K-Means算法流程如下:
1、随机初始化K个聚类中心
2、分别计算当前样本i到K个聚类中心的距离,将该样本分类至距离最小值所对应的簇
3、重新计算K个簇的中心
4、当所有样本所属的簇不再发生改变或已到达最大迭代次数,停止迭代,否则重复步骤2、3、4
当样本数量为M,样本特征维度为D,聚类个数为K,迭代次数为I,K-Means算法的时间复杂度为O(KMDI)。
二、优化目标
J
(
c
(
1
)
,
c
(
2
)
,
.
.
.
,
c
(
m
)
,
μ
1
,
μ
2
,
.
.
.
,
μ
k
)
=
1
m
∑
i
=
1
m
∣
∣
x
(
i
)
−
μ
c
(
i
)
∣
∣
2
m
i
n
J
(
c
(
1
)
,
c
(
2
)
,
.
.
.
,
c
(
m
)
,
μ
1
,
μ
2
,
.
.
.
,
μ
K
)
J{(c^{(1)},c^{(2)},...,c^{(m)},\mu_1,\mu_2,...,\mu_k)} = \frac{1}{m}\sum_{i=1}^m||x^{(i)}-\mu_{c^{(i)}}||^{2} \\min\quad J{(c^{(1)},c^{(2)},...,c^{(m)},\mu_1,\mu_2,...,\mu_K)}
J(c(1),c(2),...,c(m),μ1,μ2,...,μk)=m1i=1∑m∣∣x(i)−μc(i)∣∣2minJ(c(1),c(2),...,c(m),μ1,μ2,...,μK)
c
(
i
)
表
示
样
本
x
(
i
)
所
属
的
簇
的
索
引
或
序
列
μ
k
表
示
第
k
个
聚
类
中
心
的
位
置
∣
∣
x
(
i
)
−
μ
c
(
i
)
∣
∣
2
表
示
样
本
x
(
i
)
到
该
样
本
所
属
的
聚
类
中
心
距
离
的
平
方
c^{(i)}表示样本x^{(i)}所属的簇的索引或序列 \\\mu_{k}表示第k个聚类中心的位置 \\||x^{(i)}-\mu_{c^{(i)}}||^2表示样本x^{(i)}到该样本所属的聚类中心距离的平方
c(i)表示样本x(i)所属的簇的索引或序列μk表示第k个聚类中心的位置∣∣x(i)−μc(i)∣∣2表示样本x(i)到该样本所属的聚类中心距离的平方
三、随机初始化
随机挑选K个聚类样本,使其为K个聚类中心。
为避免局部最优解,尝试多次随机初始化,多次进行K-Means聚类。