聚類

1      聚類

「無監督學習」,目標:經過對無標記訓練樣本的學習來揭示數據的內在性質及規律,爲進一步的數據分析提供基礎。研究最多,應用最廣的是「聚類」。算法

       聚類試圖將數據集中的樣本劃分爲若干個一般是不相交的子集,每一個子集稱爲一個「簇」。機器學習

這些概念對簇算法而言是事先未知的,聚類過程僅能自動造成簇結構,簇對應的概念語義需由使用者來把握和命名。函數

       聚類既能做爲一個單獨過程,用於找尋數據內在的分佈結構,也可做爲分類等其餘學習任務的前驅過程。性能

       聚類算法涉及的兩個基本問題:性能度量和距離計算。學習

1.1     性能度量

       聚類性能度量亦稱爲「有效性指標」。簇類結果的「簇內類似度」高且「簇間類似度」低。優化

       聚類性能度量大體有兩類。一類是將聚類結果與某個「參考模型」進行比較,稱爲「外部指標」;另外一類是直接考察聚類結果而不利用任何參考模型,稱爲「內部指標」。spa

 

 

 

 

  • Jaccard係數

 

  • FM係數

 

  • Rand指數

 

DB指數;Dunn指數設計

1.2     距離計算

對函數dist(.,.), 若它是一個「距離度量」,則須要知足一些基本性質:ci

非負性:原型

同一性:

對稱性:

直遞性:

 

閔可夫斯基距離

在討論距離計算時,屬性上是否認義了「序」關係更爲重要。例如,在定義域{1,2,3}的離散屬性與連續屬性的性質更接近些,能直接在屬性值上計算距離。

1.3     原型聚類

原型:樣本空間中具備表明性的點

原型聚類亦稱「基於原型的聚類」,此類算法假設聚類結構能夠經過一組原型刻畫,在現實聚類任務中極爲經常使用。一般狀況下,算法先對原型進行初始化,而後對原型進行迭代求解更新。採用不一樣的原型表示、不一樣的求解方式,將產生不一樣的算法。

1.3.1   K均值算法

                            

 

 

(1)

 

其中,是簇的均值向量。

直觀來看,上式在必定程度上刻畫了簇內樣本圍繞均值向量的緊密程度,E越小則簇內樣本類似度越高。

因爲最小化(1)式並不容易,找到它的最優解須要考察樣本集D全部可能的簇劃分,這是一個NP難問題。所以,k均值算法採用貪心策略,經過迭代優化來近似求解。

算法流程:

輸入:樣本集D={,...,};

      聚類簇數k.

過程:

1.從D中隨機選擇k個樣本做爲初始均值向量{,...,}

2.repeat

3.    令(1)

4.    for j = 1,2,...,m do

5.      計算樣本與各均值向量(1)之間的距離:;

6.      根據距離最近的均值向量的簇標記:;

7.      將樣本劃入相應的簇:;

8.    end for

9.    for i = 1,2,...,k do

10.     計算新的均值向量:

11.     if  then

12.         將當前均值向量更新爲

13.     else

14.         保持當前均值向量不變

15.     end if

16.    end for

17. until 當前均值向量均未更新

輸出: 簇劃分

 

1.3.2   學習向量量化

Learning Vector Quantization,簡稱LVQ,試圖找到一組原型向量來刻畫聚類結構。但與通常聚類算法不一樣的是,LVQ假設數據樣本帶有類別標記,學習過程利用樣本的這些監督信息來輔助聚類。

