參考資料:web
【1】Spark Mlib 機器學習實踐算法
【2】機器學習apache
【3】深刻淺出K-means算法 http://www.csdn.net/article/2012-07-03/2807073-k-means機器學習
1、概念學習
K-means聚類是在無監督的狀況下,將樣本數據進行聚類。以2均值聚類的算法爲例:編碼
一、在樣本中選擇兩個初始化中心點;spa
二、計算全部樣本到這兩個中心點的距離,並以此爲基準將樣本分爲兩類;.net
三、將中心點移到這類樣本的新中心點;code
四、重複二、3步驟直到知足要求;blog
K-means也提供一種k維的one-hot編碼,即當x屬於聚類i時,那麼對應的編碼向量爲1,不然爲0
2、距離
K-means的計算依賴樣本之間的距離計算,一般有以下幾種:
3、Spark Mlib下例子
package kmean import org.apache.spark.mllib.clustering.KMeans import org.apache.spark.mllib.linalg.Vectors import org.apache.spark.{SparkContext, SparkConf} /*- * kmean聚類 * Fredric 2017 */ object kmean { def main(args:Array[String]): Unit ={ val conf = new SparkConf().setMaster("local").setAppName("kmean") val sc = new SparkContext(conf) //每個向量表明特徵空間中的一個點 val v0 = Vectors.dense(1) val v1 = Vectors.dense(2) val v2 = Vectors.dense(3) val v3 = Vectors.dense(4) val v4 = Vectors.dense(11) val v5 = Vectors.dense(25) val v6 = Vectors.dense(31) val data = sc.parallelize(Seq(v0, v1, v2, v3, v4, v5, v6)) //setK表示最後聚類的分組數量是2,分紅2組 val model = new KMeans().setMaxIterations(20).setK(2).run(data) /* 輸出的兩個中心點以下: [4.2] [28.0]*/ model.clusterCenters.foreach(println) } }