火花实现k - means算法代码示例

  

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和火花项目案例,火花的广播变量和累加器使用方法代码示例,火花入门简介等,如有不足之处,欢迎留言指出,小编会及时回复大家并更正,希望朋友们对本站多多支持!

火花实现k - means算法代码示例