輸入:樣本集D={,

      原型向量個數q,各原型向量預設的類別標記{,...,};

      學習率 

過程:

1.初始化一組原型向量{,...,}

2.repeat

3.    從樣本集D隨機選取樣本;

4.    計算樣本與(1)之間的距離:;5.      

6.    找出與距離最近的原型向量,;

7.    if  then

8.        

9.    else

10.       

11.   end if

12.   將當前原型向量更新爲

13. until 知足中止條件

輸出:原型向量{,...,}

 

顯然,LVQ的關鍵是6~10行,即如何更新原型向量。直觀上看,對樣本,若最近的原型向量與的類別標記相同,則令向的方向靠攏。

如弟7行所示,此時新原型向量爲

 

與之間的距離爲:

 

 

令學習率,則原型向量在更新爲後將更接近。

相似地,若是原型向量的標記和樣本的標記不一樣,則原型向量應該遠離樣本。

1.3.3   高斯混合聚類

與k均值、LVQ用原型向量來刻畫聚類結構不一樣,高斯混合聚類採用機率模型來表達聚類原型。

首先簡單回顧一下(多元)高斯分佈的定義。

對於一維數據來講,其正態分佈的機率密度函數爲:

 

對於多維數據來講,其正態分佈的機率密度函數爲:

 

其中,是維均值向量,是的協方差矩陣,經過上式能夠看出,高斯分佈徹底由均值向量和協方差矩陣這兩個參數肯定。爲了明確顯示高斯分佈與相應參數的關係,將機率密度函數記爲.

咱們可定義高斯混合分佈

 

 

(9.29)

 

該分佈共由k個混合成分組成,每一個混合成分對應一個高斯分佈,其中與是第i個高斯混合成分的參數,而爲相應的「混合係數」,.

假設樣本的生成過程由高斯混合分佈給出:首先,根據定義的先驗分佈選擇高斯混合成分,其中爲第i個混合成分的機率;而後,根據被選擇的混合成分的機率密度函數進行採樣,從而生成相應的樣本。

若訓練集D={,...,}由上述過程生成,令隨機變量表示生成樣本的高斯混合成分,其取值未知。顯然,的先驗機率對應於.根據貝葉斯定理,的後驗分佈對應於

 



(9.30)

給出了樣本由第i 個高斯混合成分生成的後驗機率,爲方便敘述,將其簡記爲.

當高斯混合分佈(9.29)已知時,高斯混合聚類將把樣本集D劃分爲k個簇,每一個樣本的簇標記以下肯定:

 

 

 

(9.31)

 

所以,從原型聚類的角度來看,高斯混合聚類是採用機率模型(高斯分佈)對原型進行刻畫,簇劃分則由原型對應後驗機率肯定。

那麼,對於式(9.29),模型參數如何求解呢?顯然,給定樣本集D,能夠經過最大似然估計對其進行求解。

 



(9.32)

 

一般,採用EM算法進行迭代優化求解。

若參數能使(9.32)最大化,則由。。。分別求其最大似然估計。

由上述推導便可得到高斯混合模型的EM算法:在每步迭代中,先根據當前參數來計算每一個樣本屬於每一個高斯成分的後驗機率(E步驟),再根據極大似然估計獲得的參數值,更新模型參數(M步驟)。

高斯混合模型算法描述以下圖所示,第一行對高斯混合分佈的模型參數進行初始化,而後,在第2-12行基於EM算法對模型參數進行迭代更新。若EM算法的中止條件知足(例如達到最大迭代輪數,或似然函數(LLD)增加不多甚至不增加),則在第14-17行根據高斯混合分佈肯定簇劃分,在第18行返回最終結果。

算法流程:

輸入:樣本集D={,...,};

      高斯混合成分個數k:

過程:

1.初始化高斯混合分佈的模型參數

2.repeat

3.    for j = 1,2,...,m do

4.      根據式(9.30)計算由各混合成分生成的後驗機率,即

       

5.    end for

6.    for , do

7.      計算新均值向量

8.      計算新協方差矩陣

9.      計算新混合係數

10.   end for

11.   將模型參數更新爲

12.  until 知足中止條件

13.  

14.  for  do

15.     根據式(9.31)肯定的簇標記;

16.     將劃入相應的簇:

17.   end for

輸出:簇劃分

 

1.4     密度聚類

密度聚類亦稱爲「基於密度的聚類」,此類算法假設聚類結構能經過樣本分佈的緊密程度肯定。一般狀況下,密度聚類算法從樣本密度的角度來考察樣本之間的可鏈接性,並給予密度可鏈接樣本不斷擴展聚類簇以得到最終的聚類結果。

1.5     層次聚類

層次聚類試圖在不一樣層次對數據集進行劃分,從而造成樹形的聚類結構。數據集的劃分可採用「自底向上」的聚合策略,也可採用「自頂向下」的分拆策略。

AGNES是一種採用自底向上聚合策略的層次聚類算法。它先將數據集中的每一個樣本看做是一個初始聚類簇,而後在算法運行的每一步中找出距離最近的兩個聚類簇進行合併,該過程不斷重複,直至達到預設的聚類簇個數。這裏的關鍵是如何計算聚類簇之間的距離。實際上,每一個簇是一個樣本的幾何,所以,只需採用關於集合的某種距離便可。例如,在給定簇與,可經過下面的式子來計算距離:

最小距離:

最大距離:

平均距離:

顯然,最小距離由兩個簇的最近樣本決定,最大距離由兩個簇的最遠樣本決定,而平均距離則由兩個簇的全部樣本共同決定。當、和計算時,AGNES算法被相應地稱爲「單連接」、「全連接」或「均連接」算法。

AGNES算法描述如圖所示,在1-9行,算法先對僅包含一個樣本的初始聚類簇和相應的距離矩陣進行初始化;而後在第11-23行,AGNES不斷合併距離最近的聚類簇,並對合並獲得的聚類簇的距離矩陣進行更新;上述過程不斷重複,直到達到預設的聚類簇數。

算法流程:

輸入:樣本集D={,...,};

      聚類簇距離度量函數d;

      聚類簇數k.

過程:

1. for j = 1,2,...,m do

2.   

3. end for

4. for i = 1,2,...,m do

5.    for j = 1,2,...,m do

6.       ;

7.        )

8.         end for

9.  end for 

10. 設置當前聚類簇個數:

11. while q>k do

12.   找出距離最近的兩個聚類簇 ;

13.   合併和:

14.   for  do

15.     將聚類簇;

16.   end for 

17.   刪除距離矩陣矩陣M的第行與第列;

18.   for  do 

19.     ;

20.     )

21.   end for

22.   q = q -1 

23. end while

輸出:簇劃分

 

1.6     總結

聚類算法能夠稱得上是機器學習中「新算法」出現最多、最快的領域,一個重要的緣由是聚類不存在客觀標準;給定數據集,總能從某個角度找到以往算法未覆蓋的某種標準從而設計出新算法。相對於機器學習的其餘分支來講,聚類的知識還不夠系統化。但聚類技術自己在現實任務重很是重要。

聚類的性能度量常見的還有F值、互信息以及平均廓寬等。

相關文章
相關標籤/搜索