Andrew Ng 机器学习笔记 12 :聚类

在监督式学习中,我们针对一组标记的训练数据提出一个适当的假设。相比之下,在无监督学习案例中,我们面对的是一组无标记的训练数据,使用算法分析出数据的结构。

K均值 (K-means)算法

在聚类问题中,我们有未加标签的数据。我们希望有一个算法能够自动的把这些数据分成有紧密关系的子集,或是簇。K均值 (K-means)算法是现在最为广泛使用的聚类方法。

K均值是一个迭代方法,它要做两件事情:

  1. 簇分配。
  2. 移动聚类中心。

K-Means 第1步:簇分配:

  • 遍历所有的样本。
  • 计算每一个点最接近的中心,将其分配到最近的聚类中心。

K-Means 第2步:移动聚类中心:

  • 找出属于每个聚类中心的点,计算出它们的均值位置。
  • 把聚类中心移动到当前的均值位置。

K-Means 第3步:重复执行上面两步

  • 一直迭代下去,聚类中心和样本簇不再改变时,K均值方法就收敛了。

K-Means的规范化描述

K均值算法接受两个输入:

  • 参数K:从数据中聚类出的簇的个数。
  • 训练集:x(1),x(2),,x(m)

因为这是非监督学习,我们的数据集中不需要y,同时在非监督学习的 K均值算法里,我们约定x(i)是一个n维向量,这就是“训练样本是n维而不是n+1维”的原因(按照惯例,排除x0=1这一项)。

K均值算法:

第一步:随机初始化K个聚类中心,记作μ1,μ2一直到μk

第二步:

K均值内部循环执行以下步骤:

  • 簇分配

    首先对于每个训练样本,我们用变量c(i)表示K个聚类中心中最接近x(i)的那个中心的下标(具体的类别),这就是簇分配。

    大写的K表示所有聚类中心的个数,小写的k则表示某个聚类中心的下标。

    我们希望的是:在所有K个中心中,找到一个k使得xiμk的距离是x(i)到所有的聚类中心的距离中最小的那个,这就是计算c(i)的方法。

    这里还有另外的表示c(i)的方法:我用范数的形式||x(i)μk||来表示,这是第i个训练样本到聚类中心μk的距离。

    接下来我要做的是找出k的值,让这个式子||x(i)μk||最小,然后将 c(i) 赋值为k

    出于惯例,人们更喜欢用距离的平方||x(i)μk||2来表示x(i)距聚类中心μk的距离。

  • 移动聚类中心

    对于每个聚类中心:k从1循环到K,将μk赋值为这个簇的均值。

异常情况

如果存在一个没有点分配给它的聚类中心,通常在这种情况下,我们就直接移除那个聚类中心,并重新随机找一个聚类中心。(但是直接移除那个中心,是更为常见的方法。不过在实际过程中,这个问题不会经常出现。)

K均值的代价函数

以下便是K均值算法需要最小化的代价函数:

J(c(1),,c(m),μ1,,μK)=1mi=1m||x(i)μc(i)||2

K均值的目标就是要最小化代价函数:

minc(1),,c(m),μ1,,μKJ(c(1),,c(m),μ1,,μK)

在K均值算法中,有时候也叫做失真代价函数(distortion cost function)。

随机初始化

  • 确保 K<m

    当运行K均值方法时,你需要有一个聚类中心数值KK值要比训练样本的数量m小,即K<m

  • 随机初始化

    随机挑选K个训练样本,然后我要做的是设定μ1,,μk让它们等于这K个样本。

运行K均值方法,你可能会得到这样的聚类结果:

但是如果你运气特别不好,随机初始化K均值方法也可能会卡在不同的局部最优上面:

我们能做的是:初始化K均值很多次,并运行K均值方法很多次,通过多次尝试来保证我们最终能得到一个足够好的结果。一个尽可能局部或全局最优的结果。

  • 如果你运行K均值方法时,所用的聚类数相当小。比如聚类数是从2~10之间的任何数的话,做多次的随机初始化,通常能够保证你能有一个较好的局部最优解,保证你能找到更好的聚类数据。
  • 但是如果K非常大的话,比如K比10大很多,就不太可能会有太大的影响。事实上,这种情况下有可能你的第一次随机初始化就会给你相当好的结果。

肘部法则 (Elbow Method)

对于肘部法则,我们所需要做的是改变K的值(也就是聚类类别的总数)。

我们用K值为1~N 来运行K-均值聚类算法。这就意味着所有的数据会分到1~N个类里。然后分别计算他们的代价函数(或者说计算畸变)J

在这里,你会发现这样一种模式:K从1变化到2、再从2到3时,畸变值迅速下降;然后在3的时候,到达一个肘点。此后畸变值就下降得非常慢。这样看起来,也许使用3个类是聚类数目的正确选择。这是因为那个点是曲线的肘点。就是说畸变值快速地下降,直到K=3这个点,在这之后就下降得非常慢,那么我们就选K=3。

简单小结一下肘部法则:它是一个值得尝试的方法,但事实证明肘部法则并不那么常用,其中一个原因是如果你把这种方法用到一个聚类问题上,事实上你最后得到的曲线通常看起来是更加模棱两可的。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页