生成模型與判別模型

garfielder007發表於2016-05-08

生成模型與判別模型

zouxy09@qq.com

http://blog.csdn.net/zouxy09

       一直在看論文的過程中遇到這個問題,折騰了不少時間,然後是下面的一點理解,不知道正確否。若有錯誤,還望各位前輩不吝指正,以免小弟一錯再錯。在此謝過。

 

一、決策函式Y=f(X)或者條件概率分佈P(Y|X)

       監督學習的任務就是從資料中學習一個模型(也叫分類器),應用這一模型,對給定的輸入X預測相應的輸出Y。這個模型的一般形式為決策函式Y=f(X)或者條件概率分佈P(Y|X)

       決策函式Y=f(X)你輸入一個X,它就輸出一個Y,這個Y與一個閾值比較,根據比較結果判定X屬於哪個類別。例如兩類(w1和w2)分類問題,如果Y大於閾值,X就屬於類w1,如果小於閾值就屬於類w2。這樣就得到了該X對應的類別了。

       條件概率分佈P(Y|X)你輸入一個X,它通過比較它屬於所有類的概率,然後輸出概率最大的那個作為該X對應的類別。例如:如果P(w1|X)大於P(w2|X),那麼我們就認為X是屬於w1類的。

        所以上面兩個模型都可以實現對給定的輸入X預測相應的輸出Y的功能。實際上通過條件概率分佈P(Y|X)進行預測也是隱含著表達成決策函式Y=f(X)的形式的。例如也是兩類w1和w2,那麼我們求得了P(w1|X)和P(w2|X),那麼實際上判別函式就可以表示為Y= P(w1|X)/P(w2|X),如果Y大於1或者某個閾值,那麼X就屬於類w1,如果小於閾值就屬於類w2。而同樣,很神奇的一件事是,實際上決策函式Y=f(X)也是隱含著使用P(Y|X)的。因為一般決策函式Y=f(X)是通過學習演算法使你的預測和訓練資料之間的誤差平方最小化,而貝葉斯告訴我們,雖然它沒有顯式的運用貝葉斯或者以某種形式計算概率,但它實際上也是在隱含的輸出極大似然假設(MAP假設)。也就是說學習器的任務是在所有假設模型有相等的先驗概率條件下,輸出極大似然假設。

        所以呢,分類器的設計就是在給定訓練資料的基礎上估計其概率模型P(Y|X)如果可以估計出來,那麼就可以分類了。但是一般來說,概率模型是比較難估計的。給一堆數給你,特別是數不多的時候,你一般很難找到這些數滿足什麼規律吧。那能否不依賴概率模型直接設計分類器呢?事實上,分類器就是一個決策函式(或決策面),如果能夠從要解決的問題和訓練樣本出發直接求出判別函式,就不用估計概率模型了,這就是決策函式Y=f(X)的偉大使命了。例如支援向量機,我已經知道它的決策函式(分類面)是線性的了,也就是可以表示成Y=f(X)=WX+b的形式,那麼我們通過訓練樣本來學習得到W和b的值就可以得到Y=f(X)了。還有一種更直接的分類方法,它不用事先設計分類器,而是隻確定分類原則,根據已知樣本(訓練樣本)直接對未知樣本進行分類。包括近鄰法,它不會在進行具體的預測之前求出概率模型P(Y|X)或者決策函式Y=f(X),而是在真正預測的時候,將X與訓練資料的各類的Xi比較,和哪些比較相似,就判斷它X也屬於Xi對應的類。

       實際上,說了那麼多,也不知道自己表達清楚了沒有。那我們是談生成模型和判別模型,上面到底囉嗦了那麼多到底有啥陰謀啊?呵呵,往下說就知道了。

 

二、生成方法和判別方法

       監督學習方法又分生成方法(Generative approach)和判別方法(Discriminative approach),所學到的模型分別稱為生成模型(Generative Model)和判別模型(Discriminative Model)。我們們先談判別方法,因為它和前面說的都差不多,比較容易明白。

       判別方法:由資料直接學習決策函式Y=f(X)或者條件概率分佈P(Y|X)作為預測的模型,即判別模型。基本思想是有限樣本條件下建立判別函式,不考慮樣本的產生模型,直接研究預測模型。典型的判別模型包括k近鄰,感知級,決策樹,支援向量機等。

       生成方法:由資料學習聯合概率密度分佈P(X,Y),然後求出條件概率分佈P(Y|X)作為預測的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)。基本思想是首先建立樣本的聯合概率概率密度模型P(X,Y),然後再得到後驗概率P(Y|X),再利用它進行分類,就像上面說的那樣。注意了哦,這裡是先求出P(X,Y)才得到P(Y|X)的,然後這個過程還得先求出P(X)。P(X)就是你的訓練資料的概率分佈。哎,剛才說了,需要你的資料樣本非常多的時候,你得到的P(X)才能很好的描述你資料真正的分佈。例如你投硬幣,你試了100次,得到正面的次數和你的試驗次數的比可能是3/10,然後你直覺告訴你,可能不對,然後你再試了500次,哎,這次正面的次數和你的試驗次數的比可能就變成4/10,這時候你半信半疑,不相信上帝還有一個手,所以你再試200000次,這時候正面的次數和你的試驗次數的比(就可以當成是正面的概率了)就變成5/10了。這時候,你就覺得很靠譜了,覺得自己就是那個上帝了。呵呵,真囉嗦,還差點離題了。

       還有一個問題就是,在機器學習領域有個約定俗成的說法是:不要去學那些對這個任務沒用的東西。例如,對於一個分類任務:對一個給定的輸入x,將它劃分到一個類y中。那麼,如果我們用生成模型:p(x,y)=p(y|x).p(x)

       那麼,我們就需要去對p(x)建模,但這增加了我們的工作量,這讓我們很不爽(除了上面說的那個估計得到P(X)可能不太準確外)。實際上,因為資料的稀疏性,導致我們都是被強迫地使用弱獨立性假設去對p(x)建模的,所以就產生了侷限性。所以我們更趨向於直觀的使用判別模型去分類。

       這樣的方法之所以稱為生成方法,是因為模型表示了給定輸入X產生輸出Y的生成關係。用於隨機生成的觀察值建模,特別是在給定某些隱藏引數情況下。典型的生成模型有:樸素貝葉斯和隱馬爾科夫模型等。

 

