小孩都看得懂的聚类
- 2019 年 10 月 7 日
- 笔记
预计阅读时间 8 分钟。
本文是“小孩都看得懂”系列的第四篇,本系列的特点是没有公式,没有代码,只有图画,只有故事。内容不长,碎片时间完全可以看完,但我背后付出的心血却不少。喜欢就好!
- 小孩都看得懂的神经网络
- 小孩都看得懂的推荐系统
- 小孩都看得懂的逐步提升
- 小孩都看得懂的聚类
本文所有思路都来自 Luis Serrano 的油管视屏“Clustering: K-means and Hierarchical”,纯纯的致敬!我只是加了点场景使得内容更通俗点。
聚类是无监督学习中的最常见的方法,本帖介绍两种聚类方法:
- K 均值聚类 (K-Means Clustering), 1-3 节
- 层次聚类 (Hierarchical Clustering), 4-6 节
1
新加坡唐人街 (Chinatown) 开了家王大爷烧烤,店里每天生意不错,而且还有很多人叫外卖。

今天,店里收到很多外卖单子,如下图灰点所示,那么王大爷应该派多少个外卖员去送货呢?

直观来说,应该派 3 名送外卖的,每个人负责一区,如下图红、蓝、黄区所示。

那么这三个区是怎么聚类出来的呢?
2
方法太简单了,首先随机选三个点作为簇心 (centroid),如下图红、蓝、黄色五角星。为什么选三个下节解释,先接受它。

对每个灰点,计算它们到三个簇心的距离,离什么颜色簇心最近,就涂成什么颜色。

第一次“聚类”过程完毕,如下图。

根据最新聚类结果重新计算它们的簇心,如下图。

问题来了,有三个蓝点明显离黄色簇心更近呢。怎么办呢?把它们变成黄色呗。


同理,对下图两个红点。


根据最新聚类结果重新计算它们的簇心,如下图。

再继续更正聚类错误的点。


根据最新聚类结果重新计算它们的簇心,直到没有任何聚类错误的点,如下图。

聚类完毕,一个值得思考的问题是到底需要多少个簇 (cluster) 呢?用肘部法则 (elbow method)。
3
实现我们是不知道有多少个簇心的,那就试着穷举几个,比如 1 到 6 个。按照上节的思路,做 6 次聚类过程直到收敛,如下图。
- 1 个簇心不需要任何聚类 …
- 3 个簇心是上节结果 …
- 6 个簇心聚成 6 组
极限情况,我们有 22 个点,如果设 22 个簇心,那么每个点都被涂成不同颜色,但这样毫无意义。

在每种情况下,计算同一簇内两点间距离最大值。

将距离值 (y) 和簇心个数 (x) 画图,连线,找到一个类似胳膊肘的点,就选对应的簇心个数,解释在图中写出了。

4
K 均值聚类讲完了,接下来看看层次聚类。这次数据用少点,因为画着太累

。

5
层次聚类的规则不要太简单,每次找到距离最近的两个点,聚成一组,再重复直到。。。












直到两点距离太远了!!!这都能聚成一组真有点说不过去了,停了!


层次聚类完毕,一个值得思考的问题是如何决定两点之间距离“过大”而停止继续聚类呢?用树形图 (dendrogram)。
6
将数据点编号,作为树形图的横轴刻度,而纵轴是距离值,如下图所示。

按照上节的规则,找到找到距离最近的两个点,聚成一组。记下这两点的标号,在树形图上画出其距离 (红色半圈)。
不停的这样做,知道把所有数据聚成一组。







画完树形图后,我们可以根据“不希望两点距离超过 d”来对其裁剪,如下图。这样我们得到上节的结果,把数据聚成两类。

此外,我们还可以根据“希望聚成 4 类”来对其裁剪,如下图。

小结
K 均值聚类和层级聚类都非常简单,而确定它们聚类的停止条件,分别是肘部法则和树形图也很直观。不管数据有多少维,肘部法则和树形图永远是二维图。
聚类方法的应用也特别多,比如多因子投资中聚类数目繁多的因子,胶囊网络里面也有 K 均值聚类的影子等等。
这次你看懂了么?