(轉)邏輯迴歸與梯度降低法

1、邏輯迴歸

1) Classification(分類)html

分類問題舉例:git

  1. 郵件:垃圾郵件/非垃圾郵件?
  2. 在線交易:是否欺詐(是/否)?
  3. 腫瘤:惡性/良性?

以上問題能夠稱之爲二分類問題,能夠用以下形式定義:算法

二分類問題-我愛公開課-52opencourse.com

其中0稱之爲負例,1稱之爲正例。框架

對於多分類問題,能夠以下定義因變量y:函數

 

y{0,1,2,3,...,n}

 

若是分類器用的是迴歸模型,而且已經訓練好了一個模型,能夠設置一個閾值:學習

  • 若是hθ(x)0.5,則預測y=1,既y屬於正例;
  • 若是hθ(x)<0.5,則預測y=0,既y屬於負例;

若是是線性迴歸模型,對於腫瘤這個二分類問題,圖形表示以下:優化

線性迴歸二分類問題-我愛公開課-52opencourse.com

可是對於二分類問題來講,線性迴歸模型的Hypothesis輸出值hθ(x)能夠大於1也能夠小於0。atom

這個時候咱們引出邏輯迴歸,邏輯迴歸的Hypothesis輸出介於0與1之間,既:spa

 

0hθ(x)1

 

注: 如下引自李航博士《統計學習方法》1.8節關於分類問題的一點描述:rest

分類是監督學習的一個核心問題,在監督學習中,當輸出變量Y取有限個離散值時,預測問題便成爲分類問題。這時,輸入變量X能夠是離散的,也能夠是連續的。監督學習從數據中學習一個分類模型或分類決策函數,稱爲分類器(classifier)。分類器對新的輸入進行輸出的預測(prediction),稱爲分類(classification).

2) Hypothesis Representation

邏輯迴歸模型:

上一節談到,咱們須要將Hypothesis的輸出界定在0和1之間,既:

 

0hθ(x)1

 

可是線性迴歸沒法作到,這裏咱們引入一個函數g, 令邏輯迴歸的Hypothesis表示爲:

 

hθ(x)=g(θTx)

       

 

這裏g稱爲Sigmoid function或者Logistic function, 具體表達式爲:

 

g(z)=11+ez

            

 

Sigmoid 函數在有個很漂亮的「S"形,以下圖所示(引自維基百科):

Sigmoid function-我愛公開課-52opencourse.com

綜合上述兩式,咱們獲得邏輯迴歸模型的數學表達式:

 

hθ(x)=11+eθTx

     

 

其中θ是參數。


Hypothesis輸出的直觀解釋:

hθ(x) = 對於給定的輸入x,y=1時估計的機率

例如,對於腫瘤(惡性/良性),若是輸入變量(特徵)是腫瘤的大小:

腫瘤分類例子-我愛公開課-52opencourse.com

這裏Hypothesis表示的是」病人的腫瘤有70%的多是惡性的「。

較正式的說法能夠以下表示:

給定輸入x,參數化的θ(參數空間), y=1時的機率。

數學上能夠以下表示:

 

hθ(x)=P(y=1|x;θ)

 

對於因變量y=0或1這樣的二分類問題:

 

P(y=0|x;θ)+P(y=1|x;θ)=1

 

 

P(y=0|x;θ)=1P(y=1|x;θ)

 

 

3) Decision boundary(決策邊界)

如上節所述,邏輯迴歸模型能夠以下表示:

邏輯迴歸模型表達式-我愛公開課-52opencourse.com

假設給定的閾值是0.5,當hθ(x)0.5時, y = 1;

hθ(x)<0.5時,y = 0;

再次回顧sigmoid function的圖形,也就是g(z)的圖形:

sigomoid function g(x) -我愛公開課-52opencourse.com

g(z)0.5時, z0;

對於hθ(x)=g(θTx)0.5, 則θTx0, 此時意味着預估y=1;

反之,當預測y = 0時,θTx<0;

咱們能夠認爲θTx = 0是一個決策邊界,當它大於0或小於0時,邏輯迴歸模型分別預測不一樣的分類結果。例如,

 

hθ(x)=g(θ0+θ1x1+θ2x2)

 

θ0,θ1,θ2分別取-3, 1, 1,

