機器學習_logistic迴歸和梯度降低

 

原文:http://blog.csdn.net/dongtingzhizi/article/details/15962797

 

 Logistic迴歸總結

 

PDF下載地址:http://download.csdn.net/detail/lewsn2008/6547463html

1.引言

     看了Stanford的Andrew Ng老師的機器學習公開課中關於Logistic Regression的講解,而後又看了《機器學習實戰》中的LogisticRegression部分,寫下此篇學習筆記總結一下。python

     首先說一下個人感覺,《機器學習實戰》一書在介紹原理的同時將所有的算法用源代碼實現,很是具備操做性,能夠加深對算法的理解,可是美中不足的是在原理上介紹的比較粗略,不少細節沒有具體介紹。因此,對於沒有基礎的朋友(包括我)某些地方可能看的一頭霧水,須要查閱相關資料進行了解。因此說,該書仍是比較適合有基礎的朋友。算法

本文主要介紹如下三個方面的內容:數據結構

(1)Logistic Regression的基本原理,分佈在第二章中;dom

(2)Logistic Regression的具體過程,包括:選取預測函數,求解Cost函數和J(θ),梯度降低法求J(θ)的最小值,以及遞歸降低過程的向量化(vectorization),分佈在第三章中;機器學習

(3)對《機器學習實戰》中給出的實現代碼進行了分析,對閱讀該書LogisticRegression部分遇到的疑惑進行了解釋。沒有基礎的朋友在閱讀該書的Logistic Regression部分時可能會以爲一頭霧水,書中給出的代碼很簡單,可是怎麼也跟書中介紹的理論聯繫不起來。也會有不少的疑問,好比:通常都是用梯度降低法求損失函數的最小值,爲什麼這裏用梯度上升法呢?書中說用梯度上升發,爲什麼代碼實現時沒見到求梯度的代碼呢?這些問題在第三章和第四章中都會獲得解答。函數

文中參考或引用內容的出處列在最後的「參考文獻」中。文中所闡述的內容僅僅是我我的的理解,若有錯誤或疏漏,歡迎你們批評指正。下面進入正題。tornado

 

2. 基本原理

      Logistic Regression和Linear Regression的原理是類似的,按照我本身的理解,能夠簡單的描述爲這樣的過程:學習

(1)找一個合適的預測函數(Andrew Ng的公開課中稱爲hypothesis),通常表示爲h函數,該函數就是咱們須要找的分類函數,它用來預測輸入數據的判斷結果。這個過程時很是關鍵的,須要對數據有必定的瞭解或分析,知道或者猜想預測函數的「大概」形式,好比是線性函數仍是非線性函數。.net

(2)構造一個Cost函數(損失函數),該函數表示預測的輸出(h)與訓練數據類別(y)之間的誤差,能夠是兩者之間的差(h-y)或者是其餘的形式。綜合考慮全部訓練數據的「損失」,將Cost求和或者求平均,記爲J(θ)函數,表示全部訓練數據預測值與實際類別的誤差。

(3)顯然,J(θ)函數的值越小表示預測函數越準確(即h函數越準確),因此這一步須要作的是找到J(θ)函數的最小值。找函數的最小值有不一樣的方法,Logistic Regression實現時有的是梯度降低法(Gradient Descent)。

 

3. 具體過程

3.1  構造預測函數

      Logistic Regression雖然名字裏帶「迴歸」,可是它其實是一種分類方法,用於兩分類問題(即輸出只有兩種)。根據第二章中的步驟,須要先找到一個預測函數(h),顯然,該函數的輸出必須是兩個值(分別表明兩個類別),因此利用了Logistic函數(或稱爲Sigmoid函數),函數形式爲:

          

對應的函數圖像是一個取值在0和1之間的S型曲線(圖1)。

 

圖1

      接下來須要肯定數據劃分的邊界類型,對於圖2和圖3中的兩種數據分佈,顯然圖2須要一個線性的邊界,而圖3須要一個非線性的邊界。接下來咱們只討論線性邊界的狀況。

 

圖2

 

圖3

對於線性邊界的狀況,邊界形式以下:

構造預測函數爲:

hθ(x)函數的值有特殊的含義,它表示結果取1的機率,所以對於輸入x分類結果爲類別1和類別0的機率分別爲:

 

3.2  構造Cost函數

      Andrew Ng在課程中直接給出了Cost函數及J(θ)函數如式(5)和(6),可是並無給出具體的解釋,只是說明了這個函數來衡量h函數預測的好壞是合理的。

實際上這裏的Cost函數和J(θ)函數是基於最大似然估計推導獲得的。下面詳細說明推導的過程。(4)式綜合起來能夠寫成:

