判別模型vs生成模型
條件概率分布p(y|x)
從概率的角度來看監督學習的話,其實就是從數據集中學習條件概率分布p(y|x)。其中,x∈Rn表示n維數據特征,y∈R表示數據對應的類別標簽。給定一個x,模型計算出x屬于各個類別標簽y的概率p(y|x),然后判定x的預測標簽為p(y|x)最大的y標簽。
比如,現在的一個問題為判定一個動物是汪星人還是喵星人。這個問題可以表示為x=[叫聲,食物,毛的顏色],y=[汪星人,喵星人]。監督學習就是去比較p(y=汪星人|x) 和p(y=喵星人|x)的概率誰大,預測給定的動物為概率較大的動物。
判別模型(discriminative model) vs 生成模型(generative model)
監督學習中估計p(y|x)的方法分為兩種:判別方法和生成方法,其對應的就是判別模型和生成模型。
判別模型:基于給定的數據集,直接計算p(y|x),形象的說就是直接學習找到一條決策邊界,判別數據的類別標簽,在決策邊界一側的是類別0,在另外一側的是類別1。形象的描述可以使用下圖表示:給定一堆的藍色和紅色的點,監督學習通過不斷的學習找到了一條直線,這條直線盡可能的將不同顏色的點劃分開來。當給定了一個新的點,如果這個條落在直線的上方,則判定為紅色,否則為藍色。 
考慮上述所說的判定動物為貓還是狗的問題,用判別模型解決就是,通過觀察這個動物的叫聲、食物和毛的顏色特征,來直接判定這個動物是屬于汪星人還是汪星人。常見的判別模型有KNN,決策樹,PLA等。
生成模型 :基于給定的數據集,首先要學習得到其聯合概率分布p(x,y)和p(x),再通過等式p(y|x)=p(x,y)p(x)=p(x|y)p(y)p(x)來計算p(y|x)。考慮上述所說的判定動物為喵星人還是汪星人的問題,用判生成解決就是,給定一堆的喵星人和汪星人,我們可以很容易得到p(y=喵星人)=喵星人的個數總個數和p(y=汪星人)=汪星人的個數總個數,然后我們還需要觀察喵星人有什么特征p(x|y=喵星人)和汪星人有什么特征p(x|y=汪星人)。比如喵星人吃魚,“喵喵喵”的叫;汪星人吃骨頭,“汪汪汪”的叫。當判定一個新動物的時候,去觀察這個新動物的特征更像汪星人p(y=汪星人|x) 還是貓星人p(y=喵星人|x)。
在生成模型中,我們還需要對p(x)建模,如果有大量數據的話,可以較準確的衡量P(x),但是如果數據量較少就會導致偏差。不過,如果數據集固定,那么對于任意的類別標簽p(x)都是一個定值 p(x)=p(x|y=1)p(y)+p(x|y=0)p(y=0),因此我們可以直接通過p(y|x)∝p(x|y)p(y)來衡量。
生成模型中常見的有:NB,HMM等。
判別模型和生成模型的優缺點
判別模型: - 缺點:判別模型直接學習P(y|x),即找到一條判別邊界,使得不同類別之間的劃分距離盡可能大,并不關心數據本身的特征p(x),因此無法反應數據的特性。 - 但是正是由于判別模型不關心p(x),直接有數據集學習判定預測數據的類別,因此減少了計算,模型簡單。
生成模型: - 缺點:與判別模型相反,生成模型因為考慮了p(x,y)和P(x),導致了模型復雜度增加,而且由于P(x)會引來偏差,降低預測準確率。 - 優點: 生成模型可以學習到數據本身的特征,并且可以將學習到的特征,應用到其他判別問題上。如果估計的問題并不是數據所屬的類別y,而是某個隱藏的特性z,生成模型就可以估計出隱藏變量z的分布,判別模型就無法做到:p(y|x)p(x)=p(x)p(z|x)p(y|z)