前言
在之前的學習中,已經了解學習了一系列與監督學習有關的機器學習算法,本篇文章,將詳細講述與無監督學習相關的機器學習算法,所謂無監督學習就是根據類別未知(沒有被標記)的訓練樣本解決模式識別中的各種問題,稱之為無監督學習,即也就是自動的找到不同的類型,將不同的個體歸為不同的類型,也就是聚類問題。詳細介紹如下所示。
K均值(K-Means)算法
在無監督學習中,我們希望將一系列未加任何標記的數據能夠通過聚類算法自動地分成有緊密關系的子集或者簇。其中,K均值算法是應用最為廣泛的算法之一。
- 算法原理
K均值算法的算法原理如下所示:
假設有一組訓練集,在訓練集中隨機生成兩個聚類中心(如圖中X所示,之所以生成兩個聚類中心是因為希望將數據分為兩類)。聚類算法是一個迭代算法,主要可以分為以下兩步:- 簇分配:
先隨機選取K個對象(本例中選取兩個對象)作為初始的聚類中心,然后計算每個訓練樣本與各個聚類中心之間的距離,把每個訓練樣本分配給距離它最近的聚類中心。聚類中心以及分配給它們的對象就代表一個聚類。 - 移動聚類中心:
一旦全部訓練樣本都被分配了,每個聚類的聚類中心會根據聚類中已分配的對象被重新計算。即也就是聚類中心的位置會發生變化。
- 簇分配:
以上兩個步驟將不斷重復直到滿足某個終止條件。終止條件可以是以下任何一個:
1). 沒有(或最小數目)對象被重新分配給不同的聚類。
2). 沒有(或最小數目)聚類中心再發生變化。
3). 誤差平方和局部最小。
其過程如下圖所示:
- 算法表示
對于K均值算法的輸入有如下約定:
用K表示簇的個數,用表示訓練樣本數,
,是一個
維向量。
首先,隨機初始化個聚類中心,記作
,然后,重復一下步驟,直到滿足終止條件:
已分配給第
個簇的訓練樣本的平均值
優化目標
與監督學習相關算法一樣,K均值算法也有優化目標函數或者最小化代價函數。K均值優化目標函數一方面可以幫助我們對算法進行調試,確保算法正常運行,另一方面,可以用優化目標函數幫助K均值算法找到更好的簇,避免局部最優解。
對于優化目標函數有如下標記:
表示當前樣本
所屬的簇的索引
表示第
個聚類中心的位置。
表示
所屬的簇的聚類中心。
優化目標函數可以用以下公式表示:
隨機初始化
在K均值算法中,有幾種方法可以實現聚類中心的初始化,但比較好的一種實現方式如下所示:
假設有
個聚類中心,其中
(訓練樣本數)。
隨機選取
個訓練樣本。
設定
等于選定的
個訓練樣本。
在K均值算法的實際應用過程中,需要多次運行K均值算法并且每次都要隨機初始化聚類中心,最后,得到一系列聚類中心和聚類結果。用得到的聚類中心和聚類結果計算能夠使得代價函數最小的參數。
選擇聚類中心的數量
選擇聚類中心的數量并不容易,因為很難清楚數據應該分為幾類。在選擇聚類中心數量的問題上,有一個常用方法被稱作“肘部法則”如下圖所示:
選擇不同的聚類中心數量,會得到不同的代價函數的值。如上曲線所示,整個曲線如同一條胳膊,時,曲線變化劇烈,
時逐漸趨于平穩,
是一個很明顯的分界點,所以可以選擇聚類中心的數量為3。
但是,通常情況下很難得到如上所述的理想曲線,通常得到的曲線如下所示,很難確定分界點,所以“肘部法則”并不是一個完美的解決方案。
正如算法的設計是為了解決實際問題,選擇聚類中心的數量也是為了特定的后續目的,那么決定聚類數量更好的方法是評估不同的聚類數量是否能夠更好的解決后續目的,根據解決問題的實際效果選擇最為合適的聚類數量。