fuzzy c-means


  在k-means中,每個元素只能屬於所有類別中的一類。那這樣會帶來一些問題:

  • 所有的元素對於計算聚類中心的貢獻都是相同的。

  因為從根本上,對於屬於一個類的所有元素來說,在k-means中是無法將他們區別開的(如果非要用距離什么的來區分也可以,但是這部分功能不是k-mean擅長的)。而在fuzzy c-means中,元素可能屬於任何一類,不同的是它們之間的可能性是不同的。數學表示如下:

Jm = ΣΣuijm × |xi - ci|2

其中:

  1. xi:元素;
  2. cj:聚類中心;
  3. uij:元素xi對於聚類中心cj的隸屬度(屬於這個類的可能性);
  4. m:大於1的實數,一般取值2.0;

  Jm用來評估聚類效果,Jm越大,聚類效果越差。那么聚類的過程其實就是找Jm的極小值的過程。其實從函數的角度看,Jm取得極小值時偏導數為0,也就是說uijcj的變換都接近於0,而這里其實我們只需要考慮一個(比如在uij趨於不變時通常cj也趨於穩定),而這里選擇uij的原因是衡量起來簡單一點(取值范圍為[0,1],設置一個比較小的閥值即可)。

求極值是一個迭代的過程,更新聚類中心cj的方法與k-means非常相似,如下:

  cj = (Σuijm × xi) / Σuijm

更新隸屬度uij的方法如下:

  uij = 1 / (∑((|xi - cj|/|xi - ck|)2 / (m - 1)))

那么迭代結束的條件顯然是:

  max{|uijk+1 - uijk|} < ε

這樣,fuzzy c-means的整體的過程如下:

  1. 初始化隸屬度矩陣;
  2. 計算聚類中心C
  3. 更新隸屬度矩陣U
  4. 如果max{|uijk+1 - uijk|} < ε或者迭代次數達到上限,結束迭代,否則轉2;

注:不管是k-means還是fuzzy c-means,有沒有感覺這個過程和迭代法求線性方程組的解的過程非常相似?其實有時候感覺這兩個過程本來就是相同的。

fuzzy c-means迭代式的推導

利用拉格朗日乘子法構造新的函數:

  Jm = ΣΣuijm × |xi - ci|2 + λ × (Σuij - 1)

Jm取得極值時滿足如下條件:

∂J / ∂λ = Σuij - 1 = 0

∂J / ∂uij = m × uijm-1 × |xi - cj|2 - λ = 0

∂J / ∂cj = Σuijm × xi - cj × Σuijm = 0

根據后面的兩條即可得到uijcj的迭代式(想想在第二條中如何消掉λ?提示:利用∑uij = 1)。

----- -- -

end


免責聲明!

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



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