本文所有思路都来自 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 均值聚类的影子等等。
这次你看懂了么?
本篇文章来源于: 菜鸟学Python
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python round() 函数是什么09/11
- ♥ 如何在python中下载第三方库10/22
- ♥ Python 是计算机 2 级考试的可选项目吗?09/27
- ♥ python全局如何赋初值10/24
- ♥ python插入排序的优化11/05
- ♥ 看腻了杨幂,热巴,快来抓取上千张美女图片,古装美女看个够07/04
内容反馈