机器学习笔记031 | 无监督学习算法——K均值(K-means
1 无监督算法要做什么
在监督学习中,我们是先对数据给定了标签,然后进行学习。
和这个不同的是,无监督学习(Unsupervised Learning)是没有给定标签的。
我们希望通过某些聚类算法(Clustering Algorithm),自动就从这些数据中找到一些结构。
例如通过对市场的分割,方便精准地进行营销:
例如对人群进行社交关系分类,自动推荐可能认识的人:
2 K均值(K-means)算法
2.1 算法的直观印象
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 ,那么就有:
2.3 算法的优化目标
我们之前学习线性回归、逻辑回归的时候,都有一个优化目标,就是其代价函数。
对于K均值(K-means)算法,同样也有这样的优化目标:那就是使得各个数据点距离聚类中心的距离总和最小,也就是下图中所有红线和蓝线加起来的总长度最小。
K均值(K-means)算法的代价函数是:
我们的优化目标就是 min J( c(1) , … , c(m) , μ1 , … , μK) 。
2.4 随机初始化
对于这样的训练数据:
我们是希望把它们分成三类的:
但有时候,因为初始化的选择,我们得到的不是全局最优解,而是局部最优解。得到的结果可能是这样的:
也可能是这样的:
这样的分类结果,都不是我们所期望的。
面对这样的问题,我们应该怎么办呢?
多次进行随机初始化,以及运行 k-means 算法,最终选择代价函数最小的一个结果。
这个次数,可以在 50 到 1000 次左右。
随着运行次数的增加,经常都能找到较好的局部最优解。
当然如果聚类中心数量 K 很大的话,得到的结果可能不会好太多。
2.5 聚类中心数量 K 的选择
首先我们可以知道的是, K 应该小于训练样本数量 m,如果聚类中心的数量比训练样本数量还要大,那么还分类个啥。
那这个数量应该如何选择呢?
K 的大小,常常是模凌两可的,例如下面这个图:
我们既可以认为 K = 4 :
也可以认为 K = 2 :
有一个方法叫做肘部法则(Elbow Method),可以给我们提供一个参考。
例如下图,随着聚类中心个数 K 的增加,其代价函数计算的结果会下降:
我们说图中这个位置(之后的下降都不太明显),就是应该设置的聚类中心个数 K 。
但是有时候,我们绘出的图形是这样的:
这样的情况,我们就找不到比较明显的肘部。
所以说,肘部法则值得尝试,但是对其结果不要抱有太大的期待。
对于聚类中心个数 K 的选择,更多是人工进行的。
这主要看我们运行K均值(K-means)算法来达到什么目的。
例如一个 T-shirt 的销售商,有客户的一些身高和体重数据:
它可以将这些数据划分为三组,对应着衣服的大小为 S、M、L:
也可以将这些数据划分为五组,对应着衣服的大小为 XS、S、M、L、XL:
T-shirt 型号种类应该如何划分,其实可以从销售的角度考虑。
例如怎么样才能怎样才能让顾客购买的最多。
文章转载自公众号:止一之路