《Python數據分析與機器學習實戰-唐宇迪》讀書筆記第5章-迴歸算法

python數據分析個人學習讀書筆記-目錄索引

第5章回歸算法

  在實際任務中經常需要預測一個指標,例如去銀行貸款,銀行會根據個人信息返回一個貸款金額,這就是迴歸問題。還有一種情況就是銀行會不會發放貸款的問題,也就是分類問題。迴歸算法是機器學習中經典的算法之一,本章主要介紹線性迴歸與邏輯迴歸算法,分別對應迴歸與分類問題,並結合梯度下降優化思想進行參數求解。

 

5.1線性迴歸算法

   線性迴歸是迴歸算法中最簡單、實用的算法之一,在機器學習中很多知識點都是通用的,掌握一個算法相當於掌握一種思路,其他算法中會繼續沿用的這個思路。

  假設某個人去銀行準備貸款,銀行首先會了解這個人的基本信息,例如年齡、工資等,然後輸入銀行的評估系統中,以此決定是否發放貸款以及確定貸款的額度,那麼銀行是如何進行評估的呢?下面詳細介紹銀行評估系統的建模過程。假設表5-1是銀行貸款數據,相當於歷史數據。

  表5-1 銀行貸款數據

   邀月工作室

  銀行評估系統要做的就是基於歷史數據建立一個合適的迴歸模型,只要有新數據傳入模型中,就會返回一個合適的預測結果值。在這裏,工資和年齡都是所需的數據特徵指標,分別用x1和x2表示,貸款額度就是最終想要得到的預測結果,也可以叫作標籤,用y表示。其目的是得到x1、x2與y之間的聯繫,一旦找到它們之間合適的關係,這個問題就解決了。

5.1.1線性迴歸方程

   目標明確後,數據特徵與輸出結果之間的聯繫能夠輕易得到嗎?在實際數據中,並不是所有數據點都整齊地排列成一條線,如圖5-1所示。

   邀月工作室

  圖5-1 數據點分佈情況

  圓點代表輸入數據,也就是用戶實際得到的貸款金額,表示真實值。平面代表模型預測的結果,表示預測值。可以觀察到實際貸款金額是由數據特徵x1和x2共同決定的,由於輸入的特徵數據都會對結果產生影響,因此需要知道x1和x2對y產生多大影響。我們可以用參數θ來表示這個含義,假設θ1表示年齡的參數,θ2表示工資的參數,擬合的平面計算式如下:

   邀月工作室

  既然已經給出迴歸方程,那麼找到最合適的參數θ這個問題也就解決了。

  再強調一點,θ0爲偏置項,但是在式(5.1)中並沒有θ0x0項,那麼如何進行整合呢?

  在進行數值計算時,爲了使得整體能用矩陣的形式表達,即便沒有x0項也可以手動添加,只需要在數據中加入一列x0並且使其值全部爲1即可,結果不變。

5.1.2誤差項分析

   看到這裏,大家有沒有發現一個問題——迴歸方程的預測值和樣本點的真實值並不是一一對應的,如圖5-1所示。說明數據的真實值和預測值之間是有差異的,這個差異項通常稱作誤差項ε。它們之間的關係可以這樣解釋:在樣本中,每一個真實值和預測值之間都會存在一個誤差。

   邀月工作室

  其中,i爲樣本編號;θTx(i)爲預測值;y(i)爲真實值。

  關於這個誤差項,它的故事就多啦,接下來所有的分析與推導都是由此產生的。先把下面這句看起來有點複雜的解釋搬出來:誤差ε是獨立且具有相同的分佈,並且服從均值爲0方差爲θ2的高斯分佈。突然搞出這麼一串描述,可能大家有點懵,下面分別解釋一下。

  所謂獨立,例如,張三和李四一起來貸款,他倆沒關係也互不影響,這就是獨立關係,銀行會平等對待他們(張三來銀行跟銀行工作人員說:“後面那是我兄弟,你們得多貸給他點錢。”銀行會理他嗎?)。

  相同分佈是指符合同樣的規則,例如張三和李四分別去農業銀行和建設銀行,這就很難進行對比分析了,因爲不同銀行的規則不同,需在相同銀行的條件下來建立這個迴歸模型。

  高斯分佈用於描述正常情況下誤差的狀態,銀行貸款時可能會多給點,也可能會少給點,但是絕大多數情況下這個浮動不會太大,比如多或少三五百元。極少情況下浮動比較大,例如突然多給20萬,這種可能性就不大。圖5-2是高斯分佈曲線,可以發現在均值兩側較近地方的可能性較大,越偏離的情況可能性就越小。

  邀月工作室

  圖5-2 高斯分佈

  這些知識點不是線性迴歸特有的,基本所有的機器學習算法的出發點都在此,由此也可以展開分析,數據儘可能取自相同的源頭,當拿到一份數據集時,建模之前肯定要進行洗牌操作,也就是打亂其順序,讓各自樣本的相關性最低。

  高斯分佈也就是正態分佈,是指數據正常情況下的樣子,機器學習中會經常用到這個概念。

