完成第二部分spark速成spark2.1.0版本6.41kmeans聚类算法_第1页
完成第二部分spark速成spark2.1.0版本6.41kmeans聚类算法_第2页
完成第二部分spark速成spark2.1.0版本6.41kmeans聚类算法_第3页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2017 年 3 月 11 日706【】博客内容由厦门大学数据库拥有,!返回 Spark首页KMeans 是一个迭代求解的聚类算法,其属于 划分(Partitioning) 型的聚类方法,即首先创建 K 个划分,然后迭代地将样本从一个划分转移到另一个划分来改善最终聚类的质量。ML 包下的 KMeans 方法位于 包下,其过程大致如下:.apache.spark.ml.clusteringSpark 2.1.0 入门:KMeans 聚类算法显然,初始划分中心的选取在很大程度上决定了最终聚类的质量,和 MLlib 包一样,ML 包内置的 类也提供了名为 KMeans| 的初始划分中心选择方法,它是

2、著名的 KMeans+ 方法的并行化版本,其是令初始聚类中心尽可能的互相远离,具体实现细节可以参见斯坦福大学的 B Bahmani 在 PVLDB上的 Scalable K-Means+,这里不再赘述。与 MLlib 版本的Kmeans相同,本文亦使用UCI 数据集中的鸢尾花数据Iris进行实验,它可以在 iris 获取,Iris 数据的样本容量为 150,有四个实数值的特征,分别代表花朵四个部位的尺寸,以及该样本对应鸢尾花的亚种类型(共有 3种亚种类型),如下所示:5.1,3.5,1.4,0.2,setosa.KMeans根据给定的 k 值,选取 k 个样本点作为初始划分中心;计算所有样本点

3、到每一个划分中心的距离,并将所有样本点划分到距离最近的划分中心;计算每个划分中样本点的平均值,将其作为新的中心;循环进行 23 步直至达到最大迭代次数,或划分中心的变化小于某一预定义阈值在使用前,引入需要的包:1.2. import.apache.spark.ml.linalg.Vectorsscalahttp:/blog/1454-2/javascript:void(0);http:/blog/1454-2/javascript:void(0);开启 的隐式转换:1. import spark.implicits._scalahttp:/blog/1454-2/javascript:void

4、(0);http:/blog/1454-2/javascript:void(0);的 已经创建。为了便于生成相应的 DataFrame,这里定义一个名为 的 case class作为 DataFrame 每一行(一个数据样本)的数据类型。1.scala case class m_instance (features: Vector)m_instance SparkSes下文中,默认名为 sparkRDDimport.apache.spark.ml.clustering.KMeans,KMeansM5.4,3.0,4.5,1.5,versicolor.7.1,3.0,5.9,2.1,virgin

5、ica.2.scalahttp:/blog/1454-2/javascript:void(0);http:/blog/1454-2/javascript:void(0);RDDm_instance过 RDD 的隐式转换.toDF()方法完成 RDD 到 DataFrame 的转换:1.scala val rawData = sc.textFile(file:/usr/local/spark/iris.txt)2.rawData:.apache.spark.rdd.RDDString = iris.csv MapPartitionsRDD48 at textFile at :333.4.scal

6、a val df = rawData.map(line =5.| m_instance( Vectors.dense(line.split(,).filt = p.matches(d*(.?)d*)6.| .map(_.toDouble) ).toDF()7.df:.apache.spark.sql.DataFrame = features: vectorscalahttp:/blog/1454-2/javascript:void(0);http:/blog/1454-2/javascript:void(0);与 MLlib 版的类似,使用了 filter 算子,过滤掉类,正则表达式d*(.?

7、)d*可以用于匹配实数类型的数字,d*使用了*限定符,表示匹配 0 次或多次的数字字符,.?使用了?限定符,表示匹配 0 次或 1 次的小数点。的结构中,并通在定义数据类型完成后,即可将数据读入defined class m_instance并调用其 fit()方法来生成相应的 Transformer 对象,很显然,在这里 KMeans 类是 Estimator,而用于保存训练后模型的 类则属于 Transformer:1.2.| setK(3).3.| setFeaturesCol(features).4.| setPredictionCol(prediction).5.| fit(df)6

8、.kmeansm: .apache.spark.ml.clustering.KMeansM = kmeans_d8c043c3c339scalahttp:/blog/1454-2/javascript:void(0);http:/blog/1454-2/javascript:void(0);与 MLlib 版本类似,ML 包下的 KMeans 方法也有 Seed(随机数)、Tol(收敛阈值)、K(簇个数)、MaxIter(最大迭代次数)、initMode(初始化方式)、initStep(KMeans|方法的步数)等参数可供设置,和其他的 ML 框架算法一样,用户可以通过相应的 set()方法来

9、进行设置,或以 ParamMap 的形式传入参数,这里为了简介期间,使用 方法设置了参数 K,其余参数均采用默认值。与 MLlib 中的实现不同,作为一个 Transformer,不再提供 predict()样式的方法,而是提供了一致性的 transform()方法,用于将在 DataFrame 中的给定数据集进行整体处理,生成带有簇的数据集:KMeansMset()scala val kmeansm= new KMeans().KMeansM在得到数据后,即可通过 ML 包的固有流程:创建 Estimator1.2. results:.apache.spark.sql.DataFrame =

10、 features: vector, prediction: scalahttp:/blog/1454-2/javascript:void(0);http:/blog/1454-2/javascript:void(0);为了方便观察,可以使用 方法,该方法将 中所有的数据组织成一个 Array 对象进行返回:1.scala results.collect().foreach(2.| row = 3.|prln( row(0) + is predicted as cluster + row(1)4.| )5.5.1,3.5,1.4,0.2 is predicted as cluster 26.7

11、.6.3,3.3,6.0,2.5 is predicted as cluster ,2.7,5.1,1.9 is predicted as cluster 010. .scalahttp:/blog/1454-2/javascript:void(0);http:/blog/1454-2/javascript:void(0);也可以通过类自带的clusterCenters 属性获取到模型的所有聚类中心情况:collect()KMeansMDataFramescala val results = kmeansm.transform(df)1.scala kmeansm.cluste

12、rCenters.foreach(2.| center = 3.|prln(Clustering Center:+center)4.| )5.Clustering Center:5.883606557377049,2.740983606557377,4.388524590163936,1.43442622950819646.Clustering Center:6.8538461538461535,3.076923076923076,5.715384615384614,2.0538461538461537.Clustering Center:5.005999999999999,3.4180000000000006,1.4640000000000002,0.2439999999999999scalahttp:/blog/1454-2/javascript:void(0);http:/blog/1454-2/javascript:void(0);(Within Set Sum of Squared Error, WSSSE) 的方法来度量聚类的有效性,在真实 K 值未知的情况下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论