1. 程式人生 > >【機器學習】接地氣地解釋K-means聚類演算法

【機器學習】接地氣地解釋K-means聚類演算法

       俗話說“物以類聚,人以群分”,這句話在K-means聚類演算法裡面得到了充分的繼承。而K-means演算法的實際應用範圍可謂是大到無法估量,基本可以說,只要你想不到,沒有聚類聚不起來的東西!

       比如衣服制造商可以通過分類,把某個身高體重的人群劃為一類,然後根據這些人群的需求製作出適合尺寸的衣服,此後在網上買衣服,只需報給商家身高體重,就有相應的S\M\L碼數衣服滿足你的需求。再比如著名的谷歌(Google )新聞版塊,就是使用了聚類演算法,每天谷歌都從網上收集上萬條新聞,然後通過機器學習分類出各種型別的新聞,把相同型別的新聞展示在同一個頁面上,使得客戶可以快速地瀏覽同一個新聞不同官方的報道。

       諸如此類,k-means聚類演算法作為容易理解而又應用廣泛的演算法,想要理解也並不難,下面我就用我自己的理解,帶你們走近k-means演算法的內心世界。

   

      在使用K-means之前,我們需要手動去定義一個聚類中心(K值),你不知道這是什麼東西?沒關係,請看下面這個圖。

      

       圖中我們可以看到,有很多分散的黑色資料點(特徵點),而我們的聚類中心(K值)就是圖上的兩個”十“字

,它的數量決定了我們的這堆資料會被劃分為幾種型別

       在例子中,我們就假設有兩個聚類中心(位置是隨機的)

      

       當確定好了K值之後,我們就進入K-means演算法開始運算了,在K-means演算法裡,主要是一個內迴圈,內迴圈主要包含兩個內容:

                                              1.簇分配

                                          2.移動聚類中心

                                不知道這兩個是什麼東西沒關係,我來解釋給你聽  

        

       首先是聚類中心找到自己的同類,其實就是把這些特徵點分類的意思。在簇分配裡,我們把所有黑色的特徵點與兩個聚類中心的距離計算出來,得出每個點相對於兩個聚類中心的距離。然後,把距離聚類中心點最近的特徵點塗成屬於自己的顏色,就成為了一個子集(或者叫簇),結果如圖所示。

                 

                        類似一個用一個圓,把屬於自己的特徵點全部包起來

               

                                                       這個就是簇分配

     

       當所有的聚類中心都找到了屬於自己的同類之後,就要走過去擁抱歡呼順便一起哭一下了,具體的方法是:在自己的簇類裡,計算出簇內樣本的平均值,然後讓聚類中心走到平均值相應的位置。

        如圖所示

              

                           當聚類中心移動之後,所有的特徵點將全部變回黑色

                

       然後又重新開始從第一個步驟開始迴圈,先計算每個特徵點相對於兩個聚類中心的距離,距離最近的塗上自己的顏色(簇分配),跑上去擁抱(移動聚類中心),特徵點又變回黑色,重新計算......

           

                程式一直在迴圈,一直迴圈到當兩個聚類中心移動到圖下這個位置

                  

      這時,不管程式再怎麼迴圈,聚類中心的位置已經不再發生改變了,這時候,我們就可以說K均值已經聚合(或者收斂),k-means聚類演算法就已經完成了它的任務,分類完成。

      最後,程式退出k-means演算法的內迴圈,開始下一步其他操作。