5.1.3似然函數求解

   現在已經對誤差項有一定認識了,接下來要用它來實際乾點活了,高斯分佈的表達式爲:

   邀月工作室

  大家應該對這個公式並不陌生,但是迴歸方程中要求的是參數θ,這裏好像並沒有它的影子,沒關係來轉換一下,將y(i)=θTx(i)+ε(i)代入式(5.3),可得:

   邀月工作室

  該怎麼理解這個公式呢?先來給大家介紹一下似然函數:假設參加超市的抽獎活動,但是事前並不知道中獎的概率是多少,觀察一會兒發現,前面連着10個參與者都獲獎了,即前10個樣本數據都得到了相同的結果,那麼接下來就會有100%的信心認爲自己也會中獎。因此,如果超市中獎這件事受一組參數控制,似然函數就是通過觀察樣本數據的情況來選擇最合適的參數,從而得到與樣本數據相似的結果。

  現在解釋一下式(5.4)的含義,基本思路就是找到最合適的參數來擬合數據點,可以把它當作是參數與數據組合後得到的跟標籤值一樣的可能性大小(如果預測值與標籤值一模一樣,那就做得很完美了)。對於這個可能性來說,大點好還是小點好呢?當然是大點好了,因爲得到的預測值跟真實值越接近,意味着迴歸方程做得越好。所以就有了極大似然估計,找到最好的參數θ,使其與X組合後能夠成爲Y的可能性越大越好。

  下面給出似然函數的定義:

   邀月工作室

  其中,i爲當前樣本,m爲整個數據集樣本的個數。

  此外,還要考慮,建立的迴歸模型是滿足部分樣本點還是全部樣本點呢?應該是儘可能滿足數據集整體,所以需要考慮所有樣本。那麼如何解決乘法問題呢?一旦數據量較大,這個公式就會相當複雜,這就需要對似然函數進行對數變換,讓計算簡便一些。

  如果對式(5.5)做變換,得到的結果值可能跟原來的目標值不一樣了,但是在求解過程中希望得到極值點,而非極值,也就是能使L(θ)越大的參數θ,所以當進行變換操作時,保證極值點不變即可。

  在對數中,可以將乘法轉換成加法,即log(A·B)=logA+logB。

  對式(5.5)兩邊計算其對數結果,可得:

   邀月工作室

  一路走到這裏,公式變換了很多,別忘了要求解的目標依舊是使得式(5.6)取得極大值時的極值點(參數和數據組合之後,成爲真實值的可能性越大越好)。先來觀察一下,在減號兩側可以分成兩部分,左邊部分邀月工作室可以當作一個常數項,因爲它與參數θ沒有關係。對於右邊部分邀月工作室來說,由於有平方項,其值必然恆爲正。整體來看就是要使得一個常數項減去一個恆正的公式的值越大越好,由於常數項不變,那就只能讓右邊部分邀月工作室越小越好,可以認爲1/σ是一個常數,故只需讓邀月工作室越小越好,這就是最小二乘法。

雖然最後得到的公式看起來既簡單又好理解,就是讓預測值和真實值越接近越好,但是其中蘊含的基本思想還是比較有學習價值的,對於理解其他算法也是有幫助的。

  在數學推導過程中,建議大家理解每一步的目的,這在面試或翻閱資料時都是有幫助的。

5.1.4線性迴歸求解

   搞定目標函數後,下面講解求解方法,列出目標函數列如下:

   邀月工作室

  既然要求極值(使其得到最小值的參數θ),對式(5.7)計算其偏導數即可:

   邀月工作室

  經過一系列的矩陣求導計算就得到最終的結果(關於矩陣求導知識,瞭解即可),但是,如果式(5.8)中矩陣不可逆會怎麼樣?顯然那就得不到結果了。

  其實大家可以把線性迴歸的結果當作一個數學上的巧合,真的就是恰好能得出這樣一個值。但這和機器學習的思想卻有點矛盾,本質上是希望機器不斷地進行學習,越來越聰明,才能找到最適合的參數,但是機器學習是一個優化的過程,而不是直接求解的過程。

 

