ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:483.27KB ,
资源ID:5330858      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5330858.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SparkMLlib学习报告kmeans算法.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

SparkMLlib学习报告kmeans算法.docx

1、SparkMLlib学习报告kmeans算法SparkMLlib学习报告K-Means算法分析及应用1. 引言随着大数据相关技术产业的逐步成熟,各种云计算、大数据技术发展迅速,其中由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发的Spark技术,以集大成的技术优势成为继Hadoop之后当今大数据领域极为活跃和热门的高效大数据通用计算平台。Spark技术体系基于RDD数据结构成功构建起一体化、多元化的大数据处理体系,在“One Stack To Rule Them All”思想的引领下,Spark成功使用Spark SQL、

2、Spark Streaming、MLLib、GraphX近乎完美解决了大数据中的Batch Processing、Streaming Processing、Ad-hoc Query等三大核心问题。在Spark中Spark SQL、Spark Streaming、MLLib、GraphX四大框架和库之间可以无缝的共享数据和操作,这是其它大数据平台都无可匹敌的优势。从Spark Summit上的信息看,目前Spark已获得世界多家顶级公司的支持,其中就包括Intel、IBM等,同时最大的四个Hadoop发行商都提供对Spark非常强有力的支持。MLlib 是Spark对常用机器学习算法的实现库,同

3、时包括相关的测试和数据生成器。MLlib采用高效迭代式、内存存储的分析计算,使得数据的计算处理速度大大高于普通的数据处理引擎,它目前支持四种常见的机器学习问题:二元分类,回归,聚类以及协同过滤,同时也包括一个底层的梯度下降优化基础算法。本文将详细介绍和分析Spark MLLib聚类分析算法中的K-Means算法,并用实际算例测试算法的性能和智能化表现。2. 机器学习及MLLib算法库在维基百科上对机器学习提出以下几种定义: 机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能; 机器学习是对能通过经验自动改进的计算机算法的研究; 机器学习是用数

4、据或以往的经验,以此优化计算机程序的性能标准;可以看出机器学习强调三个关键词:算法、经验、性能,即机器学习是数据通过算法构建出模型并对模型进行评估,若评估的性能达到要求,就拿这个模型来测试其他的数据,否则达不到要求就要调整算法来重新建立模型,再次进行评估,如此循环往复,最终获得满意的经验来处理其他数据的过程。2.1机器学习分类 通常机器学习可分为监督学习,无监督学习,半监督学习和强化学习四类。监督是从给定训练数据集中学习一个函数(模型),当新数据到来时,可以根据这个函数(模型)预测结果。其训练集要求包括输入和输出,也可以说是特征和目标。训练集中的目标是由人标注的。常见的监督学习算法包括回归分析

5、和统计分类(包括二元分类和多元分类)。与监督学习相比,无监督学习的训练集没有人为标注的结果,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则学习以及聚类分析等。常见算法包括 Apriori算法和K-Means算法。其学习目标是我们不告诉计算机怎么做,而是让计算机自己去学习怎样做一些事情。半监督学习是介于监督学习与无监督学习之间的一种机器学习方式,主要考虑如何利用少量的标注样本和大量的未标注样本进行训练和分类的问题。半监督学习对于减少标注代价,提高学习机器性能具有常重大的实际意义。主要算法有:基于概率的算法、在现有监督算法基础上进行修改的方法、直接依赖于聚类假设的方法等。强化学

6、习通过观察来学习动作的完成,每个动作都会对环境有所影响,学习对象根据观察到的周围环境的反馈来做出判断。在这种学习模式下,输入数据是作为对模型的反馈,而不像监督模型那样,输入数据仅仅是作为一个检查模型对错的方式,在强化学习下,输入数据直接反馈到模型,模型必须对此立刻做出调整。常见的应用场景包括动态系统以及机器人控制等。常见算法包括Q-Learning以及时间差学习。2.2. MLLib算法库MLlib目前支持4种常见的机器学习问题:分类、回归、 聚类和协同过滤,MLlib在Spark整个生态系统中的位置如图下图2-1所示:图2-1 Spark生态系统图分类算法属于监督式学习,使用类标签已知的样本

7、建立分类函数或分类模型,再应用分类模型把数据库中类标签未知的数据进行归类。分类在数据挖掘中是一项重要任务,目前在商业上应用最多,常见典型应用场景有流量预测、精确营销、客户获取、个性偏好等。MLlib目前支持的分类算法有:逻辑回归、支持向量机、朴素贝叶斯和决策树。回归算法属于监督式学习,每个个体都有一个与之相关联的实数标签,并且我们希望在给出用于表示这些实体的数值特征后,所预测出的标签值可以尽可能接近实际值。MLlib目前支持回归算法有:线性回归、岭回归、Lasso和决策树。聚类算法属于无监督式学习,通常被用于探索性分析,是根据“物以类聚”的原理,将本身没有类别的样本聚集成不同的组,这样的一组数

