机器学习笔记11——无监督学习之k-means聚类算法

来源:互联网 发布:windows update 安装 编辑:程序博客网 时间:2024/06/04 00:24

还记得在监督学习的过程中,经常出现这样一幅图


在监督学习中,训练集的数据都含有标签,并且可通过标签对数据进行分类,并且知道正确的答案。而在无监督学习中,数据集中的数据没有标签,对其进行分类也没有答案,只能通过聚类的方式进行分类,这就是无监督学习。

接下来我们将介绍无监督学习的第一个算法,k-means聚类算法

k-means聚类算法

在聚类问题中,给定一组训练集合{x(1),x(2),...,x(m)},其中每个训练样本是n维的向量,x(i)Rn,且训练样本没有标签。我们希望通过一些“簇”将数据分成几组。

k-means聚类算法的步骤如下:

  1. 初始化几个聚类中心,随机选取几个n维向量μ1,μ2,...,μk

  2. 重复执行直到收敛:{

    对于每一个训练样本i,使得:


    对于每个聚类中心j,使得:


}

在上述的算法中,k是我们想要找到的聚类的数量;聚类中心μj代表我们猜想的聚类的中心的位置。为了初始化聚类中心,我们可以随机选择k个训练样本,然后使得聚类中心与这k个样本的值相同(也存在其他初始化的方法)。

算法第二步的循环中有两个步骤,1.为每个训练样本x(i)分配到离它最近的聚类中心的μj,2.改变聚类中心μj,这个值是所有靠近该聚类中心的点的均值。


图中显示了k-means算法的执行过程。训练样本用点来表示,聚类中心用“X”表示。图(a)是原始的数据集,(b)是随机初始化聚类中心(c-f)显示了两次迭代k-means聚类算法的结果,在每一次迭代中,我们将每个训练样本分配给离该点最近的聚类中心(图中相同的颜色代表属于同一聚类中心);之后移动每一个聚类中心到所有分配到该中心的点的均值。

那么k-means聚类算法一定保证收敛吗?答案是肯定的,在某种意义上来说。

让我们通过定义偏差函数来证明这一结论:


其中,J是衡量每一个训练样本x(i)与分配的聚类中心μc(i)的距离的平方之和。可以看出,k-means聚类算法针对J是严格的坐标下降。k-means聚类算法中第二步的循环内,不断重复最小化J的过程,一开始是固定参数μ,针对参数c最小化,之后是固定参数c,针对参数μ进行最小化操作。因此,J一定是单调递减的,而J一定会收敛。

偏差函数J是一个非凸函数,所以针对J进行坐标下降不能保证收敛到全局最小值。换句话说,k-means聚类算法可能会收敛到局部最小值。尽管如此,k-means聚类的效果很好。但是如果担心算法收敛得到的局部值并不好,那么可以多次运行k-means算法(针对聚类中心使用不同的初始值)。最后,得到不同聚类的结果,选择使偏差函数J(c,μ)最小的聚类。

混合高斯模型与EM算法

这一小节将讲述针对密度估计的EM(Expectation-Maximization)算法。

这一部分讲的很高深,听得很迷茫,有些东西并没有理解到位。因此在此引用比较好的对混合高斯模型以及EM算法讲述到位的博文,通过对这两篇博文的理解,相信大家会有一个较为全面的知识结构。

[1] http://www.cnblogs.com/AndyJee/p/3732766.html
[2]http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html

阅读全文
0 0