5.2梯度下降算法

   機器學習的核心思想就是不斷優化尋找更合適的參數,當給定一個目標函數之後,自然就是想辦法使真實值和預測值之間的差異越小越好,那麼該怎麼去做這件事呢?可以先來想一想下山問題(見圖5-3)。

      爲什麼是下山呢?因爲在這裏把目標函數比作山,到底是上山還是下山問題,取決於你優化的目標是越大越好(上山)還是越小越好(下山),而基於最小二乘法判斷是下山問題。

  那該如何下山呢?看起有兩個因素可控制——方向與步長,首先需要知道沿着什麼方向走,並且按照該方向前進,在山頂大致一看很多條路可以下山,是不是隨便選擇一個差不多的方向呢?這好像有點隨意,隨便散散步就下山了。但是現在情況有點緊急,目標函數不會讓你慢慢散步下去,而是希望能夠快速準確地到達山坡最低點,這該怎麼辦呢?彆着急——梯度下降算法來了。

   邀月工作室

  圖5-3 下山問題

5.2.1下山方向選擇

  首先需要明確的是什麼方向能夠使得下山最快,那必然是最陡峭的,也就是當前位置梯度的反方向(目標函數J(θ)關於參數θ的梯度是函數上升最快的方向,此時是一個下山問題,所以是梯度的反方向)。當沿着梯度方向下山的時候,位置也在不斷髮生變化,所以每前進一小步之後,都需要停下來再觀察一下接下來的梯度變成什麼方向,每次前進都沿着下山最快的也就是梯度的反方向進行(見圖5-4)。

   邀月工作室

  圖5-4 梯度方向

  到這裏相信大家已經對梯度下降有了一個直觀的認識了,總結一下,就是當要求一個目標函數極值的時候,按照機器學習的思想直接求解看起來並不容易,可以逐步求其最優解。首先確定優化的方向(也就是梯度),再去實際走那麼一步(也就是下降),反覆執行這樣的步驟,就慢慢完成了梯度下降任務,每次優化一點,累計起來就是一個大成績。

        在梯度下降過程中,通常每一步都走得很小心,也就是每一次更新的步長都要儘可能小,才能保證整體的穩定,因爲如果步長過大,可能偏離合適的方向。

5.2.2梯度下降優化

   還記得要優化的目標函數吧:邀月工作室,目標就是找到最合適的參數θ,使得目標函數值最小。這裏x是數據,y是標籤,都是固定的,所以只有參數θ會對最終結果產生影響,此外,還需注意參數θ並不是一個值,可能是很多個參數共同決定了最終的結果,如圖5-5所示。

   邀月工作室

  圖5-5 目標函數優化

  當進行優化的時候,該怎麼處理這些參數呢?其中θ0與θ1分別和不同的數據特徵進行組合(例如工資和年齡),按照之前的想法,既然x1和x2是相互獨立的,那麼在參數優化的時候自然需要分別考慮θ0和θ1的情況,在實際計算中,需要分別對θ0和θ1求偏導,再進行更新。

  下面總結一下梯度下降算法。

  • 第①步:找到當前最合適的方向,對於每個參數都有其各自的方向。
  • 第②步:走一小步,走得越快,方向偏離越多,可能就走錯路了。
  • 第③步:按照方向與步伐去更新參數。
  • 第④步:重複第1步~第3步。

  首先要明確目標函數,可以看出多個參數都會對結果產生影響,那麼要做的就是在各個參數上去尋找其對應的最合適的方向,接下來就是去走那麼一小步,爲什麼是一小步呢?因爲當前求得的方向只是瞬時最合適的方向,並不意味着這個方向一直都是正確的,這就要求不斷進行嘗試,每走一小步都要尋找接下來最合適的方向。

