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