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


聚類概念:

聚類:簡單地說就是把相似的東西分到一組。同 Classification (分類)不同,分類應屬於監督學習。而在聚類的時候,我們並不關心某一類是什么,我們需要實現的目標只是把相似的東西聚到一起,因此,一個聚類算法通常只需要知道如何計算相似 度就可以開始工作了。聚類不需要使用訓練數據進行學習,應屬於無監督學習。

我們經常接觸到的聚類分析,一般都是數值聚類,一種常見的做法是同時提取 N 種特征,將它們放在一起組成一個 N 維向量,從而得到一個從原始數據集合到 N 維向量空間的映射,然后基於某種規則進行分類,在該規則下,同組分類具有最大的相似性。

需要解決的問題:

K-Means算法主要解決的問題如下圖所示。我們可以看到,在圖的左邊有一些點,我們用肉眼可以看出來有四個點群,但是我們怎么通過計算機程序找出這幾個點群來呢?

 

 

算法概要:

 

 

A,B,C,D,E是五個在圖中點。而灰色的點是我們的種子點,也就是我們用來找點群的點。有兩個種子點,所以K=2

上圖K-Means的算法描述:

1.隨機在圖中取K(這里K=2)個種子點。

2.然后對圖中的所有點求到這K個種子點的距離,假如點Pi離種子點Si最近,那么Pi屬於Si點群。(上圖中,我們可以看到A,B屬於上面的種子點,C,D,E屬於下面中部的種子點)

3.接下來,我們要移動種子點到屬於他的“點群”的中心。(見圖上的第三步)

4.然后重復第2)和第3)步,直到種子點沒有移動(我們可以看到圖中的第四步上面的種子點聚合了A,B,C,下面的種子點聚合了D,E)。

K-Means聚類算法主要分為三個步驟:

(1)第一步是為待聚類的點尋找聚類中心

(2)第二步是計算每個點到聚類中心的距離,將每個點聚類到離該點最近的聚類中去

(3)第三步是計算每個聚類中所有點的坐標平均值,並將這個平均值作為新的聚類中心,反復執行(2)、(3),直到聚類中心不再進行大范圍移動或者聚類次數達到要求為止。

 

求點群中心的公式:

 

 

假設我們提取到原始數據的集合為,並且每個xi為d維的向量,K-means聚類的目的就是,在給定分類組數k(k ≤ n)值的條件下,將原始數據分成k類 S = ,在數值模型上,即對以下表達式求最小值:

         

這里表示分類的平均值。

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 也並不是萬能的,雖然許多時候都能收斂到一個比較好的結果,但是也有運氣不好的時候會收斂到一個讓人不滿意的局部最優解,例如選用下面這幾個初始中心點:

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM