机器学习经典算法详解及Python实现
聚类是一种无监督的学习(无监督学习不依赖预先定义的类或带类标记的训练实例),它将相似的对象归到同一个簇中,它是观察式学习,而非示例式的学习,有点像全自动分类。
说白了,聚类 (clustering)是完全可以按字面意思来理解的——将相同、相似、相近、相关的对象实例聚成一类的过程。机器学习中常见的聚类算法包括 k-Means算法、期望最大化算法(Expectation Maximization,EM,参考“EM算法原理”)、谱聚类算法(参考机器学习算法复习-谱聚类)以及人工神经网络算法,本文阐述的是K-均值聚类算法,本文介绍K-均值(K-means)和二分K-均值聚类算法。
机器学习经典算法详解及Python实现–K近邻(KNN)算法
机器学习经典算法详解及Python实现–线性回归(Linear Regression)算法
机器学习经典算法详解及Python实现–决策树(Decision Tree)
机器学习经典算法详解及Python实现–CART分类决策树、回归树和模型树
(一)何谓聚类
还是那句“物以类聚、人以群分”,如果预先知道人群的标签(如文艺、普通、2B),那么根据监督学习的分类算法可将一个人明确的划分到某一类;如果预先不知道人群的标签,那就只有根据人的特征(如爱好、学历、职业等)划堆了,这就是聚类算法。
聚类是一种无监督的学习(无监督学习不 依赖预先定义的类或带类标记的训练实例),它将相似的对象归到同一个簇中,它是观察式学习,而非示例式的学习,有点像全自动分类。
所谓簇就是该集合中的对 象有很大的相似性,而不同集合间的对象有很大的相异性。簇识别(cluster identification)给出了聚类结果的含义,告诉我们这些簇到底都是些什么。通常情况下,簇质心可以代表整个簇的数据来做出决策。聚类方法几乎 可以应用于所有对象,簇内的对象越相似,聚类的效果越好。
从机器学习的角度讲,簇相当于隐藏模式,聚类与分类的最大不同在于,分类学习的实例或数据对象有类别标记,而聚类则不一样,需要由聚类学习算法自动 确定标记。因为其产生的结果与分类相同,而只是类别没有预先定义,所以聚类也被称为无监督分类(unsupervised classification )。
聚类分析是一种探索性的分析,在分类的过程中,人们不必事先给出一个分类的标准,聚类分析能够从样本数据出发,自动进行 分类。聚类分析所使用方法的不同,常常会得到不同的结论。不同研究者对于同一组数据进行聚类分析,所得到的聚类数未必一致。
从实际应用的角度看,聚类分析 是数据挖掘的主要任务之一。而且聚类能够作为一个独立的工具获得数据的分布状况,观察每一簇数据的特征,集中对特定的聚簇集合作进一步地分析。聚类分析还 可以作为其他算法(如分类和定性归纳算法)的预处理步骤。
聚类分析试图将相似对象归入同一簇,将不相似对象归到不同簇,那么是否“相似”就要有所选择的相似度计算方法。现在,存在多种不同的相似度计算方 法,到底使用哪种相似度计算方法取决于具体应用,选择合适的相似度计算方法才会提高聚类算法的性能。机器学习中常用的相似性度量方法参考博文“机器学习中的相似性度量”。
聚类算法通常按照中心点或者分层的方式对输入数据进行归并,所以的聚类算法都试图找到数据的内在结构,以便按照最大的共同点将数据进行归类,其目标 是使同一类对象的相似度尽可能地大;不同类对象之间的相似度尽可能地小。
目前聚类的方法很多,根据基本思想的不同,大致可以将聚类算法分为五大类:层次聚 类算法、分割聚类算法、基于约束的聚类算法、机器学习中的聚类算法和用于高维度的聚类算法,参考“各种聚类算法的比较”。聚类算法的基本过程包含特征选择、相似性度量、聚类准则、聚类算法和结果验证等,具体参考“聚类算法学习笔记(一)——基础”。
说白了,聚类(clustering)是完全可以按字面意思来理解的——将相同、相似、相近、相关的对象实例聚成一类的过程。简单理解,如果一个数 据集合包含N个实例,根据某种准则可以将这N个实例划分为m个类别,每个类别中的实例都是相关的,而不同类别之间是区别的也就是不相关的,这就得到了一个 聚类模型了。判别新样本点的所属类时,就通过计算该点与这m个类别的相似度,选择最相似的那个类作为该点的归类。
既然聚类可以看做是一种无监督分类,那么其应用场景就是广泛的,包括用户群划分、文本分类、图像识别等等。当几乎没有有关数据的先验信息(如统计模 型)可用,而用户又要求尽可能地对数据的可能性少进行假设等限制条件下,聚类方法都适合用来查看数据点中的内在关系以对它们的结构进行评估、决策。
机器学习中常见的聚类算法包括 k-Means算法、期望最大化算法(Expectation Maximization,EM,参考“EM算法原理”)、谱聚类算法(参考机器学习算法复习-谱聚类)以及人工神经网络算法,本文介绍K-均值(K-means)聚类算法。
(二)K-均值(K-means)聚类算法
1. 认识K-均值聚类算法
K-均值算法是最简单的一种聚类算法,属于分割式聚类算法,目的是使各个簇(共k个)中的数据点与所在簇质心的误差平方和SSE(Sum of Squared Error)达到最小,这也是评价K-means算法最后聚类效果的评价标准。
k-means算法的基础是最小误差平方和准则。其代价函数是:
式中,μc(i)表示第i个簇的质心,我们希望得到的聚类模型代价函数最小,直观的来说,各簇内的样本越相似,其与该簇质心 的误差平方越小。计算所有簇的误差平方之和,即可验证分为k个簇时时的聚类是否是最优的。SSE值越小表示数据点越接近于它们的质心,聚类效果也越好。因 为对误差取了平方,因此更加重视那些远离中心的点。
一种肯定可以降低SSE值的方法是增加簇的个数,但这违背了聚类的目标,聚类的目标是在保持族数目不变 的情况下提高簇的质量。
k-均值(k-means)聚类算法之所以称之为k-均值是因为它可以发现k个不同的簇,且每个簇的中心采用簇中所含子数据集样本特征的均值计算而 成。k-均值是发现给定数据集的k个簇的算法,簇个数k由用户给定,每一个簇通过其质心( centroid) — 即簇中所有点的中心来描述。K-均值聚类算法需要数值型数据来进行相似性度量,也可以将标称型数据映射为二值型数据再用于度量相似性,其优点是容易实现, 缺点是可能收敛到局部最小值,在大规模数据集上收敛较慢。
假设训练样本数据集X为(m, n)维矩阵,m表示样本数、n表示每个样本点的特征数,那么k-均值聚类算法的结果就是得到一个kxn维矩阵,k表示用户指定的簇个数,每一行都是一个长 度为n的行向量–第i个元素就是该簇中所有样本第j(j=0,1,…,n-1)个特征的均值。下图是K-均值聚类算法聚类的过程:
2. 算法过程
K-均值算法的工作流程是这样的。首先,随机确定k个初始点作为质心;然后将数据集中的每个点分配到一个簇中–就是为每个点找距其最近的质心,并将 其分配给该质心所对应的簇;该步完成之后更新每个簇的质心(该簇所有数据样本特征的平均值);
上述过程迭代多次直至所有数据点的簇归属不再改变或者达到了 最大迭代次数Maxiteration。k-均值算法的性能会受到所选相似性度量方法的影响,常用的相似性度量方法就是计算欧氏距离。上述过程的伪代码表 示如下:
***************************************************************
创建k个点作为起始质心
任意点的簇分配结果发生改变时(循环内设置、维护标志位changed,也可同时设定最大迭代次数max)
对数据集中的每个数据点
对每个质心
计算质心与数据点之间的距离
将数据点分配到距其最近的簇(若有点的簇发生改变则置标志位为changed = True)
更新簇中心: 对每一个簇,计算簇中所有点的均值并将均值作为质心
***************************************************************
上述循环的终止条件是每个点的簇分配结果没有发生改变或者达到了最大循环次数。
初始化时k个质心的选择可以是随机的,但为了提高性能常用的方式是
(1)尽量选择距离比较远的点(方法:依次计算出与已确定的点(第一个点可以随机选择)的距离,并选择距离最大的点)。当k比较大时,这种方法计算量比较复杂,适合二分K-均值聚类算法的k值初始化。
(2)采取层次聚类的方式找出k个簇。 TBD
3. 特征值处理
K-均值聚类算法需要数值型数据来进行相似性度量,也可以将标称型数据映射为二值型数据再用于度量相似性。
另外,样本会有多个特征,每一个特征都有自己的定义域和取值范围,他们对distance计算的影响也就不一样,如取值较大的影响力会盖过取值较小 的参数。为了公平,样本特征取值必须做一些scale处理,最简单的方式就是所有特征的数值都采取归一化处置,把每一维的数据都转化到0,1区间内,从而 减少迭代次数,提高算法的收敛速度。
4. k值的选取
前面提到,在k-均值聚类中簇的数目k是一个用户预先定义的参数,那么用户如何才能知道k的选择是否正确?如何才能知道生成的簇比较好呢?与K-近邻分类算法的k值确定方法一样,k-均值算法也可采用交叉验证法确定误差率最低的k值,参考“机器学习经典算法详解及Python实现–K近邻(KNN)算法”的2.3节-k值的确定。
当k的数目低于真实的簇的数目时,SSE(或者平均直径等其他分散度指标)会快速上升。所以可以采用多次聚类,然后比较的方式确定最佳k值。多次聚 类,一般是采用 k=1, 2, 4, 8… 这种二分数列的方式,通过交叉验证找到一个k在 v/2, v 时获取较好聚类效果的v值,然后继续使用二分法,在 [v/2, v] 之间找到最佳的k值。
5. K-均值算法的Python实现
下载地址:TBD
K-均值算法收敛但聚类效果较差的原因是,K-均值算法收敛到了局部最小值,而非全局最小值(局部最小值指结果还可以但并非最好结果,全局最小值是 可能的最好结果)。为克服k-均值算法收敛于局部最小值的问题,有人提出了另一个称为二分k- 均值(bisecting K-means)的算法。
(三)二分K-均值(bisecting k-means)聚类算法
顾名思义,二分K-均值聚类算法就是每次对数据集(子数据集)采取k=2的k-均值聚类划分,子数据集的选取则有一定的准则。二分K-均值聚类算法 首先将所有点作为一个簇,第一步是然后将该簇一分为二,之后的迭代是:在所有簇中根据SSE选择一个簇继续进行二分K-均值划分,直到得到用户指定的簇数 目为止。根据SSE选取继续划分簇的准则有如下两种:
(1)选择哪一个簇进行划分取决于对”其划分是否可以最大程度降低SSE的值。这需要将每个簇都进行二分划分,然后计算该簇二分后的簇SSE之和并计算其与二分前簇SSE之差(当然SSE必须下降),最后选取差值最大的那个簇进行二分。
该方案下的二分k-均值算法的伪代码形式如下:
***************************************************************
将所有数据点看成一个簇
当簇数目小于k时
对每一个簇
计算总误差
在给定的簇上面进行k-均值聚类(k=2)
计算将该簇一分为二后的总误差
选择使得误差最小的那个簇进行划分操作
***************************************************************
(2)另一种做法是所有簇中选择SSE最大的簇进行划分,直到簇数目达到用户指定的数目为止,算法过程与(1)相似,区别仅在于每次选取簇中SSE最大的簇。
二分K-均值聚类算法的Python实现
数据分析咨询请扫描二维码
在准备数据分析师面试时,掌握高频考题及其解答是应对面试的关键。为了帮助大家轻松上岸,以下是10个高频考题及其详细解析,外加 ...
2024-12-20互联网数据分析师是一个热门且综合性的职业,他们通过数据挖掘和分析,为企业的业务决策和运营优化提供强有力的支持。尤其在如今 ...
2024-12-20在现代商业环境中,数据分析师是不可或缺的角色。他们的工作不仅仅是对数据进行深入分析,更是协助企业从复杂的数据信息中提炼出 ...
2024-12-20随着大数据时代的到来,数据驱动的决策方式开始受到越来越多企业的青睐。近年来,数据分析在人力资源管理中正在扮演着至关重要的 ...
2024-12-20在数据分析的世界里,表面上的技术操作只是“入门票”,而真正的高手则需要打破一些“看不见的墙”。这些“隐形天花板”限制了数 ...
2024-12-19在数据分析领域,尽管行业前景广阔、岗位需求旺盛,但实际的工作难度却远超很多人的想象。很多新手初入数据分析岗位时,常常被各 ...
2024-12-19入门数据分析,许多人都会感到“难”,但这“难”究竟难在哪儿?对于新手而言,往往不是技术不行,而是思维方式、业务理解和实践 ...
2024-12-19在如今的行业动荡背景下,数据分析师的职业前景虽然面临一些挑战,但也充满了许多新的机会。随着技术的不断发展和多领域需求的提 ...
2024-12-19在信息爆炸的时代,数据分析师如同探险家,在浩瀚的数据海洋中寻觅有价值的宝藏。这不仅需要技术上的过硬实力,还需要一种艺术家 ...
2024-12-19在当今信息化社会,大数据已成为各行各业不可或缺的宝贵资源。大数据专业应运而生,旨在培养具备扎实理论基础和实践能力,能够应 ...
2024-12-19阿里P8、P9失业都找不到工作?是我们孤陋寡闻还是世界真的已经“癫”成这样了? 案例一:本硕都是 985,所学的专业也是当红专业 ...
2024-12-19CDA持证人Louis CDA持证人基本情况 我大学是在一个二线城市的一所普通二本院校读的,专业是旅游管理,非计算机非统计学。毕业之 ...
2024-12-18最近,知乎上有个很火的话题:“一个人为何会陷入社会底层”? 有人说,这个世界上只有一个分水岭,就是“羊水”;还有人说,一 ...
2024-12-18在这个数据驱动的时代,数据分析师的技能需求快速增长。掌握适当的编程语言不仅能增强分析能力,还能帮助分析师从海量数据中提取 ...
2024-12-17在当今信息爆炸的时代,数据分析已经成为许多行业中不可或缺的一部分。想要在这个领域脱颖而出,除了热情和毅力外,你还需要掌握 ...
2024-12-17数据分析,是一项通过科学方法处理数据以获取洞察并支持决策的艺术。无论是在商业环境中提升业绩,还是在科研领域推动创新,数据 ...
2024-12-17在数据分析领域,图表是我们表达数据故事的重要工具。它们不仅让数据变得更加直观,也帮助我们更好地理解数据中的趋势和模式。相 ...
2024-12-16在当今社会,我们身处着一个飞速发展、变化迅猛的时代。不同行业在科技进步、市场需求和政策支持的推动下蓬勃发展,呈现出令人瞩 ...
2024-12-16在现代商业世界中,数据分析师扮演着至关重要的角色。他们通过解析海量数据,为企业战略决策提供有力支持。要有效完成这项任务, ...
2024-12-16在当今数据爆炸的时代,数据分析师是组织中不可或缺的导航者。他们通过从大量数据中提取可操作的洞察力,帮助企业在竞争激烈的市 ...
2024-12-16