計算機視覺面試考點(14)K均值聚類算法(K-Means)

計算機視覺工程師在面試過程中主要考察三個內容:圖像處理、機器學習、深度學習。然而,各類資料紛繁複雜,或是簡單的知識點羅列,或是有着詳細數學推導令人望而生畏的大部頭。爲了督促自己學習,也爲了方便後人,決心將常考必會的知識點以通俗易懂的方式設立專欄進行講解,努力做到長期更新。此專欄不求甚解,只追求應付一般面試。希望該專欄羽翼漸豐之日,可以爲大家免去尋找資料的勞累。每篇介紹一個知識點,沒有先後順序。想了解什麼知識點可以私信或者評論,如果重要而且恰巧我也能學會,會盡快更新。最後,每一個知識點我會參考很多資料。考慮到簡潔性,就不引用了。如有冒犯之處,聯繫我進行刪除或者補加引用。在此先提前致歉了!

K均值聚類算法
k-means clustering algorithm
K-Means

原理

聚類問題:
樣本標籤未知,總類別數未知
使用聚類算法,發現樣本在特徵空間中的分佈規律
從而把樣本們分爲不同的類別

過程:
在樣本的特徵空間中,

  1. 隨機選取k個樣本,作爲聚類質心(中心)
  2. 每一個樣本跟隨一個離自己最近的質心,分爲k個類
  3. 每一個類重新計算質心((1,2),(2,1),(3,3)的質心就是(2,2)),得到k個質心。注意:與第一步中真實的樣本作爲質心不同,這個時候經過計算得到的質心未必存在。比如上述的例子中並不存在(2,2)。所以此時的質心是虛擬的。

重複進行2、3直至模型擬合。

擬合判斷標準
在這裏插入圖片描述
u是質心,總共k個
C是一類樣本的集合
上述公式的意義就是:
所有樣本點與自己的質心的歐氏距離平方的和
顯然,該數值越小模型性能越好
即可以作爲損失函數
當該損失函數穩定時,判斷模型擬合

優缺點分析

高斯分佈性能好,非凸分佈性能不好

自己畫了個圖,方便解釋:
可以看出,高斯分佈的質心在數據內部
非凸分佈的質心甚至和數據沒什麼重疊
所以分佈決定質心存在的位置
質心位置的好壞影響了K-Means的性能

在這裏插入圖片描述
超參數K
K作爲該算法唯一的超參數,是一把雙刃劍
優點:選定K,模型的訓練就不需要干預了,很簡單
缺點:K的影響很大,K選不好,模型就很差,導致性能不穩定
選取方法:
1.經驗。。。
2.手肘法
選若干個k,比如2,3,4,5,6
分別跑一遍K-Means,穩定後,得到5個損失(上面的那個公式)
一般損失先下降快,後下降慢,存在一個拐點,如下圖
K=4可能是一個不錯的選擇
因爲曲線像手肘,所以叫手肘法。。。
在這裏插入圖片描述
3.ISODATA
該方法的K是動態變化的
如何變化?
該算法有分裂和合並操作
分裂:一類變兩類
合併:兩類變一類

  1. 選定初始K0,一般最後的K的範圍大概是0.5*K0~2*K0。所以,即使K可以動態變化,K0的選擇也得多少靠點譜
  2. 設定每類最少的樣本數,如果少於最少樣本數,這個類不能分裂
  3. 計算方差評定一個類中所有樣本的分散程度,分散程度大於閾值,並且滿足2中的條件,進行分裂
  4. 計算兩個質心的距離,小於閾值,兩個類合併

其餘步驟和普通K-Means一樣,只是每次聚類結束,要進行分裂和合並操作

隨機的質心不好對性能影響很大
如圖,隨機的質心導致了不良的性能
在這裏插入圖片描述
解決方法:K-Means++
該方法和K-Means僅在初始選擇質心的時候不同:
隨機選取第1個質心
選第n+1個質心時,計算剩餘樣本點與前n個質心的距離
離前n個質心距離越遠,該樣本點被選爲第n+1個質心的概率越大

計算量
如果有N個樣本,分爲K類,迭代T輪
那麼計算複雜度是O(NKT)
優點:複雜度是線性的
缺點:即使是線性的,當數據量太大時,計算量依然可觀

解決方法:
1.利用三角形原理(elkan K-Means)
AB+BC>AC
如果樣本點是X,有兩個質心I,J
那麼XI+XJ>IJ
換個角度來看
如果XI+XI<IJ
聯立兩個式子
XI<XJ
也就是說我們不需要計算出每一個樣本點和所有質心的距離
我們只需要計算樣本點和一個質心的距離以及K個質心之間的距離
這樣就可以判斷樣本點屬於哪一個質心
當然,如果XI+XI<IJ不成立,那麼我們還是要計算XJ
不過,已經減少了很多計算量了
尤其是當模型快要擬合時,上式幾乎都是成立的

2.Mini Batch K-Means
一般兩種做法:

  • 無放回採樣進行K-Means,擬合後繼續採樣增加數據,再進行K-Means
  • 對n個小樣本集進行K-Means,然後取均值作爲質心

其餘缺點

  • 對噪聲、離羣點敏感(可以將求平均改爲求中位數)
  • 每個樣本只能被歸爲一類

其餘優化

  • 核函數高維映射
  • 特徵歸一化,比如(1000,1)和(5,2)的距離主要取決了第一個維度,這就不好了,需要歸一化
  • 數據預處理,去除一些噪聲和離羣點

聚類知識龐大,還有很多高級的優秀方法
如果不是專門研究這個方向
瞭解這些足以


歡迎討論 歡迎吐槽

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章