机器学习和人工智能入门大数据,机器学习,人工智能人工智能/模式识别/机器学习精华专题

机器学习入门笔记系列(9) | K-means 算法

2018-10-01  本文已影响5人  胖三斤66

c^{(i)} = 样本 x^{(i)} 被分配到的簇的索引{1,2, ..., K}
u_k = 第 k 簇的聚类中心

一、K-means 执行过程

K-Means 算法是最流行和广泛使用的无监督学习算法,用于自动将数据分组为相干子集。K-Means 算法属于聚类算法

下图展示 K = 2 时 K-means 算法执行过程实例。

K-means 聚类过程

用文字总结一下 K=2时, K-means 算法的执行过程:

  1. 初始化初始化两个聚类中心;
  2. 簇分配:计算每个样本到两个聚类中心的距离,并将样本分配到离它最近的聚类中心所在的簇中;
  3. 更新聚类中心:计算两个簇中所有点的平均值,并将两个簇的聚类中心更新为该平均值;
  4. 重复(2),(3) 操作,直至迭代次数完成或者聚类中心不再改变。

二、K-means 算法

通过上述的执行过程,K-means 算法实现如下:

K-means 算法

Tips : 如果出现有一个聚点在归类完成后,没有一个样本点属于该簇。通常做法是删除该聚点,此时变成 K-1 means;也可以没有初始化聚类中心

2.1 代价函数

K-means 代价函数

简单的来解释,代价函数 = 每个样本与所在簇的聚类中心的距离平方的平均值

我们的优化目标就是 min_{c,u}~J(c,u)。如何实现这优化目标呢?

其实实现 min_{c,u}~J(c,u) 一直贯穿于 K-means 算法。

  1. 簇分配:我们固定了聚类中心,即固定了 \{u_1,..,u_K\},将样本分配到离它最近的聚类中心所在的簇中,这相当于当固定 \{u_1,..,u_K\},通过改变 \{c^{(1)}, .., c^{(m)}\}min_{c,u}~J(c,u)
  2. 更新聚类中心:我们固定了每个样本所在的簇,即固定了 \{c^{(1)}, .., c^{(m)}\},计算每个簇的所有点的平均值并更新为簇的新的聚类中心,即改变了 \{u_1,..,u_K\},这就实现 min_{c,u}~J(c,u)

总结一下,就是:

K-means 优化目标

Tips: K-means 的代价函数值不可能上升,它应该是不断下降。

2.2 随机初始化聚类中心

初始化聚类中心不同,最后形成的簇就会不同。如果初始化聚类中心不好,K-means 达到陷入局部最优情况,如下图所示。

那么,如何初始化聚类中心呢?这里有 2 点建议:

  1. K < m,即划分的簇的数量 K 应该小于样本数量 m;
  2. 建议随机选取样本中 K 个样本作为初始化的聚类中心 \{u_1,..,u_K\}

减小 K-means 陷入局部最优的解决方案:构建多组初始化聚类中心,分别执行 K-means 算法,最终选取代价函数值最小的那组。

多次随机初始化聚类中心

实验证明,当 K \leq 10 时,多次随机初始化方法对算法有很大的改善;而当 K > 10 时,多次随机初始化方法不会对你的算法有很大的改善。

三、K-means 应用

K-means 应用

除了上述,K-means 还可以运用于市场的划分等等实际场景中。

总结

K-mean 算法全过程

参考文献

  1. 吴恩达机器学习 week8
上一篇下一篇

猜你喜欢

热点阅读