聚類——混合高斯模型 Gaussian Mixture Model

      機器學習的常用方法,主要分爲有監督學習(supervised learning)和無監督學習(unsupervised learning)。監督學習,就是人們常說的分類,通過已有的訓練樣本(即已知數據以及其對應的輸出)去訓練得到一個最優模型(這個模型屬於某個函數的集合,最優則表示在某個評價準則下是最佳的),再利用這個模型將所有的輸入映射爲相應的輸出,對輸出進行簡單的判斷從而實現分類的目的,也就具有了對未知數據進行分類的能力。在人對事物的認識中,我們從孩子開始就被大人們教授這是鳥啊、那是豬啊、那是房子啊,等等。我們所見到的景物就是輸入數據,而大人們對這些景物的判斷結果(是房子還是鳥啊)就是相應的輸出。當我們見識多了以後,腦子裏就慢慢地得到了一些泛化的模型,這就是訓練得到的那個(或者那些)函數,從而不需要大人在旁邊指點的時候,我們也能分辨的出來哪些是房子,哪些是鳥。監督學習裏典型的例子就是KNN、SVM。無監督學習(也有人叫非監督學習,反正都差不多)則是另一種研究的比較多的學習方法,它與監督學習的不同之處,在於我們事先沒有任何訓練樣本,而需要直接對數據進行建模。這聽起來似乎有點不可思議,但是在我們自身認識世界的過程中很多處都用到了無監督學習。比如我們去參觀一個畫展,我們完全對藝術一無所知,但是欣賞完多幅作品之後,我們也能把它們分成不同的派別(比如哪些更朦朧一點,哪些更寫實一些,即使我們不知道什麼叫做朦朧派,什麼叫做寫實派,但是至少我們能把他們分爲兩個類)。無監督學習裏典型的例子就是聚類了。聚類的目的在於把相似的東西聚在一起,而我們並不關心這一類是什麼。因此,一個聚類算法通常只需要知道如何計算相似度就可以開始工作了。

         那麼,什麼時候應該採用監督學習,什麼時候應該採用非監督學習呢?我也是從一次面試的過程中被問到這個問題以後纔開始認真地考慮答案。一種非常簡單的回答就是從定義入手,如果我們在分類的過程中有訓練樣本(training data),則可以考慮用監督學習的方法;如果沒有訓練樣本,則不可能用監督學習的方法。但是事實上,我們在針對一個現實問題進行解答的過程中,即使我們沒有現成的訓練樣本,我們也能夠憑藉自己的雙眼,從待分類的數據中人工標註一些樣本,並把他們作爲訓練樣本,這樣的話就可以把條件改善,用監督學習的方法來做。當然不得不說的是有時候數據表達的會非常隱蔽,也就是說我們手頭的信息不是抽象的形式,而是具體的一大堆數字,這樣我們很難憑藉人本身對它們簡單地進行分類。這個說的好像有點不大明白,舉個例子說就是在bag-of-words模型的時候,我們利用k-means的方法聚類從而對數據投影,這時候用k-means就是因爲我們當前到手的只有一大堆數據,而且是很高維的,當我們想把他們分爲50個類的時候,我們已經無力將每個數據標記說這個數應該是哪個類,那個數又應該是哪個類了。所以說遇到這種情況也只有無監督學習能夠幫助我們了。那麼這麼說來,能不能再深入地問下去,如果有訓練樣本(或者說如果我們可以獲得到一些訓練數據的話),監督學習就會比無監督學習更合適呢?(照我們單純地想,有高人教總比自己領悟來的準,來的快吧!)我覺得一般來說,是這樣的,但是這要具體看看訓練數據的獲取。本人在最近課題的研究中,手動標註了大量的訓練樣本(當然這些樣本基本準確了),而且把樣本畫在特徵空間中發現線性可分性非常好,只是在分類面附近總有一些混淆的數據樣本,從而用線性分類器進行分類之後這樣樣本會被誤判。然而,如果用混合高斯模型(GMM)來分的話,這些易混淆的點被正確分類的更多了。對這個現象的一個解釋,就是不管是訓練樣本,還是待聚類的數據,並不是所有數據都是相互獨立同分布的。換句話說,數據與數據的分佈之間存在聯繫。在我閱讀監督學習的大量材料中,大家都沒有對訓練數據的這一假設(獨立同分布)進行說明,直到我閱讀到一本書的提示後才恍然大悟。對於不同的場景,正負樣本的分佈如果會存在偏移(可能是大的偏移,也可能偏移比較小),這樣的話用監督學習的效果可能就不如用非監督學習了。


    聚類的方法有很多種,k-means要數最簡單的一種聚類方法了,其大致思想就是把數據分爲多個堆,每個堆就是一類。每個堆都有一個聚類中心(學習的結果就是獲得這k個聚類中心),這個中心就是這個類中所有數據的均值,而這個堆中所有的點到該類的聚類中心都小於到其他類的聚類中心(分類的過程就是將未知數據對這k個聚類中心進行比較的過程,離誰近就是誰)。其實k-means算的上最直觀、最方便理解的一種聚類方式了,原則就是把最像的數據分在一起,而“像”這個定義由我們來完成,比如說歐式距離的最小,等等。想對k-means的具體算法過程瞭解的話,請看這裏。而在這篇博文裏,我要介紹的是另外一種比較流行的聚類方法----GMM(Gaussian Mixture Model)

    GMM和k-means其實是十分相似的,區別僅僅在於對GMM來說,我們引入了概率。說到這裏,我想先補充一點東西。統計學習的模型有兩種,一種是概率模型,一種是非概率模型。所謂概率模型,就是指我們要學習的模型的形式是P(Y|X),這樣在分類的過程中,我們通過未知數據X可以獲得Y取值的一個概率分佈,也就是訓練後模型得到的輸出不是一個具體的值,而是一系列值的概率(對應於分類問題來說,就是對應於各個不同的類的概率),然後我們可以選取概率最大的那個類作爲判決對象(算軟分類soft assignment)。而非概率模型,就是指我們學習的模型是一個決策函數Y=f(X),輸入數據X是多少就可以投影得到唯一的一個Y,就是判決結果(算硬分類hard assignment)。

    回到GMM,學習的過程就是訓練出幾個概率分佈,所謂混合高斯模型就是指對樣本的概率密度分佈進行估計,而估計的模型是幾個高斯模型加權之和(具體是幾個要在模型訓練前建立好)。每個高斯模型就代表了一個類(一個Cluster)。對樣本中的數據分別在幾個高斯模型上投影,就會分別得到在各個類上的概率。然後我們可以選取概率最大的類所爲判決結果。


    得到概率有什麼好處呢?我們知道人很聰明,就是在於我們會用各種不同的模型對觀察到的事物和現象做判決和分析。當你在路上發現一條狗的時候,你可能光看外形好像鄰居家的狗,又更像一點點女朋友家的狗,你很難判斷,所以從外形上看,用軟分類的方法,是女朋友家的狗概率51%,是鄰居家的狗的概率是49%,屬於一個易混淆的區域內,這時你可以再用其它辦法進行區分到底是誰家的狗。而如果是硬分類的話,你所判斷的就是女朋友家的狗,沒有“多像”這個概念,所以不方便多模型的融合。(舉例很形象生動,易於理解


    從中心極限定理的角度上看,把混合模型假設爲高斯的是比較合理的,當然也可以根據實際數據定義成任何分佈的Mixture Model,不過定義爲高斯的在計算上有一些方便之處,另外,理論上可以通過增加Model的個數,用GMM近似任何概率分佈。

    混合高斯模型的定義爲:

   

    其中K爲模型的個數,πk爲第k個高斯的權重,p(x|k)則爲第k個高斯的概率密度函數,其均值爲μk,方差爲σk。我們對此概率密度的估計就是要求πk、μk和σk各個變量。當求出的表達式後,求和式的各項的結果就分別代表樣本x屬於各個類的概率。

    在做參數估計的時候,常採用的方法是最大似然。最大似然法就是使樣本點在估計的概率密度函數上的概率值最大。由於概率值一般都很小,N很大的時候這個連乘的結果非常小,容易造成浮點數下溢。所以我們通常取log,將目標改寫成:

  

    也就是最大化log-likelyhood function,完整形式則爲:

    一般用來做參數估計的時候,我們都是通過對待求變量進行求導來求極值,在上式中,log函數中又有求和,你想用求導的方法算的話方程組將會非常複雜,所以我們不好考慮用該方法求解(沒有閉合解)。可以採用的求解方法是EM算法——將求解分爲兩步:第一步是假設我們知道各個高斯模型的參數(可以初始化一個,或者基於上一步迭代結果),去估計每個高斯模型的權值;第二步是基於估計的權值,回過頭再去確定高斯模型的參數。重複這兩個步驟,直到波動很小,近似達到極值(注意這裏是個極值不是最值,EM算法會陷入局部最優)。具體表達如下:

  

    1、對於第i個樣本xi來說,它由第k個model生成的概率爲:

   

    在這一步,我們假設高斯模型的參數和是已知的(由上一步迭代而來或由初始值決定)。

   (E step)


   

    (M step)


    3、重複上述兩步驟直到算法收斂(這個算法一定是收斂的,至於具體的證明請回溯到EM算法中去,而我也沒有具體關注,以後補上)。


 

    最後總結一下,用GMM的優點是投影后樣本點不是得到一個確定的分類標記,而是得到每個類的概率,這是一個重要信息。GMM每一步迭代的計算量比較大,大於k-means。GMM的求解辦法基於EM算法,因此有可能陷入局部極值,這和初始值的選取十分相關了。GMM不僅可以用在聚類上,也可以用在概率密度估計上。


原文地址:http://blog.csdn.net/jiang1st2010/article/details/7654120



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