則當3+x1+x20時, y = 1; 則x1+x2 =3是一個決策邊界,圖形表示以下:

決策邊界-我愛公開課-52opencourse.com

上述只是一個線性的決策邊界,當hθ(x)更復雜的時候,咱們能夠獲得非線性的決策邊界,例如:

非線性的決策邊界1-我愛公開課-52opencourse.com

這裏當x21+x221時,y=1,決策邊界是一個圓形,以下圖所示:

非線性決策邊界2-我愛公開課-52opencourse.com

更復雜的例子,請參考官方PPT,這裏就再也不舉例了。

 

4) Cost function(代價函數,成本函數)

邏輯迴歸概覽:

邏輯迴歸是一種有監督的學習方法,所以有訓練集:

訓練集-我愛公開課-52opencourse.com

對於這m個訓練樣原本說,每一個樣本都包含n+1個特徵:

訓練樣本-我愛公開課-52opencourse.com

其中xRn+1x0=1,y{0,1}.

Hypothesis可表示爲:

hθ(x)=11+eθTx  

與線性迴歸類似,咱們的問題是如何選擇合適的參數θ?

 

Cost Function:

線性迴歸的Cost  Function定義爲:

 

J(θ)=1mi=1m12(hθ(x(i))y(i))2

 

這裏能夠把12(hθ(x(i))y(i))2簡寫爲Cost(hθ(x(i),y),更簡化的表達式爲:

 

Cost(hθ(x),y)=12(hθ(x)y)2

 

若是和線性迴歸類似,這裏取 hθ(x)=11+eθTx,會存在一個問題,也就是邏輯迴歸的Cost Function是「非凸」的,以下圖所示:

非凸函數-我愛公開課-52opencourse.com

咱們知道,線性迴歸的Cost Function是凸函數,具備碗狀的形狀,而凸函數具備良好的性質:對於凸函數來講局部最小值點即爲全局最小值點,所以只要能求得這類函數的一個最小值點,該點必定爲全局最小值點。

凸函數-我愛公開課-52opencouse.com

所以,上述的Cost Function對於邏輯迴歸是不可行的,咱們須要其餘形式的Cost Function來保證邏輯迴歸的成本函數是凸函數。

這裏補充一段李航博士《統計學習方法》裏關於Cost Function或者損失函數(loss function)的說明,你們就能夠理解Cost Function不限於一種方式,而是有多種方式可選,如下摘自書中的1.3.2小節:

監督學習問題是在假設空間F中選取模型f做爲決策函數,對於給定的輸入X,由f(X)給出相應的輸出Y,這個輸出的預測值f(X)與真實值Y可能一致也可能不一致,用一個損失函數(loss function)或代價函數(cost function)來度量預測錯誤的程度。損失函數是f(X)和Y的非負實值函數,記做L(Y, f(X)).

統計學習中經常使用的損失函數有如下幾種:

(1) 0-1損失函數(0-1 loss function):

 

L(Y,f(X))={1,0,Yf(X)Y=f(X)

 

(2) 平方損失函數(quadratic loss function)

 

L(Y,f(X))=(Yf(X))2

 

(3) 絕對損失函數(absolute loss function)

 

L(Y,f(X))=|Yf(X)|

 

(4) 對數損失函數(logarithmic loss function) 或對數似然損失函數(log-likelihood loss function)

 

L(Y,P(Y|X))=logP(Y|X)

 

損失函數越小,模型就越好。

邏輯迴歸的Cost Function:

基於上節的描述和補充,這裏咱們選擇對數似然損失函數做爲邏輯迴歸的Cost Function:

邏輯迴歸之對數似然損失函數-我愛公開課-52opencourse.com

直觀的來解釋這個Cost Function,首先看當y=1的狀況:

對數似然損失函數解釋1-我愛公開課-52opencouse.com

直觀來看, 若是y = 1, hθ(x)=1,則Cost = 0,也就是預測的值和真實的值徹底相等的時候Cost =0;

可是,當hθ(x)0時, Cost

直觀來看,因爲預測的結果南轅北轍:

若是hθ(x)=0, 也就是預測P(y=1|x;θ)=0,也就是y=1的機率是0,可是實際上y = 1

所以對於這個學習算法給予一個很大的Cost的懲罰。

同理對於y=0的狀況也適用:

對數似然損失函數解釋2-我愛公開課-52opencourse.com

 

5) Simplified cost function and gradient descent(簡化版代價函數及梯度降低算法)

邏輯迴歸的Cost Function能夠表示爲:

邏輯迴歸代價函數-我愛公開課-52opencourse.com

因爲y 只能等於0或1,因此能夠將邏輯迴歸中的Cost function的兩個公式合併,具體推導以下:

邏輯迴歸代價函數推導-我愛公開課-52opencourse.com

故邏輯迴歸的Cost function可簡化爲:

邏輯迴歸代價函數簡化公式-我愛公開課-52opencourse.com

對於這個公式,這裏稍微補充一點,注意中括號中的公式正是對邏輯迴歸進行最大似然估計中的最大似然函數,對於最大似然函數求最大值,從而獲得參數(\theta\)的估計值。反過來,這裏爲了求一個合適的參數,須要最小化Cost function,也就是:

 

minθJ(θ)

 

而對於新的變量x來講,就是根據hθ(x)的公式輸出結果:

邏輯迴歸預估-我愛公開課-52opencourse.com

與線性迴歸類似,這裏咱們採用梯度降低算法來學習參數θ,對於J(θ):

邏輯迴歸梯度降低算法之Cost function-我愛公開課-52opencouse.com

目標是最小化J(θ),則梯度降低算法的以下:

邏輯迴歸梯度降低算法-我愛公開課-52opencourse.com

J(θ)求導後,梯度降低算法以下:

梯度降低算法-我愛公開課-52opencourse.com

注意,這個算法和線性迴歸裏的梯度降低算法幾乎是一致的,除了hθ(x)的表示不一樣。

 

6) Advanced optimization(其餘優化算法)

