機器學習筆記—生成學習

機器學習 卡爾·高斯 動物 科技 Python愛好者社區 2017-05-24

目前我們主要介紹了建模 p(y|x;θ) 的學習算法,即關於給定 x 後 y 的條件分佈。例如,Logistic 迴歸把 p(y|x;θ) 建模為 hθ(x)=g(θθx),其中 g 是 sigmoid 函數。本文將介紹一種不同類型的算法。

考慮一個分類問題,學習根據動物的特徵區分大象(y=1)和狗(y=0)。給定一個訓練集,像 Logistic 迴歸或者感知機這種算法會試圖找到一條直線,即決策邊界,把大象和狗區分開,然後,來一個新的動物,就可以根據它落在哪個邊界內,就屬於哪種動物。

有一種不同的方法,首先,看看大象,建立一個大象的特徵模型,再看看狗,建立一個狗的單獨模型。最後,來了新動物,就分別跟大象和狗的特徵比對,看跟哪個更像,就是哪個。

直接學習 p(y|x) 的算法(如 Logistic 迴歸),或者學習從輸入空間 X 到 標籤 {0,1} 的映射的算法(如感知機算法),被稱為判別學習算法。本文我們介紹的算法是試圖建模 p(x|y) 和 p(y),被稱為生成學習算法。例如,如果 y 表示一個數據是狗(0),或者大象(1),那麼 p(x|y=0) 就建模了狗的特徵分佈,p(x|y=1) 建模了大象的特徵分佈。

建模 p(y) 和 p(x|y) 後,我就能使用貝葉斯規則來導出後驗概率:

機器學習筆記—生成學習

其中,分母 p(x)=p(x|y=1)p(y=1)+p(x|y=0)p(y=0)。實際上,如果計算 p(y|x) 只是為了預測分類,那我們就不必計算分母。因為:

機器學習筆記—生成學習

生成學習是一種跟判別學習不同的算法。

1、高斯判別分析

有個分類問題,輸入特徵 x 是連續值的隨機向量,就可以用高斯判別分析(GDA)模型,即用多元正態分佈來建模 p(x|y)。

機器學習筆記—生成學習

寫出分佈為:

機器學習筆記—生成學習

這裡,模型參數是 Φ、Σ、μ0 和 μ1。(注意雖然有兩個均值,但通常方差矩陣都是一樣的)數據的 log 似然估計為:

機器學習筆記—生成學習

通過調整參數使該 log 似然函數最大化,參數的最大似然估計為:

機器學習筆記—生成學習

當有新數據時,只需計算 p(x|y)p(y) ,找到使其最大的 y 即完成分類。

機器學習筆記—生成學習

2、樸素貝葉斯

特性向量 x 的元素是離散值。

假設有一個訓練數據集,郵件集合,被標註為垃圾郵件和非垃圾郵件。我們要建一個郵件過濾器,根據郵件特徵來判斷是否垃圾郵件。

我們用特性向量來表示郵件,向量長度等於詞典中的單詞個數,如果一封郵件包含詞典的第 i 個單詞,那麼就設 xi=1,不然 xi=0。

樸素貝葉斯對條件概率分佈作了條件獨立性的假設,即給定 y 的條件下,xi 之間是條件獨立的。例如,如果 y=1 表示垃圾郵件,“buy” 是2087號單詞,“price”是39831號單詞。“buy”有沒有出現在郵件中,跟“price”有沒有出現在郵件中沒關係。記作:p(x2087|y)=p(x2087|y,x39831)。

機器學習筆記—生成學習

我們模型的參數是 Φi|y=1=p(xi=1|y=1),Φi|y=0=p(xi=1|y=0),跟之前一樣,給定訓練數據集 {(x(i),y(i));i=1,...,m},數據的聯合分佈概率為:

機器學習筆記—生成學習

最大化該似然函數,Φy、Φi|y=1 和 Φi|y=0 的最大似然估計如下,求解過程可見參考資料2。

機器學習筆記—生成學習

當有新的數據時,就計算:

機器學習筆記—生成學習

