天天看點

Andrew Ng機器學習公開課筆記 -- Generative Learning algorithms

網易公開課,第5課 

學習算法有兩種,一種是前面一直看到的,直接對p(y|x; θ)進行模組化,比如前面說的線性回歸或邏輯回歸,這種稱為判别學習算法(discriminative learning algorithms)

另外一種思路,就是這裡要談的,稱為生成學習算法(generative learning algorithms),差別在于不會直接對p(y|x; θ)進行模組化,而是對p(x|y) (and p(y))進行模組化,然後用bayes定理算出p(y|x) 

Andrew Ng機器學習公開課筆記 -- Generative Learning algorithms

不像判别方法,給定x就能通過訓練的模型算出結果 

比如邏輯回歸中,通過 

Andrew Ng機器學習公開課筆記 -- Generative Learning algorithms

而生成學習算法的思路是這樣的,由于需要對p(x|y)進行模組化,x是連續的,但對于分類問題y是離散的,比如取值0或1 

我們做的是,分别對每種y的情況進行模組化,比如判斷垃圾郵件,那麼分别對垃圾和正常郵件進行模組化,得到 

p(x|y = 0) models 和 p(x|y = 1) models 

而p(y) (called the class priors)往往是比較容易算出的 

當來一個新的x時,需要計算每個y的p(y|x),并且取機率最大的那個y 

這裡由于隻需要比較大小,p(x)對于大家都是一樣的,不需要算

Andrew Ng機器學習公開課筆記 -- Generative Learning algorithms

是以對于任意生成學習算法,關鍵就是要學習出 

p(x|y = 0) models 和 p(x|y = 1) models

gaussian discriminant analysis

首先學習的一個生成算法就是gda,高斯判别分析 

不解為何生成算法要叫判别。。。

多項高斯分布 

對于這個算法,首先要假設p(x|y)符合多項高斯分布(multivariate normal distribution),差別于一般的高斯分布,參數μ是一維的,而多項高斯分布參數是n維的 

Andrew Ng機器學習公開課筆記 -- Generative Learning algorithms

其中, 

Andrew Ng機器學習公開課筆記 -- Generative Learning algorithms
Andrew Ng機器學習公開課筆記 -- Generative Learning algorithms

關于這個分布,課件裡面講的很詳細,還有很多圖,參考課件吧 

其實隻要知道這個分布也是一個bell-shape curve,μ會影響bell的位置(平移) 

而covariance matrix會影響bell的高矮,扁圓的形狀

the gaussian discriminant analysis model 

繼續講這個模型 

前面說了對于生成學習算法,關鍵就是要找出p(x|y = 0),p(x|y = 1)和p(y) 

Andrew Ng機器學習公開課筆記 -- Generative Learning algorithms

好了解嗎,y取值0或1,一定是伯努利分布,而p(x|y)根據前面假設一定是符合多項高斯分布,是以有 

Andrew Ng機器學習公開課筆記 -- Generative Learning algorithms
Andrew Ng機器學習公開課筆記 -- Generative Learning algorithms

怎麼學?最大似然估計

Andrew Ng機器學習公開課筆記 -- Generative Learning algorithms

這裡和判别學習算法不同, 

判别學習算法,對p(y|x; θ)進行模組化,是以稱為conditional似然估計 

而生成學習算法,是對于p(x|y)*p(y),即p(x,y)進行模組化,是以稱為joint似然估計

使用最優化算法計算maximizing ℓ,得到參數如下(計算過程略去) 

Andrew Ng機器學習公開課筆記 -- Generative Learning algorithms

雖然沒有寫計算過程,但是得到的這個結果是reasonable的 

φ就是y=1的機率,算出的結果就是在訓練集中y=1的比例 

μ0,μ1,結果是訓練集中y=0(或y=1)時x的均值,都很合理

計算出這些參數,我們就得到p(x|y = 0),p(x|y = 1)和p(y),然後可以使用上面的方法就行預測

discussion: gda and logistic regression 

這裡有個很有趣的結論

we just argued that if p(x|y) is multivariate gaussian (with shared ), then p(y|x) necessarily follows a logistic function. the converse, however, is not true;

當p(x|y)滿足multivariate gaussian的時候,p(y|x)一定是logistic function,但反之不成立。 

使用視訊中的截圖,更容易了解 

Andrew Ng機器學習公開課筆記 -- Generative Learning algorithms

圖中,叉表示y=0的點,圈表示y=1的點 

是以對于y=0和y=1分别模組化,就得到兩邊的兩個bell-shaped的高斯曲線 

這時如果要畫出p(y=1|x),就得到中間的sigmod曲線 

越靠左y=1的機率越小,越靠右y=1的機率越接近1,在中間兩個曲線交界的地方,y=1的機率為0.5 

非常形象的說明為什麼p(y|x)會是一個logistic function

更酷的是,這個結論可以推廣到任何指數族分布,即任何廣義線性模型的分布

那麼這裡産生的問題就是,我們為什麼需要gda,直接使用邏輯回歸不可以嗎? 

兩者差別在于, 

gda比邏輯回歸做出更強的假設,因為前面的結論是不可逆的 

是以當資料p(x|y)确實或近似符合高斯分布時,gda更有效,并且需要更少的訓練資料就可以達到很好的效果 

但是在實際中,其實你很難确定這點, 

這時邏輯回歸有更好的魯棒性,比如如果p(x|y)符合泊松分布,而你誤認為符合高斯分布,而使用gda,那麼效果就會不太好 

而邏輯回歸,對資料做出的假設比較少,隻要p(x|y)指數族分布,都會有比較好的效果,當然邏輯回歸需要的訓練資料也是比較多的

這裡其實就是一個balance 

模型假設強弱和訓練資料量之間的權衡 

如果你明确知道符合高斯分布,那麼用比較少的訓練資料,使用gda就很好 

如果不确定,就使用邏輯回歸,用比較多的訓練資料

本文章摘自部落格園,原文釋出日期:2014-04-08