国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Web服務器 > 正文

Spark實現K-Means算法代碼示例

2024-09-01 13:53:09
字體:
來源:轉載
供稿:網友

K-Means算法是一種基于距離的聚類算法,采用迭代的方法,計算出K個聚類中心,把若干個點聚成K類。

MLlib實現K-Means算法的原理是,運行多個K-Means算法,每個稱為run,返回最好的那個聚類的類簇中心。初始的類簇中心,可以是隨機的,也可以是KMean||得來的,迭代達到一定的次數,或者所有run都收斂時,算法就結束。

用Spark實現K-Means算法,首先修改pom文件,引入機器學習MLlib包:

  <dependency>   <groupId>org.apache.spark</groupId>   <artifactId>spark-mllib_2.10</artifactId>   <version>1.6.0</version>  </dependency>

代碼:

import org.apache.log4j.{Level,Logger}import org.apache.spark.{SparkContext, SparkConf}import org.apache.spark.mllib.clustering.KMeansimport org.apache.spark.mllib.linalg.Vectorsobject Kmeans { def main(args:Array[String]) = { // 屏蔽日志 Logger.getLogger("org.apache.spark").setLevel(Level.WARN) Logger.getLogger("org.apache.jetty.server").setLevel(Level.OFF) // 設置運行環境 val conf = new SparkConf().setAppName("K-Means").setMaster("spark://master:7077")  .setJars(Seq("E://Intellij//Projects//SimpleGraphX//SimpleGraphX.jar")) val sc = new SparkContext(conf) // 裝載數據集 val data = sc.textFile("hdfs://master:9000/kmeans_data.txt", 1) val parsedData = data.map(s => Vectors.dense(s.split(" ").map(_.toDouble))) // 將數據集聚類,2個類,20次迭代,形成數據模型 val numClusters = 2 val numIterations = 20 val model = KMeans.train(parsedData, numClusters, numIterations) // 數據模型的中心點 println("Cluster centres:") for(c <- model.clusterCenters) {  println(" " + c.toString) } // 使用誤差平方之和來評估數據模型 val cost = model.computeCost(parsedData) println("Within Set Sum of Squared Errors = " + cost) // 使用模型測試單點數據 println("Vectors 7.3 1.5 10.9 is belong to cluster:" + model.predict(Vectors.dense("7.3 1.5 10.9".split(" ")  .map(_.toDouble)))) println("Vectors 4.2 11.2 2.7 is belong to cluster:" + model.predict(Vectors.dense("4.2 11.2 2.7".split(" ")  .map(_.toDouble)))) println("Vectors 18.0 4.5 3.8 is belong to cluster:" + model.predict(Vectors.dense("1.0 14.5 73.8".split(" ")  .map(_.toDouble)))) // 返回數據集和結果 val result = data.map {  line =>  val linevectore = Vectors.dense(line.split(" ").map(_.toDouble))  val prediction = model.predict(linevectore)  line + " " + prediction }.collect.foreach(println) sc.stop }}

使用textFile()方法裝載數據集,獲得RDD,再使用KMeans.train()方法根據RDD、K值和迭代次數得到一個KMeans模型。得到KMeans模型以后,可以判斷一組數據屬于哪一個類。具體方法是用Vectors.dense()方法生成一個Vector,然后用KMeans.predict()方法就可以返回屬于哪一個類。

運行結果:

Cluster centres: [6.062499999999999,6.7124999999999995,11.5] [3.5,12.2,60.0]Within Set Sum of Squared Errors = 943.2074999999998Vectors 7.3 1.5 10.9 is belong to cluster:0Vectors 4.2 11.2 2.7 is belong to cluster:0Vectors 18.0 4.5 3.8 is belong to cluster:10.0 0.0 5.0 00.1 10.1 0.1 01.2 5.2 13.5 09.5 9.0 9.0 09.1 9.1 9.1 019.2 9.4 29.2 05.8 3.0 18.0 03.5 12.2 60.0 13.6 7.9 8.1 0

總結

本文關于Spark實現K-Means算法代碼示例的全部內容就到這里,希望對大家有所幫助。如有不足之處,歡迎留言指出,小編會及時回復大家并更正,希望朋友們對本站多多支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贵德县| 肃南| 高尔夫| 永安市| 右玉县| 新乡县| 宁南县| 隆林| 确山县| 石城县| 开江县| 肃北| 望都县| 临江市| 潞城市| 慈溪市| 象山县| 星座| 从江县| 定边县| 克什克腾旗| 藁城市| 凌云县| 常山县| 聂拉木县| 漯河市| 尚志市| 通海县| 甘南县| 昌图县| 崇义县| 内黄县| 洪湖市| 库尔勒市| 黑山县| 教育| 分宜县| 彭阳县| 遂昌县| 龙口市| 临沧市|