【機器學習筆記五】聚類 - k均值聚類

參考資料: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)
  }
}
相關文章
相關標籤/搜索