Spark实现K-Means算法代码示例
K-Means算法是一种基于距离的聚类算法,采用迭代的方法,计算出K个聚类中心,把若干个点聚成K类。
MLlib实现K-Means算法的原理是,运行多个K-Means算法,每个称为run,返回最好的那个聚类的类簇中心。初始的类簇中心,可以是随机的,也可以是KMean||得来的,迭代达到一定的次数,或者所有run都收敛时,算法就结束。
用Spark实现K-Means算法,首先修改pom文件,引入机器学习MLlib包:
org.apache.spark spark-mllib_2.10 1.6.0
代码:
importorg.apache.log4j.{Level,Logger} importorg.apache.spark.{SparkContext,SparkConf} importorg.apache.spark.mllib.clustering.KMeans importorg.apache.spark.mllib.linalg.Vectors objectKmeans{ defmain(args:Array[String])={ //屏蔽日志 Logger.getLogger("org.apache.spark").setLevel(Level.WARN) Logger.getLogger("org.apache.jetty.server").setLevel(Level.OFF) //设置运行环境 valconf=newSparkConf().setAppName("K-Means").setMaster("spark://master:7077") .setJars(Seq("E:\\Intellij\\Projects\\SimpleGraphX\\SimpleGraphX.jar")) valsc=newSparkContext(conf) //装载数据集 valdata=sc.textFile("hdfs://master:9000/kmeans_data.txt",1) valparsedData=data.map(s=>Vectors.dense(s.split("").map(_.toDouble))) //将数据集聚类,2个类,20次迭代,形成数据模型 valnumClusters=2 valnumIterations=20 valmodel=KMeans.train(parsedData,numClusters,numIterations) //数据模型的中心点 println("Clustercentres:") for(c<-model.clusterCenters){ println(""+c.toString) } //使用误差平方之和来评估数据模型 valcost=model.computeCost(parsedData) println("WithinSetSumofSquaredErrors="+cost) //使用模型测试单点数据 println("Vectors7.31.510.9isbelongtocluster:"+model.predict(Vectors.dense("7.31.510.9".split("") .map(_.toDouble)))) println("Vectors4.211.22.7isbelongtocluster:"+model.predict(Vectors.dense("4.211.22.7".split("") .map(_.toDouble)))) println("Vectors18.04.53.8isbelongtocluster:"+model.predict(Vectors.dense("1.014.573.8".split("") .map(_.toDouble)))) //返回数据集和结果 valresult=data.map{ line=> vallinevectore=Vectors.dense(line.split("").map(_.toDouble)) valprediction=model.predict(linevectore) line+""+prediction }.collect.foreach(println) sc.stop } }
使用textFile()方法装载数据集,获得RDD,再使用KMeans.train()方法根据RDD、K值和迭代次数得到一个KMeans模型。得到KMeans模型以后,可以判断一组数据属于哪一个类。具体方法是用Vectors.dense()方法生成一个Vector,然后用KMeans.predict()方法就可以返回属于哪一个类。
运行结果:
Clustercentres: [6.062499999999999,6.7124999999999995,11.5] [3.5,12.2,60.0] WithinSetSumofSquaredErrors=943.2074999999998 Vectors7.31.510.9isbelongtocluster:0 Vectors4.211.22.7isbelongtocluster:0 Vectors18.04.53.8isbelongtocluster:1 0.00.05.00 0.110.10.10 1.25.213.50 9.59.09.00 9.19.19.10 19.29.429.20 5.83.018.00 3.512.260.01 3.67.98.10
总结
本文关于Spark实现K-Means算法代码示例的全部内容就到这里,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:浅谈七种常见的Hadoop和Spark项目案例、Spark的广播变量和累加器使用方法代码示例、Spark入门简介等,如有不足之处,欢迎留言指出,小编会及时回复大家并更正,希望朋友们对本站多多支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。