根據網上的相關博客總結了一下機器學習中的這兩個概念,參考博客見文末。html
生成模型:無窮樣本==》機率密度模型 = 生成模型==》預測
判別模型:有限樣本==》判別函數 = 預測模型==》預測算法
機器學習中的模型通常分爲兩類:判別模型、生成模型,這是對問題的兩種不一樣的審視角度。網絡
假設咱們要學習一個算法區分大象和狗(假設輸入是重量、鼻子長度等特徵)。判別模型和生成模型以兩種不一樣的思路解決這個問題:app
判別模型:根據訓練集,找到一個兩種動物的一個差異(決策邊界),而後根據輸入的特徵(好比重量,鼻子長度等)看這個特種落在決策邊界的哪一邊機器學習
生成模型:根據大象的特徵,學習一個大象的模型(總結一個大象長什麼樣的規律),而後也學習一個狗的模型,爲了分類一個新的物種,咱們看這個物種和哪一個模型更加匹配函數
形式化的描述兩種模型性能
直接學習的是決策函數y = f(x) 或者條件機率p(y|x) (或者輸入X和label{0,1}的一種映射關係),利用正負例和分類標籤,關注在判別模型的邊緣分佈。更多用來直接解決給定的問題,而不側重於建模。建模的目標是 學習
主要特色:尋找不一樣類別之間的最優分類面,反映的是異類數據之間的差別.net
優勢是:設計
分類邊界更靈活,比使用純機率方法或生產模型獲得的更高級
能清晰的分辨出多類或某一類與其餘類之間的差別特徵
在聚類、viewpoint changes, partial occlusion and scale variations中的效果較好
適用於較多類別的識別
判別模型的性能比生成模型要簡單,比較容易學習
缺點是:
不能反映訓練數據自己的特性,能力有限,能夠告訴你的是1仍是2,但沒辦法把整個場景描述出來
形式和結構上不如生成式模型優雅
相似於黑盒,變量之間的關係不明確
常見判別模型:邏輯迴歸,svm,傳統的神經網絡,Nearest Neighbor,GRF(條件隨機場),LDA(線性判別分析),Boosting, 線性迴歸,k近鄰,最大熵模型
---------------------------------------------------------------
學習的是聯合機率p(x,y), 因爲p(x,y) = p(x|y)*p(y), 即咱們須要學習的是p(x|y)和p(y), 就上面給的例子,若是y表示一個動物是狗(y=0)或者大象(y=1),那麼p(x|y=0)對狗的特徵進行建模,p(x|y=1)是對大象的特徵進行建模,p(y)能夠假設其服從伯努利分佈(由於y只有0,1兩種取值)。建模目標以下:
上面的式子之因此能夠忽略p(x),由於對訓練集的輸入x來講p(x)是一個常量 本文地址
模型訓練好之後對於輸入的x,咱們能夠根據一下貝葉斯公式來計算P(y|x), 而後看p(y=0|x)和p(y=1|x)哪一個較大,就劃分給那一類
(即生成模型和判別模型的最終目標都是p(y|x),只不過生成模型的目標轉換成了另外一種形式)
主要特色:通常主要是對後驗機率建模,從統計的角度表示數據的分佈狀況,可以反映同類數據自己的類似度; 只關注本身的 inclass 自己,不關心到底 decision boundary 在哪
優勢:
實際上帶的信息要比判別模型豐富,有更強的解釋力
研究單類問題比判別模型靈活性強
模型能夠經過增量學習獲得
能用於數據不完整的狀況
缺點:
學習和計算過程比較複雜
常見生成模型:GDA(高斯判別分析),樸素貝葉斯,貝葉斯網絡,Mixtures of Multinomials,高斯混合模型,Mixtures of Experts,隱馬爾科夫模型,Sigmoidal Belief Networks,馬爾科夫隨機場,LDA(潛在狄立克雷分配)
----------------------------------------------------------
下面是全文轉zouxy09的文章生成模型與判別模型,講的很詳細
一直在看論文的過程當中遇到這個問題,折騰了很多時間,而後是下面的一點理解,不知道正確否。如有錯誤,還望各位前輩不吝指正,以避免小弟一錯再錯。在此謝過。
1、決策函數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對應的類。
實際上,說了那麼多,也不知道本身表達清楚了沒有。那咱們是談生成模型和判別模型,上面到底囉嗦了那麼多到底有啥陰謀啊?呵呵,往下說就知道了。
2、生成方法和判別方法
監督學習方法又分生成方法(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的生成關係。用於隨機生成的觀察值建模,特別是在給定某些隱藏參數狀況下。典型的生成模型有:樸素貝葉斯和隱馬爾科夫模型等。
3、生成模型和判別模型的優缺點
在監督學習中,兩種方法各有優缺點,適合於不一樣條件的學習問題。
生成方法的特色:上面說到,生成方法學習聯合機率密度分佈P(X,Y),因此就能夠從統計的角度表示數據的分佈狀況,可以反映同類數據自己的類似度。但它不關心到底劃分各種的那個分類邊界在哪。生成方法能夠還原出聯合機率分佈P(Y|X),而判別方法不能。生成方法的學習收斂速度更快,即當樣本容量增長的時候,學到的模型能夠更快的收斂於真實模型,當存在隱變量時,仍能夠用生成方法學習。此時判別方法就不能用。
判別方法的特色:判別方法直接學習的是決策函數Y=f(X)或者條件機率分佈P(Y|X)。不能反映訓練數據自己的特性。但它尋找不一樣類別之間的最優分類面,反映的是異類數據之間的差別。直接面對預測,每每學習的準確率更高。因爲直接學習P(Y|X)或P(X),能夠對數據進行各類程度上的抽象、定義特徵並使用特徵,所以能夠簡化學習問題。
4、生成模型和判別模型的聯繫
由生成模型能夠獲得判別模型,但由判別模型得不到生成模型。
5、再形象點能夠嗎
例如咱們有一個輸入數據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)對。
再假如你的任務是識別一個語音屬於哪一種語言。例如對面一我的走過來,和你說了一句話,你須要識別出她說的究竟是漢語、英語仍是法語等。那麼你能夠有兩種方法達到這個目的:
一、學習每一種語言,你花了大量精力把漢語、英語和法語等都學會了,我指的學會是你知道什麼樣的語音對應什麼樣的語言。而後再有人過來對你哄,你就能夠知道他說的是什麼語音,你就能夠罵他是「米國人仍是小日本了」。(呵呵,切勿將政治摻雜在技術裏面)
二、不去學習每一種語言,你只學習這些語言模型之間的差異,而後再分類。意思是指我學會了漢語和英語等語言的發音是有差異的,我學會這種差異就行了。
那麼第一種方法就是生成方法,第二種方法是判別方法。
生成算法嘗試去找到底這個數據是怎麼生成的(產生的),而後再對一個信號進行分類。基於你的生成假設,那麼那個類別最有可能產生這個信號,這個信號就屬於那個類別。判別模型不關心數據是怎麼生成的,它只關心信號之間的差異,而後用差異來簡單對給定的一個信號進行分類。
6、對於跟蹤算法
跟蹤算法通常來講能夠分爲兩類:基於外觀模型的生成模型或者基於外觀模型的判別模型。
生成模型:通常是學習一個表明目標的模型,而後經過它去搜索圖像區域,而後最小化重構偏差。相似於生成模型描述一個目標,而後就是模式匹配了,在圖像中找到和這個模型最匹配的區域,就是目標了。
判別模型:將跟蹤問題當作一個二分類問題,而後找到目標和背景的決策邊界。它無論目標是怎麼描述的,那隻要知道目標和背景的差異在哪,而後你給一個圖像,它看它處於邊界的那一邊,就歸爲哪一類。
參考:
判別模型和生成模型 -- ML Step By Step(4)
【版權聲明】轉載請註明出處:http://www.cnblogs.com/TenosDoIt/p/3721074.html