k均值聚類算法(The k-means clustering algorithm)

在聚類問題中,我們試圖將給定的樣本集{x(1),,x(m)} 分割成幾個各自匯聚的聚類。這類問題中輸入特徵同之前一樣是一個n維向量x(i)Rn ,但輸出標籤y(i) 是不存在的,因此這是一個非監督式學習問題。

k-means 聚類算法的執行步驟如下:

  1. 隨機初始化k個聚類質心的座標值μ1,μ2,,μkRn
  2. 循環直至收斂:{

    循環每個i ,有:

    c(i):=arg minjx(i)μj2.

    循環每個j ,有:
    μj:=mi=11{c(i)=j}x(i)mi=11{c(i)=j}.

    }

上面的算法中,k代表我們猜測的聚類數量,聚類質心μj 代表我們當前假設的聚類質心座標。初始化質心座標時,我們可隨機選取k個樣本點,讓k個質心的座標等於這k個樣本點(當然還有其他初始化質心的方法)。

算法的內循環重複執行兩個步驟:(1) 將樣本點x(i) 分配給距離它歐式距離最近的質心;(2) 將每個聚類質心座標向其所轄樣本點的均值點移動。

下圖是一個k-means 算法運行的圖示。
illustration of running k-means

上圖:點表示訓練樣本,叉叉表示聚類質心。(a) 原始數據集。 (b)隨機初始化聚類質心(在此例中,沒有讓初始質心等於某一樣本值)(c-f) k-means算法迭代的圖解。

k均值算法可以保證一定會收斂嗎?答案是yes。爲了便於理解,我們定義失真函數(distortion function)

J(c,μ)=i=1mx(i)μc(i)2

失真函數描述了每個樣本點x(i) 到其所屬質心μc(i) 距離的平方和。k-means算法實際就是最小化失真函數J 的座標下降法。
究其本質,算法的內層循環,先固定質心座標μ ,求J 關於質心分配c 的最小化;然後固定質心分配c ,求J 關於質心座標μ 的最小化。算法運行中J 一定的單調下降的,它的值也必將收斂(單調有界必收斂)。

失真函數J 是一個非凸函數,所以我們不能保證J 會收斂到全局最優解。換而言之,儘管多數情況下k-means算法都表現很好,但它有可能會陷入局部最優。爲了避免這個問題,普遍的做法是多次運行這個算法,選取J(c,μ) 值最小的那一組聚類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章