網易公開課,第5課
notes,http://cs229.stanford.edu/notes/cs229-notes2.pdf算法
學習算法有兩種,一種是前面一直看到的,直接對p(y|x; θ)進行建模,好比前面說的線性迴歸或邏輯迴歸,這種稱爲判別學習算法(discriminative learning algorithms) 學習
另一種思路,就是這裏要談的,稱爲生成學習算法(generative learning algorithms),區別在於不會直接對p(y|x; θ)進行建模,而是對p(x|y) (and p(y))進行建模,而後用bayes定理算出p(y|x)
不像判別方法,給定x就能經過訓練的模型算出結果
好比邏輯迴歸中,經過
優化
而生成學習算法的思路是這樣的,因爲須要對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)對於你們都是同樣的,不須要算orm
因此對於任意生成學習算法,關鍵就是要學習出
p(x|y = 0) models 和 p(x|y = 1) models視頻
Gaussian discriminant analysisblog
首先學習的一個生成算法就是GDA,高斯判別分析
不解爲什麼生成算法要叫判別。。。get
多項高斯分佈
對於這個算法,首先要假設p(x|y)符合多項高斯分佈(multivariate normal distribution),區別於通常的高斯分佈,參數μ是一維的,而多項高斯分佈參數是n維的
其中,
,mean vector,是個n維的向量
,covariance matrix,是個n×n的矩陣
關於這個分佈,課件裏面講的很詳細,還有不少圖,參考課件吧
其實只要知道這個分佈也是一個bell-shape curve,μ會影響bell的位置(平移)
而covariance matrix會影響bell的高矮,扁圓的形狀it
The Gaussian Discriminant Analysis model
繼續講這個模型
前面說了對於生成學習算法,關鍵就是要找出p(x|y = 0),p(x|y = 1)和p(y)
好理解嗎,y取值0或1,必定是伯努利分佈,而p(x|y)根據前面假設必定是符合多項高斯分佈,因此有
如今問題是要根據訓練集,學習出 io
怎麼學?最大似然估計function
這裏和判別學習算法不一樣,
判別學習算法,對p(y|x; θ)進行建模,因此稱爲conditional似然估計
而生成學習算法,是對於p(x|y)*p(y),即p(x,y)進行建模,因此稱爲joint似然估計
使用最優化算法計算maximizing ℓ,獲得參數以下(計算過程略去)
雖然沒有寫計算過程,可是獲得的這個結果是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,但反之不成立。
使用視頻中的截圖,更容易理解
圖中,叉表示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就很好 若是不肯定,就使用邏輯迴歸,用比較多的訓練數據