三、生成模型和判別模型的優缺點

       在監督學習中,兩種方法各有優缺點,適合於不同條件的學習問題。

        生成方法的特點:上面說到,生成方法學習聯合概率密度分佈P(X,Y),所以就可以從統計的角度表示資料的分佈情況,能夠反映同類資料本身的相似度。但它不關心到底劃分各類的那個分類邊界在哪。生成方法可以還原出聯合概率分佈P(Y|X),而判別方法不能。生成方法的學習收斂速度更快,即當樣本容量增加的時候,學到的模型可以更快的收斂於真實模型,當存在隱變數時,仍可以用生成方法學習。此時判別方法就不能用。

       判別方法的特點:判別方法直接學習的是決策函式Y=f(X)或者條件概率分佈P(Y|X)。不能反映訓練資料本身的特性。但它尋找不同類別之間的最優分類面,反映的是異類資料之間的差異。直接面對預測,往往學習的準確率更高。由於直接學習P(Y|X)或P(X),可以對資料進行各種程度上的抽象、定義特徵並使用特徵,因此可以簡化學習問題。

 

四、生成模型和判別模型的聯絡

       由生成模型可以得到判別模型,但由判別模型得不到生成模型。

 

五、再形象點可以嗎

       例如我們有一個輸入資料x,然後我們想將它分類為標籤y。(迎面走過來一個人,你告訴我這個是男的還是女的)

       生成模型學習聯合概率分佈p(x,y),而判別模型學習條件概率分佈p(y|x)

下面是個簡單的例子:

例如我們有以下(x,y)形式的資料:(1,0), (1,0), (2,0), (2, 1)

那麼p(x,y)是:

                y=0   y=1

               -----------

       x=1 | 1/2   0

       x=2 | 1/4   1/4

而p(y|x) 是:

               y=0   y=1

               -----------

        x=1| 1     0

        x=2| 1/2   1/2

       我們為了將一個樣本x分類到一個類y,最自然的做法就是條件概率分佈p(y|x),這就是為什麼我們對其直接求p(y|x)方法叫做判別演算法。而生成演算法求p(x,y),而p(x,y)可以通過貝葉斯方法轉化為p(y|x),然後再用其分類。但是p(x,y)還有其他作用,例如,你可以用它去生成(x,y)對。

 

       再假如你的任務是識別一個語音屬於哪種語言。例如對面一個人走過來,和你說了一句話,你需要識別出她說的到底是漢語、英語還是法語等。那麼你可以有兩種方法達到這個目的:

1、學習每一種語言,你花了大量精力把漢語、英語和法語等都學會了,我指的學會是你知道什麼樣的語音對應什麼樣的語言。然後再有人過來對你哄,你就可以知道他說的是什麼語音,你就可以罵他是“米國人還是小日本了”。(呵呵,切勿將政治摻雜在技術裡面)

2、不去學習每一種語言,你只學習這些語言模型之間的差別,然後再分類。意思是指我學會了漢語和英語等語言的發音是有差別的,我學會這種差別就好了。

     那麼第一種方法就是生成方法,第二種方法是判別方法。

 

       生成演算法嘗試去找到底這個資料是怎麼生成的(產生的),然後再對一個訊號進行分類。基於你的生成假設,那麼那個類別最有可能產生這個訊號,這個訊號就屬於那個類別。判別模型不關心資料是怎麼生成的,它只關心訊號之間的差別,然後用差別來簡單對給定的一個訊號進行分類。

 

六、對於跟蹤演算法

        跟蹤演算法一般來說可以分為兩類:基於外觀模型的生成模型或者基於外觀模型的判別模型。

        生成模型:一般是學習一個代表目標的模型,然後通過它去搜尋影象區域,然後最小化重構誤差。類似於生成模型描述一個目標,然後就是模式匹配了,在影象中找到和這個模型最匹配的區域,就是目標了。

        判別模型:將跟蹤問題看成一個二分類問題,然後找到目標和背景的決策邊界。它不管目標是怎麼描述的,那隻要知道目標和背景的差別在哪,然後你給一個影象,它看它處於邊界的那一邊,就歸為哪一類。


from: http://blog.csdn.net/zouxy09/article/details/8195017

相關文章