1. 程式人生 > >生成模型中的高斯判別分析和樸素貝葉斯

生成模型中的高斯判別分析和樸素貝葉斯

設樣本為X(大寫X表示向量),其類別為y。下面的圖片若非特殊宣告,均來自cs229 Lecture notes 2。

用於分類的機器學習演算法可以分為兩種:判別模型(Discriminative learning algorithms)和生成模型(Generative Learning algorithms)。判別模型試圖直接求出p(y|X),如logistic regression,或者直接將樣本空間X對映到類別空間y,,如 {0,1}。具體來說,它試圖在一個高維空間裡找到一條能將不同類別的樣本區分開的直線。而生成模型則試圖對p(X|y)建模,再利用Bayes定理求出p(y|X)。

把feature向量按連續和離散分,下面分別介紹兩個生成模型:高斯判別分析, 樸素貝葉斯。



1高斯判別分析(Gaussian discriminant analysis)

比如我們現在要區分兩種魚A和B,feature向量為2維:體重和長度。GDA假設不同的類別的feature向量分別服從各自的多元高斯分佈(multivariate normal distribution)。因此,整個模型如下(這裡假設不同類的協方差矩陣是相同的):

帶入公式,得到

使用最大似然估計使聯合概率最大化,得到引數的最大似然估計:

其中“1{y = 1}”,如果y=1則表示式值為1,否則值為0。可以看到結果十分直觀,mul為樣本的均值,協方差矩陣也是按定義來的。

1.1異常檢測(Anomaly Detection)

類似的生成模型還可以用於異常檢測(Anomaly Detection),而且更為簡單——因為只用對正常狀態下的feature向量建模。建模完成後,將測試樣本帶入在訓練集上求得的高斯模型:

來自《Machine Learning》的第八個練習講義

若p小於一定閥值epsilon,則該樣本異常。而epsilon可以通過cross-validation確定。這裡值得補充的是,GDA相對於logistic regression對樣本做了更強的假設:若p(X|y)服從多元高斯分佈,則p(y|X)一定滿足logistic 函式。反之則不成立。因此,如果樣本確實服從高斯分佈,那麼用GDA效果會更好。另一方面,logistic regression則更魯棒,因為它可以fit 除了高斯分佈以外的模型。

2樸素貝葉斯(Naive Bayes)

2.1模型一

假設要進行垃圾郵件(spam)的區分。Naïve貝葉斯分類器則假設單詞x之間是條件獨立的,若某單詞出現,則對應的x為1,否則為0。設vocabulary的大小為5000,y為郵件類別。則給定y時,一個郵件的生成概率如下:

通過最大化聯合概率,得到引數的最大似然估計如下,

同樣是個很直觀的結果,某類中出現一個單詞的概率只是所有郵件中出現的均值。而一封測試郵件屬於類別1的概率為

(1)

類似的可以得到屬於類別0的概率。最後取概率較大的那個類別。注意,若測試郵件中含有訓練集中從未出現過的單詞,則上述表示式是不良定義的(出現0除以0)。因此要使用拉普拉斯平滑(Laplace smoothing)。Laplace smoothing是保證似然概率sum to 1的前提下,讓每個單詞至少出現一次。對於2分類,改進後的引數估計如下,

最後,很多情況下(1)中的p(x)無法直接求解(積不出來或者X的維數太大)。但幸運的是這裡(最大似然估計)的結果與P(X)無關。

2.2模型二

上述的生成模型對應的生成過程如下:
①Sample出一個郵件的類別  y  ~  Bernoulli
②遍歷vocabulary,確定每個單詞是否出現在該郵件中 x_i  ~  Bernoulli

這模型有個缺點,就是沒有把單詞出現的次數考慮進來。比如一郵件中“促銷”一詞出現得越多,則其越可能是spam。改進後的生成過程如下:

①Sample出一個郵件的類別  y  ~  Bernoulli
②對於郵件中的每個單詞,從vocabulary中sample。 x  ~  multinomial

可以看到x的取值從1…|V|。最後得到引數的似然估計為:

參考文獻:

[1] cs229 Lecture notes 2 —— 《Generative Algorithms》

[2]  Machine Learning on Coursera, Programming Exercise 8