8、据对象的集合叫做簇,并对每一个这样的簇进行描述的过程。它的目的是使得属于同一簇的样本之间应该彼此相似,而不同簇的样本应该足够不相似,常见的典型应用场景有客户细分、客户研究、市场细分、价值评估。 MLlib 目前支持广泛使用的 K-Mmeans 聚类算法。协同过滤常被应用于推荐系统,这些技术旨在补充用户-商品关联矩阵中所缺失的部分。MLlib当前支持基于模型的协同过滤,其中用户和商品通过一小组隐语义因子进行表达,并且这些因子也用于预测缺失的元素。3. K-Mmeans算法分析聚类分析是一个无监督学习过程,一般是用来对数据对象按照其特征属性进行分组,经常被应用在客户分群,欺诈检测,图像分析等领域。

9、K-Means 算法是最有名并且最经常使用的聚类算法,其原理比较容易理解,并且聚类效果良好,有着广泛使用。和诸多机器学习算法一样,K-Means算法也是一个迭代式算法,其主要流程如下图3-1所示:图3-1 K-Means算流程图在K-Means算法中,衡量距离一般有多个函数可以选择,最常用的是欧几里得距离,也叫欧式距离。公式如下式(1):(1)(其中 C 代表中心点,X 代表任意一个非中心点)在实际应用中,K-Means算法有两个不得不面对并且克服的问题:1) 聚类个数 K 的选择;2) 初始聚类中心点的选择。3.1. K的选择由于聚类算法是无监督学习,K 的选择是一个比较有学问和讲究的步骤,

10、事实上K应该取决于数据的内在结构。Spark MLlib在KMeansModel类里提供了computeCost方法,该方法通过计算所有数据点到其最近的中心点的平方和来评估聚类的效果。为了测试该算法的执行效果,设计一组具有明显分组倾向的数据,设计算法对不同的K值分别进行训练并对训练得到KMeansModel对象调用computeCost方法,观察computeCost方法的执行结果,并进行分析。用MATLAB生成如下图3-2所示测试数据,可以看出该数据明显具有分为4组的倾向。图3-2 测试数据分布图设计算法对K取2、3、4、5、6、7、8、9、10、11、12时,分别进行训练建模,并对训练得到

11、KMeansModel对象调用computeCost方法,代码如下3-3截图所示:图3-3 测试代码截图当K分别取2、3、4、5、6、7、8、9、10、11、12时,computeCost方法的计算结果如下图3-4所示:图3-4computeCost方法计算结果图可以看出,正常情况下K越大,computeCost方法计算结果就越小,这是显而易知的。但是结果显示在K=3和K=4时computeCost方法计算结果的下降趋势是最大的,这正是因为数据分组的明显倾向性所致,因此该测试数据合理的K取值应该为3或4。一般来说,同样的迭代次数和算法运行次数,computeCost结果值越小代表聚类效果越好。

12、但在实际应用中,还需要考虑到聚类结果的可解释性,不能一味选择使computeCost结果值最小的那个 K。3.2. 初始聚类中心的选择K-Means算法中选择不同的初始聚类中心可能导致聚类结果的差异。Spark MLlib K-means算法的实现在初始聚类点的选择上,借鉴了一个K-Means并行化演化版本K-means|的类 K-means+ 实现。K-means+ 算法在初始点选择上遵循一个基本原则: 初始聚类中心点相互之间的距离应该尽可能远,其基本步骤为: Step1:从数据集 X 中随机选择一个点作为第一个初始点; Step2:计算数据集中所有点与最新选择的中心点的距离 D(x); S

13、tep3:选择下一个中心点,使得最大; Step4:重复Step2、Step3过程,直到 K 个初始点选择完成。3.3. K-Means算法参数分析Spark MLlib中K-Means算法的实现类 (KMeans.scala) 具有以下参数,类声明如下:1. classKMeansprivate (2. private valk : scala.Int,3. private valmaxIterations : scala.Int, 4. private valruns : scala.Int, 5. private valinitializationMode : scala.Predef.

14、String, 6. private valinitializationSteps : scala.Int, 7. private valepsilon : scala.Double, 8. private valseed : scala.Long) 9. extends scala.AnyRefwith scala.Serializablewith org.apache.spark.Logging各参数的含义解释如下: k表示期望的聚类个数; maxInterations表示方法单次运行最大的迭代次数; runs表示算法被运行的次数,K-means算法不保证能返回全局最优的聚类结果,所以在目