5.2.3梯度下降策略對比

   原理還是比較容易理解的,接下來就要看實際應用了,這裏假設目標函數仍然是J(Q)=邀月工作室

  在梯度下降算法中有3種常見的策略:批量梯度下降、隨機梯度下降和小批量梯度下降,這3種策略的基本思想都是一致的,只是在計算過程中選擇樣本的數量有所不同,下面分別進行討論。

  • (1)批量梯度下降。此時需要考慮所有樣本數據,每一次迭代優化計算在公式中都需要把所有的樣本計算一遍,該方法容易得到最優解,因爲每一次迭代的時候都會選擇整體最優的方向。方法雖好,但也存在問題,如果樣本數量非常大,就會導致迭代速度非常慢,下面是批量梯度下降的計算公式:

  邀月工作室

  細心的讀者應該會發現,在更新參數的時候取了一個負號,這是因爲現在要求解的是一個下山問題,即沿着梯度的反方向去前進。其中1/m表示對所選擇的樣本求其平均損失,i表示選擇的樣本數據,j表示特徵。例如表示工資所對應的參數,在更新時數據也需選擇工資這一列,這是一一對應的關係。在更新時還涉及係數a,其含義就是更新幅度的大小,也就是之前討論的步長,下節還會詳細討論其作用。

  • (2)隨機梯度下降。考慮批量梯度下降速度的問題,如果每次僅使用一個樣本,迭代速度就會大大提升。那麼新的問題又來了,速度雖快,卻不一定每次都朝着收斂的方向,因爲只考慮一個樣本有點太絕對了,要是拿到的樣本是異常點或者錯誤點可能還會導致結果更差。下面是隨機梯度下降的計算公式,它與批量梯度下降的計算公式的區別僅在於選擇樣本數量:

   邀月工作室

  • (3)小批量梯度下降。綜合考慮批量和隨機梯度下降的優缺點,是不是感覺它們都太絕對了,要麼全部,要麼一個,如果在總體樣本數據中選出一批不是更好嗎?可以是10個、100個、1000個,但是程序員應該更喜歡16、32、64、128這些數字,所以通常見到的小批量梯度下降都是這類值,其實並沒有特殊的含義。下面我們來看一下選擇10個樣本數據進行更新的情況:

   邀月工作室

  本節對比了不同梯度下降的策略,實際中最常使用的是小批量梯度下降,通常會把選擇的樣本個數叫作batch,也就是32、64、128這些數,那麼數值的大小對結果有什麼影響呢?可以說,在時間和硬件配置允許的條件下,儘可能選擇更大的batch吧,這會使得迭代優化結果更好一些。

5.2.4學習率對結果的影響

  選擇合適的更新方向,這只是一方面,下面還需要走走看,可以認爲步長就是學習率(更新參數值的大小),通常都會選擇較小的學習率,以及較多的迭代次數,正常的學習曲線走勢如圖5-6所示。

   邀月工作室

  圖5-6 正常迭代優化時曲線形狀

  由圖5-6可見,隨着迭代的進行,目標函數會逐漸降低,直到達到飽和收斂狀態,這裏只需觀察迭代過程中曲線的形狀變化,具體數值還是需要結合實際數據。

  如果選擇較大的學習率,會對結果產生什麼影響呢?此時學習過程可能會變得不平穩,因爲這一步可能跨越太大了,偏離了正確的方向,如圖5-7所示。

   邀月工作室

  圖5-7 較大學習率對結果的影響

  在迭代過程中出現不平穩的現象,目標函數始終沒能達到收斂狀態,甚至學習效果越來越差,這很可能是學習率過大或者選擇樣本數據過小以及數據預處理問題所導致的。

學習率通常設置得較小,但是學習率太小又會使得迭代速度很慢,那麼,如何尋找一個適中的值呢(見圖5-8)?

   邀月工作室

  圖5-8 選擇合適的學習率

  如圖5-8所示,較大的學習率並不會使得目標函數降低,較小的學習率看起來還不錯,可以選擇較多的迭代次數來保證達到收斂狀態,所以,在實際中寧肯花費更多時間,也不要做無用功。

      學習率的選擇是機器學習任務中非常重要的一部分,調參過程同樣也是反覆進行實驗,以選擇最合適的各項參數,通用的做法就是從較小的學習率開始嘗試,如果遇到不平穩現象,那就調小學習率。

5.3邏輯迴歸算法

   接下來再來討論一下邏輯迴歸算法,可能會認爲邏輯迴歸算法是線性迴歸算法的升級,還是屬於迴歸任務吧?其實並不是這樣的,邏輯迴歸本質上是一個經典的二分類問題,要做的任務性質發生了變化,也就是一個是否或者說0/1問題,有了線性迴歸的基礎,只需稍作改變,就能完成分類任務。

5.3.1原理推導

   先來回顧一下線性迴歸算法得到的結果:輸入特徵數據,輸出一個具體的值,可以把輸出值當作一個得分值。此時如果想做一個分類任務,要判斷一個輸入數據是正例還是負例,就可以比較各自的得分值,如果正例的得分值高,那麼就說明這個輸入數據屬於正例類別。

  例如,在圖5-9中分別計算當前輸入屬於貓和狗類別的得分值,通過其大小確定最終的分類結果。但是在分類任務中用數值來表示結果還是不太恰當,如果能把得分值轉換成概率值,就變得容易理解。假設正例的概率值是0.02,那麼負例就是1–0.02=0.98(見圖5-10)。

   邀月工作室

  ▲圖5-9 預測類別得分值

   邀月工作室

  ▲圖5-10 預測類別概率值

  那麼如何得到這個概率值呢?先來介紹下Sigmoid函數,定義如下:

   邀月工作室

  在Sigmoid函數中,自變量z可以取任意實數,其結果值域爲[0,1],相當於輸入一個任意大小的得分值,得到的結果都在[0,1]之間,恰好可以把它當作分類結果的概率值。

