這個算法中文名為k均值聚類算法,首先我們在二維的特殊條件下討論其實現的過程,方便大家理解。
第一步.隨機生成質心
由於這是一個無監督學習的算法,因此我們首先在一個二維的坐標軸下隨機給定一堆點,並隨即給定兩個質心,我們這個算法的目的就是將這一堆點根據它們自身的坐標特征分為兩類,因此選取了兩個質心,什么時候這一堆點能夠根據這兩個質心分為兩堆就對了。如下圖所示:
第二步.根據距離進行分類
紅色和藍色的點代表了我們隨機選取的質心。既然我們要讓這一堆點的分為兩堆,且讓分好的每一堆點離其質心最近的話,我們首先先求出每一個點離質心的距離。假如說有一個點離紅色的質心比例藍色的質心更近,那么我們則將這個點歸類為紅色質心這一類,反之則歸於藍色質心這一類,如圖所示:
第三步.求出同一類點的均值,更新質心位置
在這一步當中,我們將同一類點的x\y的值進行平均,求出所有點之和的平均值,這個值(x,y)則是我們新的質心的位置,如圖所示:
我們可以看到,質心的位置已經發生了改變。
第四步.重復第二步,第三步
我們重復第二步和第三部的操作,不斷求出點對質心的最小值之后進行分類,分類之后再更新質心的位置,直到得到迭代次數的上限(這個迭代次數是可以我們自己設定的,比如10000次),或者在做了n次迭代之后,最后兩次迭代質心的位置已經保持不變,如下圖所示:
這個時候我們就將這一堆點按照它們的特征在沒有監督的條件下,分成了兩類了!!
五.如果面對多個特征確定的一個點的情況,又該如何實現聚類呢?
首先我們引入一個概念,那就是歐式距離,歐式距離是這樣定義的,很容易理解:
很顯然,歐式距離d(xi,xj)等於我們每一個點的特征去減去另一個點在該維度下的距離的平方和再開根號,十分容易理解。
我們也可以用另一種方式來理解kmeans算法,那就是使某一個點的和另一些點的方差做到最小則實現了聚類,如下圖所示:
得解,有問題可以在評論區留言!