取似然函數爲:

對數似然函數爲:

最大似然估計就是要求得使l(θ)取最大值時的θ,其實這裏可使用梯度上升法求解,求得的θ就是要求的最佳參數。可是,在Andrew Ng的課程中將J(θ)取爲(6)式,即:

由於乘了一個負的係數-1/m,因此J(θ)取最小值時的θ爲要求的最佳參數。

 

3.3  梯度降低法求J(θ)的最小值

J(θ)的最小值可使用梯度降低法,根據梯度降低法可得θ的更新過程:

    

式中爲α學習步長,下面來求偏導:

上式求解過程當中用到以下的公式:

所以,(11)式的更新過程能夠寫成:

 

由於式中α原本爲一常量,因此1/m通常將省略,因此最終的θ更新過程爲:

另外,補充一下,3.2節中提到求得l(θ)取最大值時的θ也是同樣的,用梯度上升法求(9)式的最大值,可得:

  

觀察上式發現跟(14)是同樣的,因此,採用梯度上升發和梯度降低法是徹底同樣的,這也是《機器學習實戰》中採用梯度上升法的緣由。

 

3.4  梯度降低過程向量化

關於θ更新過程的vectorization,Andrew Ng的課程中只是一帶而過,沒有具體的講解。

《機器學習實戰》連Cost函數及求梯度等都沒有說明,因此更不可能說明vectorization了。可是,其中給出的實現代碼確是實現了vectorization的,圖4所示代碼的32行中weights(也就是θ)的更新只用了一行代碼,直接經過矩陣或者向量計算更新,沒有用for循環,說明確實實現了vectorization,具體代碼下一章分析。

文獻[3]中也提到了vectorization,可是也是比較粗略,很簡單的給出vectorization的結果爲:

    

且不論該更新公式正確與否,這裏的Σ(...)是一個求和的過程,顯然須要一個for語句循環m次,因此根本沒有徹底的實現vectorization,不像《機器學習實戰》的代碼中一條語句就能夠完成θ的更新。

下面說明一下我理解《機器學習實戰》中代碼實現的vectorization過程。

約定訓練數據的矩陣形式以下,x的每一行爲一條訓練樣本,而每一列爲不一樣的特稱取值:

約定待求的參數θ的矩陣形式爲:

          

先求x.θ並記爲A

hθ(x)-y並記爲E

 

g(A)的參數A爲一列向量,因此實現g函數時要支持列向量做爲參數,並返回列向量。由上式可知hθ(x)-y能夠由g(A)-y一次計算求得。

再來看一下(15)式的θ更新過程,當j=0時:

一樣的能夠寫出θj

綜合起來就是:

綜上所述,vectorization後θ更新的步驟以下:

(1)求A=x.θ

(2)求E=g(A)-y

(3)求θ:=θ-α.x'.E,x'表示矩陣x的轉置。

也能夠綜合起來寫成:

前面已經提到過:1/m是能夠省略的。

4. 代碼分析

圖4中是《機器學習實戰》中給出的部分實現代碼。

 

圖4

sigmoid函數就是前文中的g(z)函數,參數inX能夠是向量,由於程序中使用了Python的numpy。

gradAscent函數是梯度上升的實現函數,參數dataMatin和classLabels爲訓練數據,23和24行對訓練數據作了處理,轉換成numpy的矩陣類型,同時將橫向量的classlabels轉換成列向量labelMat,此時的dataMatrix和labelMat就是(18)式中的xy。alpha爲學習步長,maxCycles爲迭代次數。weights爲n維(等於x的列數)列向量,就是(19)式中的θ

29行的for循環將更新θ的過程迭代maxCycles次,每循環一次更新一次。對比3.4節最後總結的向量化的θ更新步驟,30行至關於求了A=x.θg(A),31行至關於求了E=g(A)-y,32行至關於求θ:=θ-α.x'.E。因此這三行代碼實際上與向量化的θ更新步驟是徹底一致的。

總結一下,從上面代碼分析能夠看出,雖然只有十多行的代碼,可是裏面卻隱含了太多的細節,若是沒有相關基礎確實是很是難以理解的。相信完整的閱讀了本文,就應該沒有問題了!^_^。

 

【參考文獻】

[1]《機器學習實戰》——【美】Peter Harington
[2] Stanford機器學習公開課(https://www.coursera.org/course/ml
[3] http://blog.csdn.net/abcjennifer/article/details/7716281
[4] http://www.cnblogs.com/tornadomeet/p/3395593.html
[5] http://blog.csdn.net/moodytong/article/details/9731283
[6] http://blog.csdn.net/jackie_zhu/article/details/8895270

相關文章
相關標籤/搜索