中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-21 11:24:08 來源:腳本之家 閱讀:151 作者:MSTK 欄目:服務器

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.KMeans
import org.apache.spark.mllib.linalg.Vectors
object 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.2074999999998
Vectors 7.3 1.5 10.9 is belong to cluster:0
Vectors 4.2 11.2 2.7 is belong to cluster:0
Vectors 18.0 4.5 3.8 is belong to cluster: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

總結

本文關于Spark實現K-Means算法代碼示例的全部內容就到這里,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站:淺談七種常見的Hadoop和Spark項目案例、Spark的廣播變量和累加器使用方法代碼示例、Spark入門簡介等,如有不足之處,歡迎留言指出,小編會及時回復大家并更正,希望朋友們對本站多多支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌江| 福贡县| 兴国县| 图片| 阳春市| 丹棱县| 电白县| 浦北县| 南华县| 九江市| 新晃| 聊城市| 阳原县| 盐边县| 瑞安市| 黎平县| 赣榆县| 百色市| 绥德县| 时尚| 黑河市| 通许县| 南召县| 台北市| 阿克苏市| 南昌市| 康平县| 繁昌县| 旌德县| 淮安市| 临江市| 铁岭市| 黔西| 乐都县| 都匀市| 襄樊市| 龙游县| 沁源县| 安塞县| 衡东县| 论坛|