判斷最終分類結果時,可以選擇以0.5爲閾值來進行正負例類別劃分,例如輸入數據所對應最終的結果爲0.7,因0.7大於0.5,就歸爲正例(見圖5-11)。後續在案例實戰中還會詳細進行對比分析。

   邀月工作室

  圖5-11 Sigmoid函數

  下面梳理一下計算流程,首先得到得分值,然後通過Sigmoid函數轉換成概率值,公式如下:

   邀月工作室

  這個公式與線性迴歸方程有點相似,僅僅多了Sigmoid函數這一項。X依舊是特徵數據,θ依舊是每個特徵所對應的參數。下面對正例和負例情況分別進行分析。

   邀月工作室

  由於是二分類任務,當正例概率爲hθ(x)時,負例概率必爲1−hθ(x)。對於標籤的選擇,當y=1時爲正例,y=0時爲負例。爲什麼選擇0和1呢?其實只是一個代表,爲了好化簡。在推導過程中,如果分別考慮正負例情況,計算起來十分麻煩,也可以將它們合併起來:

  • 當y=0時,p(y=0|x;Q)=(hQ(x))y(1-hQ(x))1-y=1-hQ(x)
  • 當y=1時,p(y|x;Q)=(hQ(x))y(1-hQ(x))1-y=hQ(x)

   邀月工作室

  式(5.15)將兩個式子合二爲一,用一個通項來表示,目的是爲了更方後續的求解推導。

5.3.2邏輯迴歸求解

   邏輯迴歸該如何進行求解呢?之前在推導線性迴歸的時候得出了目標函數,然後用梯度下降方法進行優化求解,這裏貌似只多一項Sigmoid函數,求解的方式還是一樣的。首先得到似然函數:

   邀月工作室

  對上式兩邊取對數,進行化簡,結果如下:

   邀月工作室

  這裏有一點區別,之前在最小二乘法中求的是極小值,自然用梯度下降,但是現在要求的目標卻是極大值(極大似然估計),通常在機器學習優化中需要把上升問題轉換成下降問題,只需取目標函數的相反數即可:

   邀月工作室

  此時,只需求目標函數的極小值,按照梯度下降的方法,照樣去求偏導:

   邀月工作室

  上式直接給出了求偏導的結果,計算量其實並不大,但有幾個角標容易弄混,這裏再來強調一下,下標i表示樣本,也就是迭代過程中,選擇的樣本編號;下標j表示特徵編號,也是參數編號,因爲參數θ和數據特徵是一一對應的關係。觀察可以發現,對θj求偏導,最後得到的結果也是乘以xj,這表示要對哪個參數進行更新,需要用其對應的特徵數據,而與其他特徵無關。

  得到上面這個偏導數後,就可以對參數進行更新,公式如下:

   邀月工作室

  這樣就得到了在邏輯迴歸中每一個參數該如何進行更新,求解方法依舊是迭代優化的思想。找到最合適的參數θ,任務也就完成了。最後來總結一下邏輯迴歸的優點。

  1. 簡單實用,在機器學習中並不是一味地選擇複雜的算法,簡單高效纔是王道。
  2. 結果比較直觀,參數值的意義可以理解,便於分析。
  3. 簡單的模型,泛化能力更強,更通用。

  基於這些優點,民間有這樣的傳說:遇到分類問題都是先考慮邏輯迴歸算法,能解決問題根本不需要複雜的算法。這足以看出其在機器學習中的地位,往往簡單的方法也能得到不錯的結果,還能大大降低其過擬合風險,何樂而不爲呢?

 

本章小結

  本章講解了機器學習中兩大核心算法:線性迴歸與邏輯迴歸,分別應用於迴歸與分類任務中。在求解過程中,機器學習的核心思想就是優化求解,不斷尋找最合適的參數,梯度下降算法也由此而生。在實際訓練模型時,還需考慮各種參數對結果的影響,在後續實戰案例中,這些都需要通過實驗來進行調節。在原理推導過程中,涉及很多細小知識點,這些並不是某一個算法所特有的,在後續的算法學習過程中還會看到它們的影子,慢慢大家就會發現機器學習中的各種套路了。

 

第5章完。

python數據分析個人學習讀書筆記-目錄索引

 

該書資源下載,請至異步社區:https://www.epubit.com

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章