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越小越好,separation越大越好。
SSE(Sum of Squares for Error)是凝聚度和分離度的另一種數值表示。
如,單個簇的SSE如下:
另一種評價指標是使用輪廓係數。
輪廓係數針對單個樣本點而論。
其定義如下:
1. 對於樣本點S,計算他到所屬簇的其他對象的平均距離即爲
2. 計算S到所有其他簇的對象的距離,並針對其他簇計算平均距離,取最小的平均距離,記爲
3. S的輪廓係數是:
一般我們假定
由上述公式可得,
有了單個點的輪廓係數,就可以求得整個簇的平均輪廓係數。
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減小圖像的拐點。
圖形表示吐如下: