摘要
前端
這篇博客是從一個網上下載的資料關於模糊c均值聚類和k-means均值聚類的數學方法衍生而來。我下載的那個文章討論的不是很清楚,還有一些錯誤的地方,有些直接給告終果,可是中間的數學推導沒有給出,我感受中間的數學推導應該是最精華的地方,上網搜發現網上對於這兩個算法的數學推導仍是不多的甚至是沒有,百度文庫有一篇,可是推導的是用窮舉找規律,數學的味道不是很濃厚。在這篇文章的基礎上,我增長了一些數學方面的理論推導,講的更加的詳細了一些,特別是在模糊c均值聚類的遞推公式的推導上,須要具備必定的數學功底。這是我一天的成果,就把這個記錄下來了啊,但願對你們有幫助,同時也能夠爲之後本身的複習作備份。算法其實很簡單,可是知其然並知其因此然卻很難。k-means的算法數學推導原理:http://9269309.blog.51cto.com/9259309/1864214算法
FCM聚類算法介紹網絡
FCM算法是一種基於劃分的聚類算法,它的思想就是使得被劃分到同一簇的對象之間類似度最大,而不一樣簇之間的類似度最小。模糊C均值算法是普通C均值算法的改進,普通C均值算法對於數據的劃分是硬性的,而FCM則是一種柔性的模糊劃分。在介紹FCM具體算法以前咱們先介紹一些模糊集合的基本知識。編輯器
模糊集基本知識[21]ide
首先說明隸屬度函數的概念。隸屬度函數是表示一個對象x隸屬於集合A的程度的函數,一般記作μA(x),其自變量範圍是全部可能屬於集合A的對象(即集合A所在空間中的全部點),取值範圍是[0,1],即0<=函數
μA(x)<=1。μA(x)=1表示x徹底隸屬於集合A,至關於傳統集合概念上的x∈A。一個定義在空間X={x}上的隸屬度函數就定義了一個模糊集合A,或者叫定義在論域X={x}上的模糊子集 。對於有限個對象x1,x2,……,xn模糊集合 能夠表示爲:性能
有了模糊集合的概念,一個元素隸屬於模糊集合就不是硬性的了,在聚類的問題中,能夠把聚類生成的簇當作模糊集合,所以,每一個樣本點隸屬於簇的隸屬度就是[0,1]區間裏面的值。google
K均值聚類算法(HCM)介紹spa
K均值聚類,即衆所周知的C均值聚類,已經應用到各類領域。它的核心思想以下:算法把n個向量xj(1,2…,n)分爲c個組Gi(i=1,2,…,c),並求每組的聚類中心,使得非類似性(或距離)指標的價值函數(或目標函數)達到最小。當選擇歐幾里德距離爲組j中向量xk與相應聚類中心ci間的非類似性指標時,價值函數可定義爲:
其中是組i內的價值函數。這樣Ji的值依賴於Gi的幾何特性和ci的位置。
通常來講,可用一個通用距離函數d(xk,ci)代替組I中的向量xk,則相應的總價值函數可表示爲:
爲簡單起見,這裏用歐幾里德距離做爲向量的非類似性指標,且總的價值函數表示爲(6.2)式。
劃分過的組通常用一個c×n的二維隸屬矩陣U來定義。若是第j個數據點xj屬於組i,則U中的元素uij爲1;不然,該元素取0。一旦肯定聚類中心ci,可導出以下使式(6.2)最小uij:
重申一點,若是ci是xj的最近的聚類中心,那麼xj屬於組i。因爲一個給定數據只能屬於一個組,因此隸屬矩陣U具備以下性質:
且
另外一方面,若是固定uij則使(6.2)式最小的最佳聚類中心就是組I中全部向量的均值:
這裏|Gi|是第i個簇中元素對象的個數
爲便於批模式運行,這裏給出數據集xi(1,2…,n)的K均值算法;該算法重複使用下列步驟,肯定聚類中心ci和隸屬矩陣U:
步驟1:初始化聚類中心ci,i=1,…,c。典型的作法是從全部數據點中任取c個點。
步驟2:用式(6.4)肯定隸屬矩陣U。
步驟3:根據式(6.2)計算價值函數。若是它小於某個肯定的閥值,或它相對上次價值函數質的改變量小於某個閥值,則算法中止。
步驟4:根據式(6.5)修正聚類中心。返回步驟2。
該算法自己是迭代的,且不能確保它收斂於最優解。K均值算法的性能依賴於聚類中心的初始位置。因此,爲了使它可取,要麼用一些前端方法求好的初始聚類中心;要麼每次用不一樣的初始聚類中心,將該算法運行屢次。此外,上述算法僅僅是一種具備表明性的方法;咱們還能夠先初始化一個任意的隸屬矩陣,而後再執行迭代過程。
K均值算法也能夠在線方式運行。這時,經過時間平均,導出相應的聚類中心和相應的組。即對於給定的數據點x,該算法求最近的聚類中心ci,並用下面公式進行修正:
這種在線公式本質上嵌入了許多非監督學習神經元網絡的學習法則。
6.2.3 模糊C均值聚類
模糊C均值聚類(FCM),即衆所周知的模糊ISODATA,是用隸屬度肯定每一個數據點屬於某個聚類的程度的一種聚類算法。1973年,Bezdek提出了該算法,做爲早期硬C均值聚類(HCM)方法的一種改進。
FCM把n個向量xi(i=1,2,…,n)分爲c個模糊組,並求每組的聚類中心,使得非類似性指標的價值函數達到最小。FCM與HCM的主要區別在於FCM用模糊劃分,使得每一個給定數據點用值在0,1間的隸屬度來肯定其屬於各個組的程度。與引入模糊劃分相適應,隸屬矩陣U容許有取值在0,1間的元素。不過,加上歸一化規定,一個數據集的隸屬度的和總等於1:
那麼,FCM的價值函數(或目標函數)就是式(6.2)的通常化形式:
這裏uij介於0,1間;ci爲模糊組I的聚類中心,dij=||ci-xj||爲第I個聚類中心與第j個數據點間的歐幾里德距離;且 是一個加權指數。
構造以下新的目標函數,可求得使(6.10)式達到最小值的必要條件:
這裏λj,j=1到n,是(6.9)式的n個約束式的拉格朗日乘子。對全部輸入參量求導,使式(6.10)達到最小的必要條件爲:
由上述兩個必要條件,模糊C均值聚類算法是一個簡單的迭代過程。在批處理方式運行時,FCM用下列步驟肯定聚類中心ci和隸屬矩陣U[1]:
步驟1:用值在0,1間的隨機數初始化隸屬矩陣U,使其知足式(6.9)中的約束條件
步驟2:用式(6.12)計算c個聚類中心ci,i=1,…,c。
步驟3:根據式(6.10)計算價值函數。若是它小於某個肯定的閥值,或它相對上次價值函數值的改變量小於某個閥值,則算法中止。
步驟4:用(6.13)計算新的U矩陣。返回步驟2。
上述算法也能夠先初始化聚類中心,而後再執行迭代過程。因爲不能確保FCM收斂於一個最優解。算法的性能依賴於初始聚類中心。所以,咱們要麼用另外的快速算法肯定初始聚類中心,要麼每次用不一樣的初始聚類中心啓動該算法,屢次運行FCM。
對於式(6.12)結果的推導的數學原理:
FCM算法的數學模型實際上是一個條件極值問題:
咱們須要把上面的條件極值問題轉化爲無條件的極值問題,這個在數學分析上常常用到的一種方法就是拉格朗日乘數法把條件極值轉化爲無條件極值問題,須要引入n個拉格朗日因子,以下所示:
而後對各個變量進行求導,從而獲得各個變量的極值點:
對C中心點進行求導:
拉格朗日函數分爲兩部分,咱們須要分別對其進行求導,先算簡單的,對後一部分進行求導:
對前一部分進行求導就比較複雜和困難了:
把兩部分放到一塊兒則是:
上面的一些公式用到了英文,不是我裝,個人英語不好的,我用的google公式編輯器不能打漢字,沒辦法,湊活着看吧。
上式推導中的一些點的解釋:
FCM算法的應用
經過上面的討論,咱們不難看出FCM算法須要兩個參數一個是聚類數目C,另外一個是參數m。通常來說C要遠遠小於聚類樣本的總個數,同時要保證C>1。對於m,它是一個控制算法的柔性的參數,若是m過大,則聚類效果會很次,而若是m太小則算法會接近HCM聚類算法。
算法的輸出是C個聚類中心點向量和C*N的一個模糊劃分矩陣,這個矩陣表示的是每一個樣本點屬於每一個類的隸屬度。根據這個劃分矩陣按照模糊集合中的最大隸屬原則就可以肯定每一個樣本點歸爲哪一個類。聚類中心表示的是每一個類的平均特徵,能夠認爲是這個類的表明點。
從算法的推導過程當中咱們不難看出,算法對於知足正態分佈的數據聚類效果會很好,另外,算法對孤立點是敏感的。