目录
1 无监督学习概述
无监督学习的概念我们在前面已经提到,即我们所获得的训练集样本数据没有标签,只有特征,用图像表示:
2 K-Means聚类算法
由于训练集样本数据没有标签,我们需要用算法将数据划分为具有内在关联的子集,也被称之为簇,而划分簇的算法被称之为聚类算法,今天我们学习的K均值算法就是一种具有代表性的聚类算法。
K均值算法的流程如下:
第一步:随机选择两个点,也叫聚类中心,就是上图中红色和蓝色的点。
第二步:K均值算法是一个迭代的算法,迭代过程包括两部分,一件是簇分配,另一件是移动聚类中心。簇分配是指遍历所有样本点,根据每个绿色的点是更靠近红色还是蓝色的点将所有点分到两个不同的聚类中心。在执行分配操作后
移动聚类中心是指将中心点移动至两类数据的中心位置,移动后结果如图所示:
然后就是不断重复这两步直到中心不变,也就是算法收敛,找到了最有关联的两个簇。
K均值算法需要两个参数,分别是聚类数K,以及训练集。
以下是K均值算法的过程。
第一步:随机初始化K个聚类中心,记为:
第二步:迭代,迭代包括两个循环,一是对于每个样本,用 表示聚类中心中最接近 的中心的下表。二是移动聚类中心将中心值放在分好的簇的均值 位置。
3 优化
为了得到最适合的模型,聚类算法同样要评估并最小化聚类代价,我们设置代价函数如下所示:
J函数也叫失真代价函数,通过其收敛与否可以判断算法是否正常工作。我们将参数分成两部分,分别是c和u,先优化c,再优化u。两次优化过程都要固定未优化的那部分参数。
4 初始化
在一开始选择初始化聚类中心时要保证聚类中心K值少于样本总数m,另外为了防止造成局部最优,我们采取随机初始化:
但是随机初始化同样无法保证不陷入局部最优,为此我们选择初始化多次(50-1000),选择每次初始化后J值最小后的初始化结果。
5 确定聚类数
观察上图可知,有时我们可以获得类似左图的代价函数曲线,这时在K=3处可以获得一个肘点,我们选择这个点作为K值,我们称之为肘部法则。但是有时也会获得右边的图像,这时就要联系实际判断K值选择。