優化算法:

給定參數θ,咱們能夠寫成代碼來計算:

邏輯迴歸優化算法-我愛公開課-52opencourse.com

優化算法除了梯度降低算法外,還包括:

  • Conjugate gradient method(共軛梯度法)
  • Quasi-Newton method(擬牛頓法)
  • BFGS method
  • L-BFGS(Limited-memory BFGS)

後兩者由擬牛頓法引伸出來,與梯度降低算法相比,這些算法的優勢是:

第一,不須要手動的選擇步長;

第二,一般比梯度降低算法快;

可是缺點是更復雜-更復雜也是缺點嗎?其實也算不上,關於這些優化算法,推薦有興趣的同窗看看52nlp上這個系列的文章:無約束最優化,做者是個人師兄,更深刻的瞭解能夠參考這篇文章中推薦的兩本書:

用於解無約束優化算法的Quasi-Newton Method中的LBFGS算法到這裏總算初步介紹完了,不過這裏筆者要認可的是這篇文檔省略了許多內容,包括算法收斂性的證實以及收斂速度證實等許多內容。所以讀者若但願對這一塊有一個更深刻的認識能夠參考如下兩本書:
1) Numerical Methods for Unconstrained Optimization and Nonlinear Equations(J.E. Dennis Jr. Robert B. Schnabel)
2) Numerical Optimization(Jorge Nocedal Stephen J. Wright)

7) Multi-class classification: One-vs-all(多類分類問題)

多類分類問題舉例:

電子郵件分類/標註: 工做郵件,朋友郵件,家庭郵件,愛好郵件

醫療圖表(medical diagrams): 沒有生病,着涼,流感

天氣:晴天,多雲,雨,雪

二類分類問題以下圖所示:

二類分類問題-我愛公開課-52opencourse.com

多類分類問題以下所示:

多類分類問題-我愛公開課-52opencourse.com

One-vs-all(one-vs-rest):

對於多類分類問題,能夠將其看作成二類分類問題:保留其中的一類,剩下的做爲另外一類。例如,對於下面這個例子:

多分類問題-one-vs-all-我愛公開課-52opencourse.com

能夠分別計算其中一類相對於其餘類的機率:

one-vs-rest-多分類問題-我愛公開課-52opencourse.com

總結-One-vs-all方法框架:

對於每個類 i 訓練一個邏輯迴歸模型的分類器h(i)θ(x),而且預測 y = i時的機率;

對於一個新的輸入變量x, 分別對每個類進行預測,取機率最大的那個類做爲分類結果:

多分類問題預測-我愛公開課-52opencourse.com

