聚类算法
- 层次聚类:假设类别之间存在层次结构,将样本聚到层次化的类中。
- 分为聚合聚类和分裂聚类。
- 硬聚类:每个样本只能属于一个类。
- K-means聚类:基于样本集合划分的聚类算法。
(将样本集合划分为 k k k 个子集, n n n 个样本划分到 k k k 个类中,使每个样本到聚类中心的距离最小)- 优点:
- 简单、快捷
- 能处理大数据集,复杂度约为 O ( n K T ) O(nKT) O(nKT) 。
- 当簇是密集的、球状的或团状的,而簇与簇之间区别明显时,聚类效果好。
- 缺点:
- 要求用户事先给出 k k k。
- 对初值敏感,会导致不同的聚类结果。
- 不适合发现非凸面的簇,或大小差别很大的簇。
- 对于“噪声”和孤立点数据敏感。
- 优点:
- 欧式距离: d i s t ( x i , x j ) = ∥ x i − x j ∥ 2 = ∑ u = 1 n ∣ x i u − x j u ∣ 2 dist(x_i, x_j) = \|x_i - x_j\|_2 = \sqrt{\sum_{u =1}^n |x_{iu} - x_{ju}|^2} dist(xi,xj)=∥xi−xj∥2=∑u=1n∣xiu−xju∣2
- 聚合聚类三要素:
- 距离 & 相似度:
闵可夫斯基距离、马氏距离、相关系数、夹角余弦。 - 合并规则:
类间距离最小。(最短距离、最长距离、中心距离、平均距离) - 停止条件:
类的个数达到阈值、类的直径超过阈值。
- 距离 & 相似度:
一、层次聚类
-
聚合聚类:
-
分裂聚类:
(一)聚合聚类算法过程:
- 输入: n n n个样本组成的集合及样本之间的距离。
- 输出:对样本集合的一个层次化聚类。
步骤:
- 计算 n n n 个样本两两之间的欧氏距离 { d i j } \{d_{ij}\} {dij} ,记作矩阵 D = [ d i j ] n × n D = [d_{ij}]_{n \times n} D=[dij]n×n
- 构造 n n n 个类,每个类只包含一个样本。
- 合并类间距离最小的两个类,构建一个新类。(类间距离:最短距离)
- 计算新类与各类之间的距离,后回到步骤3。(类数达到阈值后,终止计算)
二、K-means聚类
(一)聚类策略
聚类准则函数最小化:通过损失函数的最小化选取最优的划分或函数 C ∗ C^* C∗ 。
(二)聚类算法
- 输入: n n n 个样本的集合 X X X 。
- 输出:样本集合的聚类 C ∗ C^* C∗.
-
任选 K K K 个初始聚类中心: Z 1 ( 1 ) , Z 2 ( 1 ) , ⋯ , Z K ( 1 ) Z_1^{(1)},Z_2^{(1)}, \cdots ,Z_K^{(1)} Z1(1),Z2(1),⋯,ZK(1)。
-
按最小距离原则将其余样本归到相应的类 Z j Z_j Zj 中。( k k k 为运算迭代次数)
m i n { ∥ X − Z i ( k ) ∥ , i = 1 , 2 , ⋯ , K } = ∥ X − Z j ( k ) ∥ = d j ( k ) min\{\|X - Z_i^{(k)}\|, i = 1, 2, \cdots , K\} = \| X - Z_j^{(k)}\| = d_j^{(k)} min{∥X−Zi(k)∥,i=1,2,⋯,K}=∥X−Zj(k)∥=dj(k) -
计算各个聚类中心的向量值。( N j N_j Nj 为该类的样本数)
Z j ( k + 1 ) = 1 N j ∑ X ∈ S j ( k ) X j = 1 , 2 , ⋯ , K Z_j^{(k + 1)} = \frac{1}{N_j} \sum_{X \in S_j^{(k)}} X \ \ \ \ j = 1,2, \cdots, K Zj(k+1)=Nj1X∈Sj(k)∑X j=1,2,⋯,K -
若 Z j ( k + 1 ) ≠ Z j ( k ) Z_j(k + 1) \ne Z_j(k) Zj(k+1)=Zj(k),则回到(2),根据新的样本中心逐个重新分类,重复迭代计算;否则计算完毕。