1. 程式人生 > >K-means聚類演算法——機器學習

K-means聚類演算法——機器學習

聚類屬於無監督學習,以往的迴歸、樸素貝葉斯、SVM 等都是有類別標籤 y 的,也就 是說樣例中已經給出了樣例的分類。而聚類的樣本中卻沒有給定 y,即監督樣本。

在聚類問題中,給我們的訓練樣本是{?(1),…,?(?)},每個?(?) ∈ ℝ?,沒有了 y。 

K-means 演算法是將樣本聚類成 k 個簇(cluster),具體演算法描述如下: 

K 是我們事先給定的聚類數,?(i)代表樣例 i 與 k 個類中距離最近的那個類,?(i)的值是 1 到 k 中的一個。質心??代表我們對屬於同一個類的樣本中心點的猜測。

其中重複過程的理解:

①對於每個樣例,計算其屬於的類,為c(i)

②對於每個類,再重新計算質心

拿星團模型來解釋就 是要將所有的星星聚成 k 個星團,首先隨機選取 k 個宇宙中的點(或者 k 個星星)作為 k 個 星團的質心,然後第一步對於每一個星星計算其到 k 個質心中每一個的距離,然後選取距離 最近的那個星團作為?(i),這樣經過第一步每一個星星都有了所屬的星團;第二步對於每一 個星團,重新計算它的質心??(對裡面所有的星星座標求平均)。重複迭代第一步和第二步 直到質心不變或者變化很小。

下圖展示了對 n 個樣本點進行 K-means 聚類的效果,這裡 k 取 2。 

ab圖中都為綠色表示還未分類,X代表質心,紅與藍表示兩種類。

K-means 面對的第一個問題是如何保證收斂,前面的演算法中強調結束條件就是收斂,可 以證明的是 K-means 完全可以保證收斂性。下面我們定性的描述一下收斂性,我們定義畸變 函式(distortion function)如下: 

J 函式表示每個樣本點到其質心的距離平方和。K-means 是要將 J 調整到最小。假設當 前 J 沒有達到最小值,那麼首先可以固定每個類的質心??,調整每個樣例的所屬的類別?(i)來 讓 J 函式減少,同樣,固定?(i),調整每個類的質心??也可以使 J 減小。這兩個過程就是內循 環中使 J 單調遞減的過程。當 J 遞減到最小時,μ和 c 也同時收斂。(在理論上,可以有多組 不同的μ和 c 值能夠使得 J 取得最小值,但這種現象實際上很少見)。 由於畸變函式 J 是非凸函式,意味著我們不能保證取得的最小值是全域性最小值,也就是 說 k-means 對質心初始位置的選取比較感冒,但一般情況下 k-means 達到的區域性最優已經滿 足需求

。但如果你怕陷入區域性最優,那麼可以選取不同的初始值跑多遍 k-means,然後取其 中最小的 J 對應的μ和 c 輸出。    下面累述一下 K-means 與 EM 的關係,首先回到初始問題,我們目的是將樣本分成 k 個 類,其實說白了就是求每個樣例 x 的隱含類別 y,然後利用隱含類別將 x 歸類。由於我們事 先不知道類別 y,那麼我們首先可以對每個樣例假定一個 y 吧,但是怎麼知道假定的對不對 呢?怎麼評價假定的好不好呢?我們使用樣本的極大似然估計來度量,這裡是就是 x 和 y 的 聯合分佈 P(x,y)了。如果找到的 y 能夠使 P(x,y)最大,那麼我們找到的 y 就是樣例 x 的最佳類 別了,x 順手就聚類了。但是我們第一次指定的 y 不一定會讓 P(x,y)最大,而且 P(x,y)還依賴 於其他未知引數,當然在給定 y 的情況下,我們可以調整其他引數讓 P(x,y)最大。但是調整 完引數後,我們發現有更好的 y 可以指定,那麼我們重新指定 y,然後再計算 P(x,y)最大時 的引數,反覆迭代直至沒有更好的 y 可以指定。  這個過程有幾個難點,第一怎麼假定 y?是每個樣例硬指派一個 y 還是不同的 y 有不同 的概率,概率如何度量。第二如何估計 P(x,y),P(x,y)還可能依賴很多其他引數,如何調整裡 面的引數讓 P(x,y)最大。這些問題在以後的篇章裡回答。    這裡只是指出 EM 的思想,E 步就是估計隱含類別 y 的期望值,M 步調整其他引數使得 在給定類別 y 的情況下,極大似然估計 P(x,y)能夠達到極大值。然後在其他引數確定的情況 下,重新估計 y,周而復始,直至收斂。 上面的闡述有點費解,對應於 K-means 來說就是我們一開始不知道每個樣例x(?)對應隱 含變數也就是最佳類別c(?)。最開始可以隨便指定一個c(?)給它,然後為了讓 P(x,y)最大(這 裡是要讓 J 最小),我們求出在給定 c 情況下,J 最小時的??(前面提到的其他未知引數), 然而此時發現,可以有更好的c(?)(質心與樣例x(?)距離最小的類別)指定給樣例x(?),那麼c(?) 得到重新調整,上述過程就開始重複了,直到沒有更好的c(?)指定。這樣從 K-means 裡我們 可以看出它其實就是 EM 的體現,E 步是確定隱含類別變數c,M 步更新其他引數μ來使 J 最 小化。這裡的隱含類別變數指定方法比較特殊,屬於硬指定,從 k 個類別中硬選出一個給樣 例,而不是對每個類別賦予不同的概率。總體思想還是一個迭代優化過程,有目標函式,也 有引數變數,只是多了個隱含變數,確定其他引數估計隱含變數,再確定隱含變數估計其他 引數,直至目標函式最優。