1. 程式人生 > >視覺SLAM之詞袋(bag of words) 模型與K-means聚類演算法淺析(2)

視覺SLAM之詞袋(bag of words) 模型與K-means聚類演算法淺析(2)

         

這裡表示分類的平均值。

arg表示使目標函式取最小值時的變數值

設我們一共有 N 個數據點需要分為 K 個 cluster ,k-means 要做的就是最小化

其中  rnk在  在資料點 n 被歸類到 cluster k 的時候為 1 ,否則為 0 。直接尋找  rnk  和 uk  最小化 j 並不容易,不過我們可以採取迭代的辦法:先固定 uk,選擇最優的 rnk,很容易看出,只要將資料點歸類到離他最近的那個中心就能保證 j  最小。下一步則固定 rnk ,再求最優的 uk 。將j 對 uk 求導並令導數等於零,很容易得到 j 最小的時候uk 應該滿足:

亦即 uk的值應當是所有 cluster k 中的資料點的平均值。

首先 3 箇中心點被隨機初始化,所有的資料點都還沒有進行聚類,預設全部都標記為紅色,如下圖所示:

然後進入第一次迭代:按照初始的中心點位置為每個資料點著上顏色,重新計算 3 箇中心點,結果如下圖所示:

可以看到,由於初始的中心點是隨機選的,這樣得出來的結果並不是很好,接下來是下一次迭代的結果:

可以看到大致形狀已經出來了。再經過兩次迭代之後,基本上就收斂了,最終結果如下:

不過正如前面所說的那樣 k-means 也並不是萬能的,雖然許多時候都能收斂到一個比較好的結果,但是也有運氣不好的時候會收斂到一個讓人不滿意的區域性最優解,例如選用下面這幾個初始中心點:

最終會收斂到這樣的結果: