機器學習算法與Python實踐之(五)k均值聚類(k-means)

一、k-means算法

       通常,人們根據樣本間的某種距離或者相似性來定義聚類,即把相似的(或距離近的)樣本聚爲同一類,而把不相似的(或距離遠的)樣本歸在其他類。

       我們以一個二維的例子來說明下聚類的目的。如下圖左所示,假設我們的n個樣本點分佈在圖中所示的二維空間。從數據點的大致形狀可以看出它們大致聚爲三個cluster,其中兩個緊湊一些,剩下那個鬆散一些。我們的目的是爲這些數據分組,以便能區分出屬於不同的簇的數據,如果按照分組給它們標上不同的顏色,就是像下圖右邊的圖那樣:

       如果人可以看到像上圖那樣的數據分佈,就可以輕鬆進行聚類。但我們怎麼教會計算機按照我們的思維去做同樣的事情呢?這裏就介紹個集簡單和經典於一身的k-means算法。

       k-means算法是一種很常見的聚類算法,它的基本思想是:通過迭代尋找k個聚類的一種劃分方案,使得用這k個聚類的均值來代表相應各類樣本時所得的總體誤差最小。

       k-means算法的基礎是最小誤差平方和準則。其代價函數是:

       式中,μc(i)表示第i個聚類的均值。我們希望代價函數最小,直觀的來說,各類內的樣本越相似,其與該類均值間的誤差平方越小,對所有類所得到的誤差平方求和,即可驗證分爲k類時,各聚類是否是最優的。

      上式的代價函數無法用解析的方法最小化,只能有迭代的方法。k-means算法是將樣本聚類成 k個簇(cluster),其中k是用戶給定的,其求解過程非常直觀簡單,具體算法描述如下:

1、隨機選取 k個聚類質心點

2、重複下面過程直到收斂  {

      對於每一個樣例 i,計算其應該屬於的類:

      對於每一個類 j,重新計算該類的質心:

}

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

其僞代碼如下:

********************************************************************

創建k個點作爲初始的質心點(隨機選擇)

當任意一個點的簇分配結果發生改變時

       對數據集中的每一個數據點

              對每一個質心

                     計算質心與數據點的距離

              將數據點分配到距離最近的簇

       對每一個簇,計算簇中所有點的均值,並將均值作爲質心

發佈了21 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章