其他机器学习系列文章见于专题:机器学习进阶之路——学习笔记整理,欢迎大家关注。
1. 聚类
聚类就是对未知标记的数据,按照其内部规律,将数据划分为多个不同类别(亦称“簇”,cluster),使簇内数据比较相似,而簇间数据差别较大。
聚类和分类的区别:
1. 分类是有监督学习,它基于有标记数据进行算法模型构建;
2. 聚类属于无监督学习,基于无标记数据。
2. K-Means原理
K-Means算法(又称K均值算法),是最简单经典的聚类算法。
在所有的聚类算法中,我们都希望簇内样本距离近,簇间样本距离远。K-Means选取欧式距离作为距离度量。
给定样本集
D
=
{
x
1
,
x
2
,
…
,
x
m
}
D = \left\{ \boldsymbol { x } _ { 1 } , \boldsymbol { x } _ { 2 } , \ldots , \boldsymbol { x } _ { m } \right\}
D={x1,x2,…,xm},我们的目标是最小化聚类所得簇
C
=
{
C
1
,
C
2
,
…
,
C
k
}
\mathcal { C } = \left\{ C _ { 1 } , C _ { 2 } , \ldots , C _ { k } \right\}
C={C1,C2,…,Ck}的总簇内距离:
E
=
∑
i
=
1
k
∑
x
∈
C
i
∥
x
−
μ
i
∥
2
2
E = \sum _ { i = 1 } ^ { k } \sum _ { \boldsymbol { x } \in C _ { i } } \left\| \boldsymbol { x } - \boldsymbol { \mu } _ { i } \right\| _ { 2 } ^ { 2 }
E=i=1∑kx∈Ci∑∥x−μi∥22
其中,
μ
i
\mu _ { i }
μi是簇
C
i
C _ { i }
Ci的聚类中心,也称质心:
μ
i
=
1
∣
C
i
∣
∑
x
∈
C
i
x
\boldsymbol { \mu } _ { i } = \frac { 1 } { \left| C _ { i } \right| } \sum _ { \boldsymbol { x } \in C _ { i } } \boldsymbol { x }
μi=∣Ci∣1x∈Ci∑x
最小化总簇内距离是一个NP难问题,因此K-Means采用了贪心策略,通过启发式的迭代优化近似求解。
3. K-Means算法
4. K-Means++算法
K-Means算法中,随机选取的k个初始聚类中心影响很大,可能会导致收敛很慢,运行时间很长。K-Means++就是对K-Means随机初始化聚类中心的优化。K-Means++选取k个初始聚类中心的思想如下:假设已经选取了
n
(
0
<
n
<
k
)
n(0<n<k)
n(0<n<k)个初始聚类中心,则在选取第
n
+
1
n+1
n+1个聚类中心时,距离当前
n
n
n个聚类中心越远的点有更高的概率被选为第
n
+
1
n+1
n+1个聚类中心。
5. ISODATA算法
K-Means算法中,k值需要人为设定,并无法更改。ISODATA(Iterative selforganizing data analysis,迭代自组织数据分析法)针对k值选取的问题做了改进,思想如下:
当属于某个类别的样本数过少时,把这个类别去除;当属于某个类别的样本数过多,分散程度大时,把这个类别分为两个子类别。具体算法实现可见参考文献2。
6. Mini Batch K-Means算法
在K-Means中,要计算所有样本点到所有聚类中心的距离,十分耗时。
Mini Batch(小批量)只用数据集中一部分样本来进行K-Means聚类,这时算法收敛速度大大加快,聚类准确度只比标准K-Means略差。
7. K-Means优缺点
优点:
1. 原理简单,易于实现;
2. 可解释性强。
缺点:
1. k值需要人为设定;
2. 对非凸数据集,较难收敛;
3. 对不平衡数据,聚类效果较差;
4. 初始聚类中心和特殊值敏感;
5. 采用迭代方法,得到的聚类结果只是局部最优;
参考文献: