機器學習之Logistic迴歸

7.1 分類問題

本節內容:什麼是分類

之前的章節介紹的都是迴歸問題,接下來是分類問題。所謂的分類問題是指輸出變量為有限個離散值,比如正確或錯誤、0或1、是或否等等。我們將首先從二元分類問題開始討論,可將分類總結成 y ∈ { 0 , 1 },,其中 0 表示負向類,1 表示正向類。

Logistic迴歸與線性迴歸有一個主要的區別,在線性迴歸中,ℎ()的值可以小於0,也可以大於1;而在Logistic迴歸中,ℎ()的值在 0 - 1 的範圍內。所以這個算法的性質是:它的輸出值永遠在0 - 1 之間。

注意:Logistic迴歸是一種分類算法。雖然它也被稱為迴歸,但實際上是分類算法,適用於輸出變量y取離散值的情況。

7.2 假設函數

本節內容:邏輯迴歸的假設函數ℎ()是什麼。

在上節中我們介紹了,分類器的輸出值在 0 和1 之間。因此,我們希望找出一個滿足該性質的假設函數,即預測值要在 0 和1 之間。我們可以將 ℎ() 視為某種情況的概率,如正確或者錯誤的概率:

當ℎ() >= 0.5時,預測 = 1。 比如一件事情為正確的概率大於0.5,那麼我們就認為它是正確的(取1);

當ℎ() < 0.5時,預測 = 0。 比如一件事情為正確的概率大於0.5,那麼我們就認為它是錯誤的(取0)。

引入新的模型:邏輯迴歸,該模型的輸出變量範圍始終在 0 和 1 之間。邏輯迴歸的假設函數的模型是: ℎ() = () ,其中: 代表特徵向量 , 代表S形函數(sigmoid函數),公式:

機器學習之Logistic迴歸

因此:

機器學習之Logistic迴歸

S形函數的圖像為:

機器學習之Logistic迴歸

如上文中所談,ℎ()的作用是:對於給定的輸入變量,根據選擇的參數計算輸出變量=1 的可能性,即ℎ() = ( = 1|;) 。例如,對於給定的 x ,通過已經確定的參數計算得出:ℎ() = 0.7,則表示有70%的幾率 y 為正向類,相應地 y 為負向類的幾率為1 - 0.7 = 0.3。


7.3 判定邊界

對於線性可分的分類情況,可以用簡單的線性模型進行分類。如下圖所示:

機器學習之Logistic迴歸

對於複雜的分析情況,可能需要加入二次方特徵,使得 ℎ() = (0 + 11 + 2

2 + 312 + 422)。如下圖所示:

機器學習之Logistic迴歸

由此可見,判定邊界並不是訓練集的屬性,而是假設函數本身及其參數的屬性。只要給定了參數向量 ,就可以得到判定邊界。我們可以用非常複雜的模型來適應非常複雜形狀的判定邊界。

7.4 代價函數

對於線性迴歸模型,我們定義的代價函數是所有模型誤差的平方和。理論上來說,我們也可以對邏輯迴歸模型沿用這個定義,但是問題在於,當我們帶入到這樣定義了的代價函數中時,我們得到的代價函數將是一個非凸函數。

機器學習之Logistic迴歸

非凸函數中局部最優解太多,可能會導致無法收斂到全局最小值。引出需要找到一個非凸的代價函數。

需要重新定義代價函數為:

機器學習之Logistic迴歸

其中

機器學習之Logistic迴歸

第一種情況:y = 1 時,ℎ()與 (ℎ(), )之間的關係圖:

機器學習之Logistic迴歸

(1) 當實際的y = 1,且ℎ() = 1 時: cost = - log( ℎ() ) = 0。就是說ℎ()與實際情況y一致時,代價函數為0

(2) 當實際的y = 1,且ℎ() ≠ 1 時: 隨著ℎ()的減小,cost = - log( ℎ() ) 逐漸增大。也就是說ℎ()與實際情況 y 之間相差越大,代價函數的值也就越大。

第二種情況:y = 0 時,ℎ()與 (ℎ(), )之間的關係圖:

機器學習之Logistic迴歸

(1) 當實際的y = 0,且ℎ() = 0 時: cost = - log( ℎ() ) = 0。就是說ℎ()與實際情況y一致時,代價函數為0

(2) 當實際的y = 0,且ℎ() ≠ 0 時: 隨著ℎ()的增加,cost = - log( 1 - ℎ() ) 逐漸增大。也就是說ℎ()與實際情況 y 之間相差越大,代價函數的值也就越大。


7.5 簡化代價函數與梯度下降

我們將構建的 (ℎ(), ) 簡化如下:

(ℎ(), ) = − × (ℎ()) − (1 − ) × (1 − ℎ())

代入代價函數中得到:

機器學習之Logistic迴歸

在得到這樣一個代價函數以後,我們便可以用梯度下降算法來求得能使代價函數最小的參數了。

機器學習之Logistic迴歸

對 J() 的求導,熟悉高等數學的可以推導一下。我的推導用鉛筆寫的很潦草,這裡附上黃廣海博士的推導過程:

機器學習之Logistic迴歸

ps:如果看起來比較蒙的話,可以不把ℎ()分解開,將其視為一個整體來推導,其中ℎ()的導數 = ℎ() *(1 - ℎ())

現在,如果你把這個更新規則和我們之前用在線性迴歸上的進行比較的話,你會驚訝地發現,這個式子正是我們用來做線性迴歸梯度下降的。

但是對於線性迴歸:假設函數為

機器學習之Logistic迴歸

對於邏輯迴歸:假設函數為

機器學習之Logistic迴歸

因此,即使更新參數的規則看起來基本相同,但由於假設的定義發生了變化,所以邏輯函數的梯度下降,跟線性迴歸的梯度下降實際上是兩個完全不同的東西。


7.6 高級優化

我們在最小化代價函數中應用到了梯度下降的方法,實際上除了梯度下降法,還有很多優秀的算法來計算代價函數()和其偏導數,從而最小化代價函數。其他優化代價函數的方法有:共軛梯度法 BFGS (變尺度法) 和 L-BFGS (限制變尺度)等。關於這些優化算法的細節,可以參考該文章:【優化算法】MATLAB/Octave或者其他的一些編程語言中,並不需要自己實現這些高級算法,一般都可以找到實現這些算法的庫,調用這些庫就好啦,除非你是吳恩達所提的專門研究數值計算的人 =_=


7.7 多類別分類:一對多

在之前的內容中主要講的是二元分類,即 y ∈ { 0 , 1 }。在二元分類中,我們的數據看起來可能是像這樣:

機器學習之Logistic迴歸

但是在多元分類問題是,數據看起來是這樣的:

機器學習之Logistic迴歸

在前文中,我們已經學習瞭如何利用邏輯迴歸進行二元分類,而在多元分類中,我們利用的依舊是二元分類的思想:即將其中一類視為1,其他的全部歸類於0,這個模型記作ℎ(1)();接著,類似地第我們選擇另一個類標記為正向類( = 2),再將其它類都標記為負向類,將這個模型記作 ℎ(2)(),依此類推。

機器學習之Logistic迴歸

我們利用 k 個ℎ(),每個ℎ()都代表著某一種類別。比如ℎ(i)()代表第 i 種類別,然後在這 k 個ℎ()中找到那個使得ℎ()最大的 i ,無論 i 值是多少,我們都有最高的概率值,我們預測就是那個值。



分享到:


相關文章: