《机器学习算法的数学解析与Python实现》读书笔记:第9章 K-means聚类算法

目录

第9章 K-means聚类算法

9.1 用投票表决实现“物以类聚”

9.1.1 聚类问题就是“物以类聚”的实施问题

9.1.2 用“K”来决定归属类别

9.1.3 度量“相似”的距离

9.1.4 聚类问题中的多数表决

9.2 K-means聚类的算法原理

9.2.1 K-means聚类算法的基本思路

9.2.2 K-means聚类算法的数学解析

9.3 在Python中使用K-means聚类算法

9.4 K-means聚类算法的使用场景



第9章 K-means聚类算法

机器学习除了有监督学习之外,还有一个大类为无监督学习。实际上,在现实的生产环境中,大量数据处于没有标注的状态,也就是没有“参考答案”的,要使这些数据发挥作用,就必须使用无监督学习。这也是为什么许多人认为无监督学习将会是机器学习的下一个发展方向。

9.1 用投票表决实现“物以类聚”

 机器学习有两大类学习形式,分别是有监督学习和无监督学习,两者最大的区别在于有没有“监督”,也就是有没有“参考答案”。前面我们讨论了怎样用机器学习算法解决回归问题和分类问题,这两类问题都属于有监督学习,也就是说,这些问题的数据集都可以划分成训练集和测试集,其中至少在用于训练模型的训练集中就包含了“参考答案”。

比如分类问题的训练集,每一条样本最后都会明确告诉你,在正确分类的情况下,这条样本应该属于哪个类。在有监督学习下,机器学习要做的就是让算法模型根据输入,尽可能地使预测结果与“参考答案”一致。

在机器学习中,给数据写“参考答案”称为数据标注任务,或者给数据打标签,这些工作同样是需要人工来完成。人力资源总是稀缺的,而部分涉及专业知识的数据更是需要经过专门培训人员才能完成,进一步提高了用人成本。

相比之下,在互联网时代,各个方面都会产生海量的数据,人工标注的速度不可能赶上数据产生的速度,这就意味着大部分数据都缺乏人工标注,无法通过有监督学习的方法进行机器学习。

无监督学习对于海量数据的分析处理,如探索数据的组成结构,有着得天独厚的优势。由于标注数据不足的问题始终是有监督学习的一大心病,因此业界也逐渐开始探索将有监督学习和无监督学习结合在一起。

首先通过聚类等无监督的学习的算法处理数据,通过各种假设和结合聚类结果来给数据打标签,然后再把这些数据输送给有监督学习来进行建模,使得未经人工标注的数据,也能起到提高有监督学习模型预测准确度的效果。

这种集两家之长的方法称为半监督学习,是当前机器学习研究的热点之一。

聚类问题是无监督学习中最为常见的一种问题,K-means是一款知名度最高的聚类算法之一,其以原理简明、实现容易等优点被广泛使用。通过K-means,一方面可以了解聚类所需要面临的共性问题,另一方面也提供了面对问题的思考方法和实际可行的解决思路。

9.1.1 聚类问题就是“物以类聚”的实施问题

聚类问题最基本的原则:找相似。

有监督学习的数据都需要经过标注,这是它的特点,也是短板,分类问题也不例外,所有的训练集样本已经标注好了归属于哪个类别,模型算法只管去拟合就好。

所谓的分类就是找共同点:相同点多了就是同一类,不同点多了就不是同一类。

9.1.2 用“K”来决定归属类别

在聚类问题中,“簇”(Cluster)是一个处于核心位置的概念,样本数据集通过聚类算法最终会聚成一个个“类”,这些类在机器学习的中文术语里就称为“簇”。

“聚类”的单词为Clustering,而“簇”的单词为Cluster,从词形就可以很直观地看出后者正是前者的行为结果。聚类问题就是把一个个天女散花般的样本数据点汇聚成一个个老老实实的簇,方法也简单,核心思想就是“合并同类项”。

聚类最终将产生多少个不同的簇是聚类算法首先要面对的问题。

不同的聚类算法采取了不同的思路,主要分为划分法、层次法、密度法和网格法,不过解决思路概括起来无非两种,一种是预先设定有多少个簇,另一种则是其在聚类的过程中形成。

划分法是最简单、最容易实现的聚类算法,所谓划分,就是预先假设待聚类的n个数据将能划分为K个区域(K小于或等于n),即聚类后形成K个簇,在这个假设基础上再采取各种手段完成聚类,也就是采取第一种解决思路。K-means算法就是一种具有代表性的典型划分法。

在多数表决类的算法中,最终的结果完全依赖于表决,表决的过程清晰明确,唯一可能发生变化的就是表决权问题。这个“多数表决”是有一个前置条件的,而这个K正是框定表决范围的决定性因素,完整的说法应该是“在K以内的多数表决”。

9.1.3 度量“相似”的距离

聚类的基本原则就是“找相似”,说明聚类过程就是让相似的样本互相抱团的过程。聚类首先得明确一个度量相似的标准。

K-means和KNN有诸多相似之处,但二者要解决的问题存在性质上的不同,因此算法上也同样存在显著区别,其中最明显的就是K-means聚类算法还需要解决最后一个重要问题,这就是“找质心”,这也是算法名称中“means”的由来。

9.1.4 聚类问题中的多数表决

KNN和K-means两款机器学习算法有着诸多相似之处,出发点都是“物以类聚,人以群分”,都采用了多数表决原则,而且都以“距离”作为相似的量化度量。其中最显眼的相似点就是它们的名字中都带有首字母“K”,“K”相当于数学里的“n”,代表“多”的意思。

字母“K”的出现往往还预示着这款算法将使用多数表决原则,这既是KNN算法和K-means算法最大的相同之处,同时也是最大的不同之处。

K-means和KNN算法的最大不同在于问题,KNN算法用于解决分类问题,所以多数表决的表决内容是“当前待分类样本点属于哪一个分类”,也就是总会有一个待判别样本点,可以以该点为中心、以距离为度量工具找到邻近样本点,也就是找到“朋友圈”以划定表决权,然后由圈中样本点来进行表决。

假设聚类问题的样本数据也能找到K个中心点,就能同样以该点为中心、以距离为度量划出范围来,将同一范围内的数据样本点作为一个簇,就可以实现聚类的效果。

可最大的问题是没有这个中心点。

K-means算法在数据集中随机选取K个中心点,称为“质心”。“means”是均值的意思,我们可以用均值来调整质心,从而让随机选取的K个质心也能最终达到我们期望的目标。

假设现在我们通过K个之心得到了K个簇,现在需要做的是怎样让这K各簇形成新的质心。做法有很多,K-means算法选择了最简单的一种:求平均。每个簇都有若干数据点,求出这些数据点的坐标值均值,就得到了新质心的坐标值。

根据全体拥有表决权的数据点的坐标来共同决定新的质心在哪里,而表决权则由簇决定。在K-means聚类的过程中会多次经历质心计算,数据点归属于哪个簇可能会频繁变动,所以,同一个数据点可能在这一轮与一群样本点进行簇A的质心计算,在下一轮就与另一群样本点进行簇B的质心计算。

这也是该算法与KNN算法较为不同的地方。

9.2 K-means聚类的算法原理

9.2.1 K-means聚类算法的基本思路

K-means聚类算法的聚类过程,可以看成是不断寻找簇的质心的过程,这个过程从随机设定K个质心开始,直到找到K个真正质心为止。

首先逐个计算数据集点到K个质心的距离,根据距离的远近,将数据集点分别划归距离最近的质心,也就是根据距离质心的远近完成一次聚类,形成K个类;然后就是选取新质心,这其实是一次对聚类内的所有数据点进行求均值计算。重复上述两个过程,也就是生成新质心后重新进行聚类,然后根据聚类结果再次生成新质心。一直重复这个过程,聚类就结束了。

9.2.2 K-means聚类算法的数学解析

1.找质心过程的本质

一言以蔽之,就是让簇内样本点到达各自质心的距离的总和最小。能够满足这个“最小”的K个质心,就是我们要找的质心。

2.距离的度量

我们的最终目标是找到K个簇组成的集合C,使得每个簇内数据样本点到质心的距离都能达到最小,从而使距离的总和最小。

对于K-means的数学表达式还有另一种解释,将距离看成是簇内数据样本点与质心的平方误差,平方误差越小,说明簇内数据样本点围绕质心越紧,通过最小化平方误差,也就找到了数据样本点最“扎实”的K个簇。

K-means算法的实现具体分五步:

1)随机选取K个对象,以它们为质心。

2)计算数据集到质心的距离。

3)将对象划归(根据距离哪个质心最近)。

4)以本类内所有对象的均值重新计算质心,完成后进行第二步。

5)类不再变化后停止。

9.3 在Python中使用K-means聚类算法

根据前面其他算法的介绍,同一算法族类各款算法都是大同小异,大的原理都相同,只有细部增减,但聚类算法正好相反,看似都是想把对象聚成K个类,但方法却似百花齐放,具有代表性的几个类如下:

1)KMeans类

2)MiniBatchKMeans类

3)DBSCAN类

4)MeanShift类

5)AffinityPropagation类

9.4 K-means聚类算法的使用场景

K-means算法原理简单,实现容易,能够很快地实现部署;聚类过程中只涉及求均值运算,不需要进行其他太复杂的运算,执行效率较高,而且往往能取得较好的聚类效果。

K-means算法最明显的问题就是需要先验地设置“K”,也就是根据外部经验人为地设置聚类的簇的个数。同时,由于需要求均值,这就要求数据集的维度属性类型应该是数值类型。此外,K-means算法使用随机选择的方法初始化质心,不同的随机选择可能对最终的聚类结果产生明显影响,增加了不可控因素。最后,“K-means”中的“means”也会带来一些原生的问题,如果数据集中出现一些孤立点,也就是远离其他数据集点的数据点时,会对聚类结果产生非常明显的扰动。

算法使用案例:如Google News会通过新闻聚合功能,将相同话题的新闻聚类,自动生成一个个不同话题的聚合新闻专栏,而其背后实现的技术就是聚类算法。

你可能感兴趣的:(#,python,机器学习,算法,kmeans,聚类)