K - means算法是一种基于距离的聚类算法,采用迭代的方法,计算出K个聚类中心,把若干个点聚成K类。
MLlib实现k - means算法的原理是,运行多个k - means算法,每个称为运行,返回最好的那个聚类的类簇中心。初始的类簇中心,可以是随机的,也可以是KMean | |得来的,迭代达到一定的次数,或者所运行都有收敛时,算法就结束。
用火花实现k - means算法,首先修改pom文件,引入机器学习MLlib包:
& lt; dependency> & lt; groupId> org.apache.spark & lt; artifactId> spark-mllib_2.10 & lt; version> 1.6.0 & lt;/dependency>
代码:
进口org.apache.log4j。{水平,记录器} 进口org.apache.spark。{SparkContext, SparkConf} 进口org.apache.spark.mllib.clustering.KMeans 进口org.apache.spark.mllib.linalg.Vectors 对象Kmeans { def主要(args:数组(String))={//屏蔽日志 Logger.getLogger (org.apache.spark) .setLevel (Level.WARN) Logger.getLogger (org.apache.jetty.server) .setLevel (Level.OFF)//设置运行环境 配置=new SparkConf瓦尔().setAppName (k - means) .setMaster(火花://主:7077) .setJars (Seq (“E: \ \ Intellij \ \项目\ \ SimpleGraphX \ \ SimpleGraphX.jar ")) val sc=new SparkContext(配置)//装载数据集 val data=https://www.yisu.com/zixun/sc.textFile (“hdfs://主:9000/kmeans_data.txt ", 1) val parsedData=https://www.yisu.com/zixun/data.map (s=> Vectors.dense (s.split (" ") . map (_.toDouble)))//将数据集聚类,2个类,20次迭代,形成数据模型 val numClusters=2 val numIterations=20=KMeans val模型。火车(parsedData numClusters numIterations)//数据模型的中心点 println(“集群中心:“) (c & lt; - model.clusterCenters) { println (" + c.toString) }//使用误差平方之和来评估数据模型 val成本=model.computeCost (parsedData) println(“在设置的平方误差的总和=" +成本)//使用模型测试单点数据 println(“向量7.3 1.5 10.9属于集群:“+ model.predict (Vectors.dense (“7.3 1.5 10.9”。分割(" ") . map (_.toDouble)))) println(“向量4.2 11.2 2.7属于集群:“+ model.predict (Vectors.dense (“4.2 11.2 2.7”。分割(" ") . map (_.toDouble)))) println(“向量18.0 4.5 3.8属于集群:“+ model.predict (Vectors.dense (“1.0 14.5 73.8”。分割(" ") . map (_.toDouble))))//返回数据集和结果 val=数据结果。{地图 行=比; val linevectore=Vectors.dense (line.split (" ") . map (_.toDouble)) val预测=model.predict (linevectore) 线+ " " +预测 }.collect.foreach println () sc.stop } }
使用文本文件()方法装载数据集,获得抽样,再使用KMeans.train()方法根据抽样,K值和迭代次数得到一个KMeans模型。得到KMeans模型以后,可以判断一组数据属于哪一个类。具体方法是用Vectors.dense()方法生成一个向量,然后用KMeans.predict()方法就可以返回属于哪一个类。
运行结果:
集群中心: (6.062499999999999,6.7124999999999995,11.5) (3.5,12.2,60.0) 在设置=943.2074999999998平方之和错误 向量7.3 1.5 10.9是属于集群:0 向量4.2 11.2 2.7是属于集群:0 向量属于集群18.0 4.5 3.8:1 0.0 0.0 5.0 0 0.1 10.1 0.1 0 1.2 5.2 13.5 0 9.5 9.0 9.0 0 9.1 9.1 9.1 0 19.2 9.4 29.2 0 5.8 3.0 18.0 0 3.5 12.2 60.0 1 3.6 7.9 8.1 0
本文关于火花实现k - means算法代码示例的全部内容就到这里,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:浅谈七种常见的Hadoop和火花项目案例,火花的广播变量和累加器使用方法代码示例,火花入门简介等,如有不足之处,欢迎留言指出,小编会及时回复大家并更正,希望朋友们对本站多多支持!