2、梯度降低法


如今,咱們有了優化目標,即最小化負對數似然函數L(w)。從上一節咱們知道不能直接使用其導數爲0來求解最優值,咱們如今來介紹一種很是經常使用的求近似最優解的方法:梯度降低法。

梯度降低法的思路其實很簡單,假設咱們有一個以下圖所示的凸函數:

咱們首先在函數上任選一點,計算其損失(即咱們上面的L(w)) ,而後按照某一規則尋找更低的一點計算新的損失,只要新損失更小(最小化問題),咱們就繼續降低,直到達到一個可接受的優化目標。

咱們的L(w)本質上與上圖的求解方式相似,降低方向就是梯度方向ΔL(w)的反方向,即當函數處在上升階段時,咱們往左邊降低,函數降低階段咱們往右邊降低(參看上圖)。

梯度降低方法分爲兩個部分,第一部分是總體上,咱們使用某步長不斷降低求損失函數,第二部分是爲了防止步長太長致使最後沒法收斂,每次當損失上升的時候都調整步長。

如下是梯度降低求解L(w)最優值的過程:

1)首先創建座標系,橫軸是咱們的目標參數w,縱軸是當前參數狀況下的損失L(w):

創建座標系後,首先隨機取一個參數W1,同時得到初始損失L1

2)根據梯度公式,得到初始的梯度D1,同時根據梯度方向得到初始的降低方向Direction1(即往正方像降低):

3)如今,咱們有了梯度降低的方向、有了初始損失,下一步只須要按照某步長C來往右邊調整W便可,而後對比兩個損失,當他們的差比較小的時候,說明趨於最優值了。

可是這裏步長很差取,加入正好把W降低到對面,那損失的差雖然很小,顯然沒有趨於最優,再或者步長取的過長,損失反而上升了,也不行,因此咱們第三步的主要目的是調整一個穩定的步長,根據該步長得到新的W

因此第三步做爲單獨的一個目的,要分四小步來作:

3-1)設置一個初始的步長C1,根據該步長按照梯度對參數W1進行降低獲得W2=W1+D1Direction1

圖中W2即爲新的參數,根據這個新的參數能夠得到新的損失L2,咱們能夠看到損失降低的值爲b=L1L2

爲了保證每次降低的質量,咱們須要對b進行一些限制。

3-2)假如咱們按照當前梯度和步長徹底降低,即不考慮約束條件,最大可能降低的值爲S=<D1,W2W1>=<D1,a>,以下圖中的S所示:

咱們固然不可能要求損失降低的長度爲S,這裏只須要L1L2大於某個指定的關於S的比例便可,咱們這裏設置該比例爲「容忍度」 B(B爲0到1之間的值)。即要知足的條件是:

 

L2L1>=B|<D1,W2W1>|

 

3-3)若是不能知足 3-2 中的條件,說明咱們的步長有問題,一般是步長太長了,咱們須要調整該步長。咱們設定一個「折半因子」 A(A爲0到1之間的值),把當前的步長C1 進行「折半」,即 C2=AC1,按照新的步長進行第 3-1 步。

3-4)若是知足 3-2 中的條件,咱們直接返回新的W2,即當前的降低成功,進入第 4步 。

4)從第 3 步咱們獲得了新的W以後,按照新的參數計算新的損失 L,對比新的損失與舊損失之間的差值,若是差值較小達到某閾值,說明擬合成功,不然繼續進行第 2 步。

以上內容就是基本的梯度降低法的使用了,對於基本梯度降低的改進有不少,其餘的博主也不是很熟,就暫時不討論了,咱們一般實踐中用的時候,都是用一些開源的大師寫好的算法,通常不多須要深度改進,好比使用libsvm能夠直接求解邏輯迴歸。

 

以上轉自:http://sobuhu.com/ml/2013/01/07/gradient-decent-logit-regression.html

http://52opencourse.com/125/coursera%E5%85%AC%E5%BC%80%E8%AF%BE%E7%AC%94%E8%AE%B0-%E6%96%AF%E5%9D%A6%E7%A6%8F%E5%A4%A7%E5%AD%A6%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AC%AC%E5%85%AD%E8%AF%BE-%E9%80%BB%E8%BE%91%E5%9B%9E%E5%BD%92-logistic-regression

相關文章
相關標籤/搜索