機器學習(九):k-means與聚類

k均值是基於劃分的聚類技術,其特徵爲聚類的結果趨向於類球形,而k值就是需要發現的k個類,一般由使用者指定。

k-means

k均值通常用於n維連續空間(數值類型)中的數據,其算法思想比較簡單:

選擇k個初始質心,然後將樣本中的每個點指派到最近的質心,指派的方法一般是計算距離,以每個質心和所屬他的點爲一個簇,重新計算出該簇的質心,重複下去,直到簇不變(也可以是質心不變)

該算法思想有兩大需要解決的問題:
1. k的大小該如何選擇
2. k個初始點該如何選擇

k的大小無疑會影響聚類的效果,並且k的位置選擇不好會導致局部局部最小,如下圖:
這裏寫圖片描述
上述兩個問題將在最後介紹解決方法。

層次聚類

一般我們說的層次聚類包含兩種方法:凝聚層次聚類,分裂層次聚類。
區別在於,前者從每個點作爲一個簇開始,每次合併兩個簇,後者相反。
從方法上來說,凝聚層次聚類一開始就又n個簇,每個簇是一個點,每次聚類都減小一個簇。
這意味着,簇的個數從0到n(對比k-means,肯定包含k在內)。
和k-means一樣,層次聚類也面臨着合併指標的選取,一般來說有如下選取指標:

  • min:兩個簇中最近點之間的距離
  • max:兩個簇中最遠點之間的距離
  • 組平均:兩個簇的點之間的距離的平均值
  • 質心:兩個簇的質心的距離
    這裏寫圖片描述

簇評估

關於聚類,有一個問題尤爲重要,即簇評估。
類似軟件開發中的標準,對於簇的好壞評價,同樣我們遵從:高內聚低耦合。
我們希望一個簇內的點的相似性儘可能大,而簇之間的相似性儘可能小。
這裏的相似性,我們可以使用簡單的距離來表示。
於是就有如下指標:

cohesion(Ci)=xCidist(x,ci)separation(Ci,Cj)=dist(ci,cj)

其中,ci 表示Ci 的質心,dist()表示距離函數。
即cohesion越小越好,separation越大越好。
這裏寫圖片描述
SSE(Sum of Squares for Error)是凝聚度和分離度的另一種數值表示。
如,單個簇的SSE如下:
SSE=xCidist(ci,x)2

另一種評價指標是使用輪廓係數
輪廓係數針對單個樣本點而論。
其定義如下:
1. 對於樣本點S,計算他到所屬簇的其他對象的平均距離即爲d1
2. 計算S到所有其他簇的對象的距離,並針對其他簇計算平均距離,取最小的平均距離,記爲d2
3. S的輪廓係數是:s=d2d1d2
一般我們假定d2>d1
由上述公式可得,d1 顯然是越小越好,d2 顯然是越大越好,即s越接近1越好,越接近0越不好。
有了單個點的輪廓係數,就可以求得整個簇的平均輪廓係數。

DBSCAN

DBSCAN和上述兩種聚類具有完全不同的使用場景,層次聚類和k-means都是傾向於發現類球形的數據,但DBSCAN是用於找出不同密度的類。
這裏不過多介紹,可參考數據挖掘導論裏的介紹。
只提一下兩個參數作爲備忘錄:
- MinPts:可作爲簇的個數閾值
- eps:作爲判定點類型的距離半徑

通常來說,MinPts越大,對於可以組成簇的點的個數要求越大,找到的簇的點的個數也越大;eps越小,對於簇的密度的要求越大,找到的簇的密度越大。
利用DBSCAN的這種性質,可以使用DBSCAN進行降噪處理。

關於k的兩個問題

最後探討下上面提到的兩個關於k-means的兩個景點問題:k如何選取,和k個初始質心的選擇。

k個質心的選擇

我們先討論假設k值選定後,如何選擇k個合適的初始質心,具體來說有如下方法可供選擇

選擇儘可能遠的點

已知k,首先任意選擇一個點,計算每個點到該質心的距離,選擇距離最遠的點爲第二個質心,重新將其他點分配到這兩個質心,再選出距離最大的點,知道質心個數達到k。

使用層次聚類

上面提到,層次聚類從開始到結束,簇的個數有n減小到1.毫無疑問k是包含在裏面的,進行凝聚層次聚類時,到簇的個數爲k時停止,從這k個簇中分別選擇一個點出來作爲初始質心。

二分k均值

所謂二分k-means就是選擇一個簇,然後分裂該簇爲兩個簇。
一般來說,選擇的簇是最大的簇,或者最大SSE的簇。
其實二分k-means有點類似分裂層次聚類。

k大小的選擇

之所以先講如何選擇k個質心,是因爲k大小的選擇可以用通過使用k個質心的位置來評判。

輪廓係數法和SSE

上文中,我們提出輪廓係數法是作爲一種評價聚類效果的度量,但同樣的我們可以延伸出:k如果選擇的不好,那麼其對應的輪廓係數必然較小。
即,選擇使得輪廓係數最大的k值。
同樣的,SSE也可以採用類似的思想,由於k越大,SSE必然越小,比如當k=n時,SSE=0.因此對於SSE,我們選擇使得SSE減小圖像的拐點。
圖形表示吐如下:
這裏寫圖片描述

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