机器学习笔记-11(聚类)

今天,来讲讲聚类算法。 这是课程中的第一个非监督机器学习算法,之前已经接触过,所以总体来说没啥难度。

监督学习算法和非监督学习算法的区别之前已经讲过了,这里就不多讲了,无非一个需要人工标注数据,一个是真正的自主学习,对于数据无需人工标注。

Supervised learning

监管学习

Unsupervised learning

非监管学习-聚类

关于聚类算法的应用,之前就说过了,最明显的莫过于Google News。当需要分析样本属于某一类的时候,就需要用到聚类算法了。聚类算法无需事先根据人工标注的数据进行训练,所以属于非监督学习。

这里咱将要讲到的是聚类算法中的一种–k-means(K平均)算法,整个算法总的来说是挺容易理解的。大体说下实现步骤吧。、

  1. 随机选取K个簇中点
  2. 迭代计算出每个数据与K个簇中心哪个最近并标记
  3. 迭代结束之后得到了K个簇的数据,分别计算每个簇的平均点用以重置簇中心
  4. 重复2、3步,直到收敛,簇中心不再变化

K-means figure

聚类的图像

这个算法只需要两个输入:K和Training set。输出:数据所在的簇。

具体算法实现如下图:

K-means algorithm

K平均算法的基本实现过程

K平均算法就算在不分离的数据集里面也可以有很好的聚类表现。

K-means for non-separated clusters

数据簇不明显的情况

之前的各种监督算法里,基本上每一个都有具体的优化目标,比如通过构造cost function进而用各种方法去寻求最小Cost。而K平均算法实际上也有这样一个Cost function(Distortion),咱的优化目标也是找到最小的Cost。仔细看上面算法实现的过程的话,咱可以发现里面具体的两个迭代,其实对应可以划分为两个优化目标,一个是不断优化C(i),另一个不断的优化U(i),所以这个Cost function就是求得最优C(i)和U(i)。

K-means optimization objective

K平均算法的优化目标

K-means alogorithm

K平均算法

在K平均算法里面的簇中心点随机选取的问题,你可以真正的确定一个范围进行随机选取,而课程里提到的另一种方法是随机的在训练集里面选取K(K如果比样本数大确实很诡异~)个数据元素当作簇中心,然后进行下一步操作。课程中的方法确实是个很好的方法,可以很好的避免簇中心的偏离问题。

Random initialization

在样本中随机初始化簇中心

但是即使是这样,随机选取簇中心,仍然可能无法避免局部最优的问题。所以机器选举委员会(之前在某个地方看到的一个说法,觉得隐喻的很妙。)就来了,也就是让机器自己投票做出最优选。咱对算法进行小小的改进,对整个算法运行上一定的次数,得出多个不同的Cost,再寻出最小cost的那次聚类的情况,这一定程度上可以逼近或得到全局最优。

Local optima

K平均算法的局部最优情况

Random initialization

运用了“机器选举委员会”的K平均算法

最后一节,谈了下K值的选取方法–Elbow method,直接做个坐标图,横轴K,纵轴Cost,绘制对应的线,找到Elbow点(就是斜率从高变低的那个折点)。一般来说,这个点下的K值,可以考虑为最优K值。本质上来说这还是一种人工选取的过程。Elbow method也不是万能的,对于K值的选取还是要具体情况具体去分析的。

Choosing the value of K

通过Elbow方法寻找K值

Choosing the value of K

实际上更多是视具体情况来确定K值

So,关于聚类就写到这里吧。

发表评论

电子邮件地址不会被公开。 必填项已用*标注