1. 程式人生 > >機器學習數學原理(3)——生成型學習演算法

機器學習數學原理(3)——生成型學習演算法

機器學習數學原理(3)——生成型學習演算法

在上一篇博文中我們通過廣義線性模型匯出了針對二分類的Sigmoid迴歸模型以及針對多項分類的Softmax迴歸模型,需要說明的是,這兩種演算法模型都屬於判別學習演算法,而這篇博文主要分析了與之區別的生成型學習演算法生成型學習演算法判別學習演算法雖然在結論上有很多相同的地方(從後面的分析中我們甚至可以發現生成學習演算法也可以匯出Sigmoid迴歸模型!),但是他們兩者之間依然存在著本質的不同。

1 生成型學習演算法介紹

1.1 貝葉斯公式

在介紹生成型學習演算法之前筆者首先介紹一下貝葉斯公式:

貝葉斯公式

這個公式不難理解,我們可以使用下面的圖片來理解:

貝葉斯公式圖示

從上圖我們可以發現其實在整個概率空間求p(x)與p(y)的交集概率可以得到如下公式:

p(x|y)p(y)=p(y|x)p(x)

將p(x)除過去便成為了貝葉斯公式。

1.2 生成學習演算法

生成型學習演算法(Generative Learning Algorithm)是對同一類的資料進行特徵的概率分佈建模,即假如現在有A(y=1)B(y=0)兩類資料,特徵向量用X來表示,生成學習演算法則是通過訓練獲得AB兩類的分佈概率p(y)(在這個二類問題中即為伯努利分佈),還有A類的特徵向量分佈p(X|y=1)以及B類的特徵向量分佈p(X|y=0),這樣當需要對一個未知的特徵向量Xc進行預測時,先將其與A類的特徵比較,發現其為A的概率為p(Xc|y=1)p(y=1)

,然後再將其與B類的特徵比較,發現其為B的概率為p(Xc|y=0)p(y=0),然後比較兩類概率大小取得分類結果。

我們現在再回過來看判別學習演算法,這兩個類別演算法之間的區別便很顯而易見了:

生成學習演算法對p(x|y)以及p(y)進行建模然後通過貝葉斯公式獲得p(y|x),然後計算求出使得p(y|x)最大的y,即為最後預測的分類。

生成y

判別學習演算法直接對p(y|x)建模,然後計算求出使得p(y|x)最大的y,即為最後預測的分類。

判別y

2 生成型學習演算法例項-高斯判別分析

這裡筆者介紹生成學習演算法中一個非常基本且常見的演算法——高斯判別分析(Gaussian Discriminant Analysis)

作為例項。高斯判別分析是建立在一個基本的假設上的:

同一類別的資料樣本的特徵向量滿足多維高斯概率分佈,不同類別之間只是多維高斯概率分佈的引數不一樣。

事實上這是一個強假設,但是事實證明大部分情況下十分的有效。

2.1 多維高斯概率分佈

多維高斯分佈(The Multivariate Normal Distribution),是正態分佈的維度擴充套件。公式如下:

  • x:輸入特徵向量
  • μ:平均向量(mean vector)
  • Σ:協方差矩陣(covariance matrix)

這裡主要說明一下協方差矩陣Σ,這裡的Σ是一個對稱的半正定矩陣。如果X~N(μ,Σ),那麼

其中E[ ]為平均函式。

2.2 高斯判別分析

現在我們來考慮一個二分類問題,其特徵均為連續型隨機變數。現在我們假設這些特徵滿足多維高斯分佈,則有:

y ~ Bernoulli (φ)

x|y=0 ~ N (μ0,Σ)

x|y=1 ~ N (μ1,Σ)

即兩類的特徵服從的高斯分佈形狀一樣,但是中心位置不一樣。寫成表示式則有:

現在我們獲得了一個含有m個樣本的樣本空間,那麼其對數似然函式(如果有疑問請看機器學習數學原理(1)——極大似然估計法)為:

然後利用個極大似然估計法(求極值時可使用梯度下降演算法,牛頓下降演算法等等)可以求出極大似然時的引數值,不令人意外的,各個引數值為:

這裡的judge函式為判斷函式,條件為真輸出1,為偽輸出0。

這幾個引數確定下來以後模型便確定了下來,p(x|y)與p(y)便確定了下來,然後就可以用前面的討論來分類了。

2.3 Sigmoid迴歸模型與高斯判別分析

正如前面所說,Sigmoid迴歸模型與高斯判別分析有著本質上的不同,但是其實高斯判別分析可以匯出Sigmoid迴歸模型,我們通過由高斯判別定型的p(x|y)與p(y),然後通過貝葉斯公式來計算給定x,y=1的概率,即求p(y=1|x)。

其中

計算後我們發現得到的是一個Sigmoid函式!

然而需要我們知道的是,反過來並不成立,即通過Sigmoid函式並不能匯出高斯判別分析,即高斯判別分析條件強於Sigmoid迴歸。

稍作思索便十分明瞭了,高斯判別分佈使用了資料滿足高斯分佈這個強條件,而Sigmoid迴歸卻不需要這樣的條件。

值得一提的是,指數族分佈的樣本都可以像高斯判別分析一樣匯出Sigmoid函式。所以我們比較一下Sigmoid迴歸模型與高斯判別分析可以得出選擇演算法的資訊:

  1. 當資料樣本不屬於高斯分佈時,使用Sigmoid函式往往能夠取得更好的分類效果。
  2. 如果資料樣本屬於高斯分佈,高斯判別分析則能更加有效的分類。
  3. Sigmoid迴歸模型具有更高的容錯率。
  4. 最後需要說明的是,有時就算資料不滿足高斯分佈,高斯判別分析依然能夠取得較好的分類效果。