【机器学习算法】K均值(K-means)

非监督算法是机器学习研究的一大领域,它适用于不带标签的样本数据,采取一定的算法,将样本分成自动分类成不同的簇。

文章目录

  • K均值(K-meas)
    • 距离的计算
    • 聚类中心初始化
    • 参数K的选择
  • K-means++算法
  • ISODATA算法
  • 总结

K均值(K-meas)

  K均值算法接收两个输入,一个是K,表示簇的数量,另一个是不带标签的训练集{ x 1 , x 2 , . . x m x_1,x2,..x_m x1,x2,..xm}。
  算法过程如下:

  1. 随机初始化K个聚类中心 μ 1 , μ 2 , . . . μ K \mu_1,\mu_2,...\mu_K μ1,μ2,...μK
  2. 遍历每个样本,对于每个样本,计算其与K个聚类中心的距离,将样本划分到距离最短的中心的簇内。
  3. 遍历每个聚类中心 μ k \mu_k μk,计算被划分到簇 μ k \mu_k μk的样本的均值作为 μ k \mu_k μk的新位置。

  令 c ( i ) c^{(i)} c(i)表示样本i被划分到的簇的下标,则损失函数可以定义为:
J ( c ( i ) , . . . , c ( m ) , μ 1 , . . . , μ k ) = 1 m ∣ ∣ x ( i ) − μ c ( i ) ∣ ∣ 2 . . . . . . . . ( 1 ) J(c^{(i)},...,c^{(m)},\mu_1,...,\mu_k)=\frac{1}{m}||x^{(i)}-\mu_{c^{(i)}}||^2........(1) J(c(i),...,c(m),μ1,...,μk)=m1x(i)μc(i)2........(1)
  我们的目标就是最小化(1),而算法步骤2和3的过程就是在最小化损失函数的过程,其本质是EM算法的迭代过程。

距离的计算

  通常使用欧式距离 d = ∑ i = 1 m ( x ( i ) − y ( i ) ) 2 d=\sqrt{\sum\limits_{i=1}^m(x^{(i)}-y^{(i)})^2} d=i=1m(x(i)y(i))2

聚类中心初始化

  方法:通常随机取K个样本作为初始聚类中心。

参数K的选择

  肘部原则:画出K从1开始的损失函数值的图像,一开始,图像会下降地比较快,然后趋于平缓,整个形状看起来像人的手肘,我们所要做的就是选取肘部对应的K作为我们的参数K。因为选取它前面的参数的话,损失函数值太高,选取它后面的参数的话,损失函数值变化的量又太少,因此肘部可能是一个合适的参数。然而画出来的图像不一定总是存在肘部,也有可能是平滑的,不过也是一种值得尝试的方法。
  另一种方法是根据后续的目的来决定K参数的取值。

K-means++算法

  是K-means的一个改进算法。在K-means中,对于聚类中心的初始化使用随机选取K个样本作为聚类中心,而K-means++按照以下的思路选取:

  1. 随机选取第一个聚类中心。
  2. 如果已经选取了n个聚类中心,则在选取第n+1个时,距离当前n个聚类中心越远的点会有更高的几率被选为第n+1个聚类中心。

  这是一种符合直觉的选取方式,K-means++在这一点上做了改进,其余的和K-means没有任何区别。

ISODATA算法

  ISODATA算法,全称是迭代自组织数据分析法。它针对K均值中K需要手动选择这一问题做了改进,其核心思想是:若属于某个类别的样本数少于某个阈值,则去除该类别。若属于某个类别的样本数大于某个阈值,则将该类别分类为两个类别。
  这样我们不用指定K的大小,算法就可以为我们自动选择一个合适的K出来。当然除此之外,我们有了更多的超参数,包括每个类所需要的最小样本数 N m i n N_{min} Nmin,最大方差 S i g m a Sigma Sigma,两个聚类中心所允许的最小距离 D m i n D_{min} Dmin,以及预期聚类中心 K o K_o Ko,通常最终输出的聚类中心是在 [ K o / 2 , 2 K o ] [K_o/2,2K_o] [Ko/2,2Ko]的范围之间。

总结

优点:易于实现,非常简单且使用广泛
缺点:可能收敛于局部最小值,在大规模数据下收敛慢,对初始聚类中心的位置较为敏感,参数K需要手动选择。

你可能感兴趣的:(机器学习之旅)