然後選擇最高後驗概率的 y 值。

對於許多分類問題,上面的樸素貝葉斯已經能工作很好了,對於文本分類,還有一個相關的模型可以運行得更好。

在特定的文本分類情境下,上面介紹的樸素貝葉斯,使用的是多元伯努利事件模型, 在這個模型中,郵件生成的方式是,首先根據先驗概率 p(y) 隨機決定是發垃圾郵件還是非垃圾郵件,然後再掃描詞典,根據後驗概率 p(xi=1|y)=Φi|y 決定是否包含單詞 i。所以,一條信息的概率為 p(y)∏ni=1p(xi|y)。

這裡介紹的不同的模型,被稱為多項式事件模型。這個模型使用了不同的標識和特徵集合來表示郵件。xi 表示郵件中的第 i 個單詞的標誌,所以,這裡的 xi 是個整數,取值 {1,...,|V|},其中 |V| 是詞典大小。一個郵件的 n 個詞現在表示成一個 n 維的向量 {x1,x2,..,xn},n 會隨著文件不同而變化。

在多項式事件模型中,假設生成一封郵件的方式,還是先根據先驗概率 p(y) 確定是否垃圾郵件,然後郵件寫作者根據後驗概率 p(x1|y) 的多項式分佈中選擇第一個詞 x1,然後從同一個分佈中選擇 x2,類似的 x3,x3 等等,直到郵件的所有 n 個詞生成。所以該信息的概率是 p(y)∏ni=1p(xi|y) ,形式跟多元伯努利事件模型的概率看起來一樣,但表達的含義已經不一樣了,xi|y 現在是一個多項式分佈,而不是伯努利分佈。

參數 Φy=p(y),Φi|y=1=p(xj=i|y=1),Φi|y=0=p(xj=i|y=0)。注意我們的假設 p(xj|y) 對於所有的 j 都是一樣的,也就是說,這個分佈只決定於是哪個單詞,而與單詞在郵件中所在的位置無關。

給定訓練數據集 {(x(i),y(i));i=1,...,m},x(i)=(x1(i),x2(i),...,xni(i)),這裡 ni 表示訓練集中第 i 封郵件的單詞個數。數據的似然函數為:

機器學習筆記—生成學習

最大化該似然函數,參數的最大化似然估計為:

機器學習筆記—生成學習

在估計 Φk|y=1 和 Φk|y=0 時,如果要使用 Laplace 平滑,給分子加 1,分母加上 |V|。

機器學習筆記—生成學習

如果不是必需最好的分類算法,那樸素貝葉斯就非常好了,它通常是首選,因其簡單和易執行性。

問答環節:

(1)怎麼把一封郵件編程變成一個向量?

答:先定義個長度為 5000 的向量,初始化為 0,然後根據詞典來掃描郵件,假如詞典的詞彙量為 5000,掃描到郵件中有響應的單詞,則向量的該元素置為 1,一直到掃描完整封郵件,表示該郵件的向量即生成。該向量只記錄了郵件中出現了哪些單詞,而不管單詞出現的先後順序,及出現次數,也不用懂語法規則。

(2)建模 p(x|y) 時,樸素貝葉斯的條件獨立假設有什麼用?

答:假設 x 是長度為 5000 的向量,每個元素為 0 或 1。假如不作條件獨立假設,那 x 的隨便哪個元素變一下,就是一個新的向量,一共就有 25000個可能的向量,每個向量的 p(x|y) 都要通過訓練集來計算,這幾乎是不可能的。所以我們要做條件獨立假設,在給定 y 後,x 的各個元素是相互獨立的,即 p(xi|y)=p(xi|y,xj),這樣 p(x1,x2,x3|y)=p(x1|y)p(x2|y)p(x3|y),這樣就不需要很大的數據集就能建立模型。

機器學習筆記—生成學習

參考資料:

1、http://cs229.stanford.edu/notes/cs229-notes2.pdf

2、http://cs229.stanford.edu/materials/ps1.pdf

本文來自天善智能社區作者:瘋狂的拖鞋

相關推薦

推薦中...