机器学习笔记031 | 无监督学习算法——K均值(K-means)

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

1 无监督算法要做什么

在监督学习中,我们是先对数据给定了标签,然后进行学习。

和这个不同的是,无监督学习(Unsupervised Learning)是没有给定标签的。

我们希望通过某些聚类算法(Clustering Algorithm),自动就从这些数据中找到一些结构。

例如通过对市场的分割,方便精准地进行营销:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

例如对人群进行社交关系分类,自动推荐可能认识的人:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

2 K均值(K-means)算法

2.1 算法的直观印象

K均值(K-means)算法是现在广泛使用的聚类方法。

例如我们有这样的数据:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

算法将执行如下步骤,最终收敛到局部最优解:

一、设置聚类中心
二、对附近的数据进行染色归类
三、移动聚类中心到对应类别数据的均值所在位置
四、重复第二、三步,直到聚类中心不再移动

大概的过程如下图所示:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

2.2 算法的具体执行

假如对于训练样本集 { x(1), x(2), x(3), … ,x(m) } ,我们有 K 个聚类。

我们将每个聚类中心标记为:μ1, μ2, μ3, …,μK

对于每一个数据点 x(i) ,其和所有聚类中心 μk 的距离记为:
|| x(i) – μk || 。

我们需要找到使得这个距离最小的聚类 k ,然后使用 c(i) = k 进行标记。

例如我们总共有5个聚类中心,点 x(10) 距离每个聚类中心的距离为:

|| x(10) – μ1 || = 21
|| x(10) – μ2 || = 16
|| x(10) – μ3 || = 11
|| x(10) – μ4 || = 6
|| x(10) – μ5 || = 1

那么就有 c(10) = 5 。

以上就是 2.1 中第二步所执行的过程。

接下来就是对同类数据,求得其均值,并以此作为新的聚类中心,也就是第三步。

例如,除了 c(10) = 5 之外,我们还得到 c(1) = 5 , c(5) = 5 , c(6) = 5 ,那么就有:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

2.3 算法的优化目标

我们之前学习线性回归、逻辑回归的时候,都有一个优化目标,就是其代价函数。

对于K均值(K-means)算法,同样也有这样的优化目标:那就是使得各个数据点距离聚类中心的距离总和最小,也就是下图中所有红线和蓝线加起来的总长度最小。

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

K均值(K-means)算法的代价函数是:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

我们的优化目标就是 min J( c(1) , … , c(m) , μ1 , … , μK) 。

2.4 随机初始化

对于这样的训练数据:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

我们是希望把它们分成三类的:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

但有时候,因为初始化的选择,我们得到的不是全局最优解,而是局部最优解。得到的结果可能是这样的:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

也可能是这样的:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

这样的分类结果,都不是我们所期望的。

面对这样的问题,我们应该怎么办呢?

多次进行随机初始化,以及运行 k-means 算法,最终选择代价函数最小的一个结果。

这个次数,可以在 50 到 1000 次左右。

随着运行次数的增加,经常都能找到较好的局部最优解。

当然如果聚类中心数量 K 很大的话,得到的结果可能不会好太多。

2.5 聚类中心数量 K 的选择

首先我们可以知道的是, K 应该小于训练样本数量 m,如果聚类中心的数量比训练样本数量还要大,那么还分类个啥。

那这个数量应该如何选择呢?

K 的大小,常常是模凌两可的,例如下面这个图:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

我们既可以认为 K = 4 :

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

也可以认为 K = 2 :

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

有一个方法叫做肘部法则(Elbow Method),可以给我们提供一个参考。

例如下图,随着聚类中心个数 K 的增加,其代价函数计算的结果会下降:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

我们说图中这个位置(之后的下降都不太明显),就是应该设置的聚类中心个数 K 。

但是有时候,我们绘出的图形是这样的:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

这样的情况,我们就找不到比较明显的肘部。

所以说,肘部法则值得尝试,但是对其结果不要抱有太大的期待。

对于聚类中心个数 K 的选择,更多是人工进行的。

这主要看我们运行K均值(K-means)算法来达到什么目的。

例如一个 T-shirt 的销售商,有客户的一些身高和体重数据:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

它可以将这些数据划分为三组,对应着衣服的大小为 S、M、L:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

也可以将这些数据划分为五组,对应着衣服的大小为 XS、S、M、L、XL:

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

T-shirt 型号种类应该如何划分,其实可以从销售的角度考虑。

例如怎么样才能怎样才能让顾客购买的最多。

文章转载自公众号:止一之路

《机器学习笔记031 | 无监督学习算法——K均值(K-means)》

    原文作者:止一之路
    原文地址: https://www.jianshu.com/p/d40235fe16a7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