-
目录:
- K-means
- K-means的优化算法
- GMM
- MeanShift
- 层次聚类
-
K-means:
- 确定聚类个数,随机选择K个点作为初始聚类中心
- 计算各样本到K个聚类中心的距离,将该样本归为距离最近的一类。距离可用欧氏距离 J = ∑ k = 1 K ∑ j = 1 n ( ∣ ∣ x i − u k ∣ ∣ 2 ) J=\sum_{k=1}^{K}{\sum_{j=1}^{n}{(||x_i-u_k||^2)}} J=∑k=1K∑j=1n(∣∣xi−uk∣∣2)。
- 对每个类别内部的样本,使用其均值作为新的聚类中心。反复迭代上述过程。
-
K-means的优化算法
-
K-means的优缺点分析(面试常考):
- 优点:
- 计算复杂度低为O(Nmq),N是数据总量,m是类别(即k),q是迭代次数;
- 思想简单 。
- 高斯分布时效果很好
- 缺点:
- 初始点影响大
- 需要人为指定聚类个数
- 不适合非凸的数据
- 对噪声和孤立点敏感
- 优点:
-
K-means++:
- 第一个聚类中心随机选一个样本点
- 第2-K个聚类中心迭代选取:选取第k个聚类中心时,计算每个样本计算对1-k-1个聚类中心中最近的那个的距离(记为 D ( x ) D(x) D(x)),距离越远的点越容易(概率更大)被选为新的聚类中心。概率为 D ( x ) 2 ∑ D ( x ) 2 \frac{D(x)^2}{\sum D(x)^2} ∑D(x)2D(x)2
-
ISODATA(迭代自组织数据分析法):
- 自动确定聚类个数
- 思想:当属于某个类别的样本数过少 小 于 N m i n 小于N_{min} 小于Nmin时把这个类别去除(合并),当属于某个类别的样本数过多、分散程度较大时把这个类别分为两个子类别(分裂)
-
-
GMM:
- 确定聚类个数,随机初始化分布的均值和协方差(也可使用其他聚类算法作为初始值)
- 对混合概率分布做极大似然估计,在这部分需要使用EM算法。参数估计过程请见EM算法专辑。
- 对每个样本 x x x,使用其后验概率最大的一类作为聚类结果。
-
MeanShift:【参数,半价r的大小】
- 该方法是一种基于滑动窗口和质心的聚类算法
- 对于高维空间上的一个点,计算在半价 r r r一定下,高维球包含的样本集合 S h S_h Sh。
- 对以上样本集合
S
h
S_h
Sh计算均值偏移向量
M
h
M_h
Mh:
M h = 1 K ∑ x i ∈ S h ( x i − x ) M_h=\frac{1}{K}\sum_{{x_i}\in{S_h}}{(x_i-x)} Mh=K1xi∈Sh∑(xi−x) - 将当前质心移动上述距离,得到新的聚类中心
- 特点:
- 无需提前决定聚类个数,因为聚类中心最终会聚集到一起
- 可以多聚类中心并行计算
- 半价大小会极大影响模型性能
- 层次聚类
- 自底向上建立聚类结果,每次寻找样本空间中距离最小的两个样本聚为一类,聚类中心就是他们的均值。删掉聚类的样本,更新聚类中心后放到数据集里面。
- 聚类的过程其实就是样本减少的过程。直到所有样本归为一类,结束算法。然后人为的选择想要使用的聚类个数(就是右图横着切一刀,你想要几个聚类个数就切几根线。)