机器学习第八周(一)--K-means

来源:互联网 发布:淘宝特卖苹果手机 编辑:程序博客网 时间:2024/06/03 22:55

  • 聚类Clustering
    • 无监督介绍和聚类引入
    • K-means算法
      • K-means规范表述
        • 更具体的
      • K-means处理未分离的簇
      • 目标优化
        • K-means优化函数目的
        • K-means的优化函数
      • 随机初始化
        • 随机初始化注意
      • 选择簇的数量
        • 肘部法则
        • 通过后续目的来判定

聚类(Clustering)


无监督介绍和聚类引入

正如我们前面所说,监督学习问题的数据带有标签,目的是找到一个分界面使带标签的数据分隔开。而无监督学习问题是不带标签的,如下
无监督学习
希望能通一种算法将这些数据分为俩类,这种算法我们就成为聚类算法。
聚类的应用:
聚类应用
注意:解决无监督学习问题的算法不只有聚类一种。


K-means算法

K-means算法是现在用的最多的聚类算法。
K-means算法可以看做是一个迭代过程。主要有俩步:

  • 随机选取k个聚类中心
  • 1、簇分配
  • 2、移动聚类中心
  • 迭代直到收敛

最后得到的结果是一个收敛的,即聚类中心是不变的,接下来配合图具体说明。
图1
我们目的是要从这些绿色的点中分离数据,首先是随机选择俩个聚类中心。然后计算所有数据中离这俩个中心更近的数据。离红叉更近的点我们标为红色。离蓝叉更近的点标为蓝色。这就是簇分配的过程。得到的结果如下:
图2
接着计算所有红色点的均值,并把红叉移动到均值处。蓝色点同样。即移动聚类中心。结果如下:
图3
得到俩个新的聚类中心后,再进行簇分配、移动聚类中心过程。直到达到收敛的过程,即聚类中心不再移动。结果如下:
图4


K-means规范表述

规范表述
K-means算法俩个输入,聚类数量和训练数据。这里要注意的是我们不考虑x0=1情况,所以整个训练样本是n维。

更具体的:

K-means算法
大K表示聚类中心数量,小k表示具体哪一个聚类中心。
簇分配:C(i)表示将数据分为哪一个聚类,求得【X(i)-uk)】距离的最小值即得C(i)。
移动聚类中心:求簇分配中X(i)的平均距离。将uk移向新的这个平均距离,得到新的聚类中心。
作者这里给出例子如图,C(1)、C(5)、C(6)、C(10)都等于2,就是说着四个数据都归为聚类u2。求x(1)、x(5)、x(6)、x(10)平均值,计算新的聚类中心。


注意:因为再K-means中我们是把数据分配给一个聚类中心,但是如果有一个聚类中心没有数据分配给它怎么办呢?通常情况下我们会移除那个聚类中心,这样结果得到K-1个簇。如果我们就是想要K个簇,那我们还是重新随机找一个聚类中心。幸好这个问题实际中不会经常出现。


K-means处理未分离的簇

以上我们举的例子都是分开好的簇,但是如果我们应对一些未分开的数据,K-means也能有很好的效果。
这里写图片描述
如上以T恤大小举例,以身高体重为主要特征收集一堆数据。尽管数据是连在一起的,用K-means算法也能分成三份。表示三个不同的顾客群体。


目标优化

之前学习的监督学习算法中都有个优化目标函数。即我们熟悉的损失函数。我们一般要对这个损失函数进行一个优化,往往是对其求最小值。K-means中也不例外。

K-means优化函数目的:

  • 1、 调试学习算法,确保K均值算法是在正确运行中。
  • 2、K均值优化目标函数将帮助我们找到更好的簇,并且避免局部最优解。

当K-means算法在运行时,我们需要记录俩个值,C(i)和uk。C(i)表示数据X(i)所归簇的索引。如果X(i)归为第五簇,那么C(i)=5。uk表示第k个簇的聚类中心。

K-means的优化函数

目标优化
如上图,给出了K-means的优化函数,我们可以看到优化函数主要是对X和Uc(i)的操作。优化函数要做的就是最小化图中右下角红线的距离。
我们称K-mans的优化函数为失真函数。
再来回顾一下K-means的俩个过程:
K-means俩个过程
我们可以将第一个过程看做在优化C(i)的过程。第二个过程看做优化Uk的过程。俩个过程分别对应失真函数的俩个决定因子。


随机初始化

在前面K-means的步骤中我们提到选取K个聚类中心的方法是随机选取,那么怎么随机选取呢???作者提出俩点:

随机初始化注意

  • 1、K< m 即聚类的数目要小于样本量
  • 2、随机选择K个训练样本,将这K个训练样本作为聚类中心
    随机初始化
    因为我们是随机选取样本作为聚类中心的,所以聚类的结果有不确定性。
    随机选取的聚类结果
    如果运气足够好,选择的三个聚类中心得到的局部最优恰巧就是全局最优。但是也有可能会陷入下面俩幅图的形状。如何改变这种情况呢???
    K值的随机选取进行多次,同样多次运行K-means算法,从得到的失真函数结果中挑取最小的一个。
    这里写图片描述
    作者这里推荐100次的K-means运行次数。从得到的100个失真函数中选取最小的那一个。通常,当K在2-10间时,随机初始化会有一个比较好的效果,但是如果K值很大的话,那么效果就不会有太大影响。

选择簇的数量

簇的数量选择没有一个统一的定论。大部分情况下仍然是根据可视化图或者手动选取。比如下面这堆数据可分为俩类也可分为四类,这都可以。
簇的选择
作者这里提供一些方法作为选取簇的参考:

肘部法则

肘部法则
对给定的数据,从K=1开始计算失真函数结果,如图中计算到K=8,从左图中我们可以看到从K=3开始,失真函数的下降明显变得更缓慢,(即是曲线的肘点)所以我们把K=3作为分类会是一个比较好的选择。但是但是!我们随着K值增大往往得到的失真函数图是右边的形状,这是一个平滑的曲线,也就没有左图那么好判断,这也是肘部法则的缺点。

通过后续目的来判定

仍然以卖T恤的例子说明。
后续目的
从商家盈利角度出发,当把T恤定位三个号还是五个号哪种方式盈利大一点,就采取哪种方式。
总结:大部分的簇的选取还是靠观察和手动选取,当这俩种方式行不通时,考虑肘部法则或者想一想用K-means的目的是什么。这样会有一个比较好的结果。