15、标数据集上多次运行K-means算法,有助于返回最佳聚类结果; initializationMode表示初始聚类中心点的选择方式, 目前支持随机选择或者 K-means|方式,默认是 K-means|; initializationSteps表示 K-means|方法中的步数; epsilon表示K-means算法迭代收敛的阀值; seed表示集群初始化时的随机种子。通常应用时,我们都会先调用KMeans.train方法对数据集进行聚类训练,这个方法会返回KMeansModel类实例,然后我们也可以使用KMeansModel.predict方法对新的数据点进行所属聚类的预测,这是非常实用的功能

16、。KMeans.train方法有很多重载方法,这里我们选择参数最全的一个展示:1. deftrain(2. data : org.apache.spark.rdd.RDDorg.apache.spark.mllib.linalg.Vector, 3. k : scala.Int, 4. maxIterations : scala.Int, 5. runs : scala.Int, 6. initializationMode : scala.Predef.String, 7. seed : scala.Long) : 8. org.apache.spark.mllib.clustering.KM

17、eansModel = /* compiled code */ KMeansModel.predict方法接受不同的参数,可以是向量,或者RDD,返回的是输入参数所属聚类的索引号。声明如下: defpredict(point : org.apache.spark.mllib.linalg.Vector) : scala.Int = /* compiled code */ defpredict(points : rg.apache.spark.rdd.RDDorg.apache.spark.mllib.linalg.Vector) : org.apache.spark.rdd.RDDscala.

18、Int = /* compiled code */ 通过上面的分析,我们就可以完成一次聚类分析从模型训练到聚类预测的全过程。4. K-Mmeans算法实践下面我们将用K-Means算法对实际测试数据进行聚类分析。我们用的目标数据集是来自 UCI Machine Learning Repository的Wholesale customer Data Set。UCI 是一个关于机器学习测试数据的下载中心站点,里面包含了适用于做聚类,分群,回归等各种机器学习问题的数据集。Wholesale customer Data Set是引用某批发经销商的客户在各种类别产品上的年消费记录。为方便处理,本实验把原

19、始CSV数据文件拆分成两个CSV文本文件并删除了数据文件首行的列名称数据,分别用于训练和测试。客户消费数据格式如下图4-1所示:图4-1 客户消费数据格式预览图数据每一列的含义如下图4-2所示:图4-2 客户消费数据属性说明图在本例中,根据目标客户的消费数据,将每一列视为一个特征指标,对数据进行聚类分析,代码实现如下图4-3:图4-3 聚类分析代码截图执行后得到的聚类中心结果如下图4-4所示:图4-4 聚类中心执行结果图执行后得到的预测结果如下图4-5所示(部分结果):图4-5 聚类预测执行结果图上述算例中将训练数据分为8组,因为在做聚类分析之前先用图3-3所示测试代码对训练数据进行了分组测试

20、,结果如下图4-6所示:图4-6 训练数据分组测试结果图从图4-6的运行结果可以看到,当 K=9 时,computeCost结果值有波动,但是后面又逐渐减小了,所以选择 8 这个临界点作为 K 的个数。多运行几次,就会发现结果不是稳定的,但大概临界位置在8、9、10、11四个值之间,可以通过多次测试找到一个相对稳定的 K 值。理论上 K 的值越大,聚类的 computeCost结果值越小,极限情况下,每个点都是一个聚类中心点,这时候computeCost结果为0,但是显然这不是一个具有实际意义的聚类结果。因此对具体的训练数据还应当根据聚类的实际意义考量聚类组数。可以看出算法程序对训练数据建立聚

21、类模型获得了8个聚类中心点,进而又对测试数据进行了合理的聚类预测,从而完成一次完成的聚类分析过程。聚类分析的智能性体现在无监督学习上,即我们没有告诉算法如何聚类,算法会自主通过学习过程分析数据内在结构,从而获得指定数目的聚类中心,进而对预测数据进行聚类预测,整个过程不需要人工干涉,算法会自行完成建模和预测的所有过程。5. 展望本文简单介绍了Spark的机器学习库,并且具体分析其中K-Means算法的基本原理,以及基于实际数据进行了聚类分析。在实际应用中机器学习应用的构建是一个复杂的过程,通常还需要对数据进行预处理,然后特征提取以及数据清洗等,最后才能利用算法来分析数据。Spark MLlib不

22、仅提供简单易用的 API,更重要的是Spark在处理大数据上具有高效性以及在迭代计算时具有独特优势。本文所采用的测试数据集很小,并且分配在本地运行,并不能反映大数据的应用场景,但是可以在此基本原理上轻松将本文的测试程序推广到大数据集群机器学习应用场景中,因为 Spark MLlib的编程模型都是一致的,无非是数据读取和处理的方式略有不同。相信在将来的大数据时代,Spark MLlib必将有更多广泛而实际的应用。6. 参考资料1Spark官方文档翻译.吴洪泽2XX百科.SPARK词条34UCI Machine Learning Repository.Wholesale customer Data Set

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1