標籤:

生成式和判別式

機器學習模型分類的方式有多種,比如根據訓練集合裡面是否有target,將模型分為有監督學習、半監督學習、無監督學習。生成式模型和判別式模型是另外一種分類方式。

生成式模型擬合的是數據的表徵,即數據分布P(x)或者聯合分布P(x, y)。訓練好生成式模型之後,可以直接應用這個學習出來的分布,或者通過條件概率公式:

P(y | x) = P(x, y) / P(x)

將其用於做判別類的工作。

判別式模型則直接學習類別之前的分類邊界,即P(y | x),因此判別式模型並不知道訓練數據集合的分布,只是找一個超平面做直截了當的損失最小化。

維基百科上有一個經典的例子。假設有四個samples:

生成式模型看待這個訓練集的方式P(x, y)為:

可以看到Sigma P(x, y) = 1;

而判別式模型看待這個訓練集的方式P(y | x)為:

同樣很明了:sum_{y}{P(y | x)} = 1

Andrew Ng和Micheal Jordan有篇論文以樸素貝葉斯和邏輯回歸舉例談到了生成式和判別式的一些問題。提到NB和LR在判別方面其實是一體兩面,也就是所謂的"生成-判別對"。

首先看LR的分類超平面,直接可以得出:

log(P(y=1|x)/P(y=0|x)) = sum_{i}w_{i}*x_{i}  + bias (1)

然後看NB的:

P(y=1|x)

= P(y=1, x) / P(x)

= P(x|y=1)*P(y=1)/P(x) (2)

P(y=0|x) = P(y=0, x)/P(x)

 = P(x|y=0)*P(y=0)/P(x) (3)

直接求odds的logit的話,由(2), (3)得到:

log(P(y=1|x)/P(y=0|x))

= log(P(x|y=1)) + log(P(y=1)) - log(P(x|y=0)) - log(P(y=0)) f(4)

下面用P_{1}(x) 代表P(x|y=1),p代表P(y=1),因為NB的強假設是特徵之間的獨立性,又假設特徵都是0-1變數,所以有:

log(P_{1}(x)) = log(prod_{i}P_{1}(x_{i})  ) = sum_{i}{logP_{1}(x_{i} )} = sum_{i}(x_{i}log P_{1}(x_{i}=1 ) + (1-x_{i})  log P_{1}(x_{i} =0)

=sum_{i}logP_{1}(x_{i}=0) + sum_{i}x_{i}*log(P_{1}(x_{i}=1)/P_{1}(x_{i}=0))

代入(4)可得到:

log(P(y=1|x)/P(y=0|x)) =

 sum_{i}logP_{1}(x_{i}=0) + sum_{i}x_{i}*log(P_{1}(x_{i}=1)/P_{1}(x_{i}=0))  -

sum_{i}logP_{0}(x_{i}=0) - sum_{i}x_{i}*log(P_{0}(x_{i}=1)/P_{0}(x_{i}=0))   +

plog(p) - log(1 - p)

將該式中的常數項合併,並且將x_{i}的係數合併之後,可以看到也是一個線性組合!

論文中通過理論和實驗證明了,判別模型的漸近誤差更小,然而生成模型能夠更迅速的收斂到自己的極小漸近誤差,所以隨著訓練樣本的逐漸增大,生成模型一開始能夠表現的更好,但是判別模型隨後能追上,也很有可能趕超上來。

最後引用一句Vapnik一句有名的話結尾:

One should solve the [classification] problem directly and never solve a more general problem as an intermediate step [such as modeling p(x|y)].

References:

1. Generative model

2. ai.stanford.edu/~ang/pa

3. Discriminative Modeling vs Generative Modeling


推薦閱讀:

第三章 線性模型
[貝葉斯二]之貝葉斯決策理論
關於不平衡數據集以及代價敏感學習的探討
Fisher Linear Discriminant Analysis(Fisher線性判別分析)
複習:決策樹

TAG:機器學習 |