K-Means聚类算法

  聚类就是对大量未知标注的数据集,按数据的内在相似性将数据划分为多个类别,使类别内的数据相似度较大类别间的数据相似度较小
  K-means算法就是无监督的聚类算法,其实现方法比较简单。

一、基本K-Means算法

1. 算法流程

假定输入样本为 S = x 1 , x 2 , . . . , x m S=x_1, x_2, ...,x_m S=x1,x2,...,xm,则算法步骤为:

(1) 选择初始的k个类别的中心 μ 1 , μ 2 , . . . , μ k \mu_1, \mu_2,...,\mu_k μ1,μ2,...,μk
(2) 对每个样本 x i x_i xi,采用距离计算公式(欧式距离、协方差、皮尔逊系数等)将其标记为距离中心最近的类别,即:
l a b d i = a r g m i n 1 ≤ j ≤ k ∥ x i − μ i ∥ labd_{i}=argmin_{1\leq j\leq k}\left\| x_{i}-\mu _{i}\right\| labdi=argmin1jkxiμi
(3) 将每个类别的中心进行更新为该类别所有样本的均值:
μ i = 1 ∣ c j ∣ ∑ i ∈ C j x i \mu _{i}=\dfrac {1}{\left| c_{j}\right| }\sum _{i\in C_{j}}x_{i} μi=cj1iCjxi
(4) 重复(2)(3),直到达到中止条件
中止条件:
  迭代次数/ 簇中心变化率/ 最小平方误差MSE

下面的图片来形象的描述这一过程

K-Means聚类算法_第1张图片
  (a ) 图表示了算法步骤(1)随机选取k个值
  (b ) 图表示了算法步骤(2)对每个样本进行了划分
  (c ) 图表示了算法步骤(3)重新选取了每个类别的中心
   后续图表示了迭代的过程

2. k-Mediods聚类(简单的改进)

K-Means聚类算法_第2张图片

3. K-Means++

  在基本的K-Means算法中采用随机选取质心,对迭代时间和聚类效果有很大的影响,对初值的选择对算法提高很大,k-Means++就是对初始质心选择的 优化。
K-Means++初始化策略:

(1) 随机选取一个样本作为第一个聚类中心 μ 1 \mu_1 μ1
(2) 计算每个数据点与已选择的聚类中心中最近聚类中心的距离,这个值越大被选作聚类中心的概率就越大
(3) 重复b和c直到选择出k个质心
(4) 利用得到的k个质心运行标准的K-Means算法

4. Mini Batch K-Means

  传统的K-Means算法需要计算所有样本点到所有类别中心的距离,如果样本数据达到了几十万,多次迭代在传统的K-Means算法中计算量巨大,因此产生了Mini Batch K-Means。
  Mini Batch K-Means的主要思想是从数据集中选取部分样本来进行传统的K-Means算法,提高收敛的速度。而通常采样的是通过五方会的随机采样得到。
  为了增加准确性,会多进行几次采样得到不同的聚类簇,选择最优聚类簇。

5. 距离计算优化elkan K-Means

  每次迭代中都要计算所有样本点到所有类别中心的距离,比较耗时,elkan k-Means算法减少了不必要的计算,利用三角形的两边和大于第三边,两边的差小于第三边的性质来减少计算。
  假设样本点为 x x x,两个样本中心 μ 1 μ 2 \mu_1\mu_2 μ1μ2,那么就有 2 D ( x , μ 1 ) ≤ D ( μ 1 , μ 2 ) 2D(x,\mu_1)\leq D(\mu_1,\mu_2) 2D(x,μ1)D(μ1,μ2),就可以确定 D ( x , μ 1 ) ≤ D ( x , μ 2 ) D(x, \mu1)\leq D(x, \mu_2) D(x,μ1)D(x,μ2),可以来减少计算。
  但是如果样本的特征值是稀疏的,有缺失的就无法适用。


参考 :
https://www.cnblogs.com/pinard/p/6164214.html

你可能感兴趣的:(机器学习笔记)