1. 程式人生 > 其它 >圖解機器學習 | 邏輯迴歸演算法詳解

圖解機器學習 | 邏輯迴歸演算法詳解

作者:韓信子@ShowMeAI
教程地址http://www.showmeai.tech/tutorials/34
本文地址http://www.showmeai.tech/article-detail/188
宣告:版權所有,轉載請聯絡平臺與作者並註明出處


引言

本篇內容我們給大家介紹機器學習領域最常見的模型之一:邏輯迴歸。它也是目前工業界解決問題最廣泛作為baseline的解決方案。邏輯迴歸之所以被廣泛應用,因為其簡單有效且可解釋性強。

本文的結構如下:

  • 第1部分:回顧機器學習與分類問題。回顧機器學習中最重要的問題之一分類問題,不同的分類問題及數學抽象。

  • 第2部分:邏輯迴歸核心思想。介紹線性迴歸問題及邏輯迴歸解決方式,講解邏輯迴歸核心思想。

  • 第3部分:Sigmoid函式與分類器決策邊界。介紹邏輯迴歸模型中最重要的Sigmoid變換函式,以及不同分類器得到的決策邊界。

  • 第4部分:模型優化使用的梯度下降演算法。介紹模型引數學習過程中最常使用到的優化演算法:梯度下降。

  • 第5部分:模型過擬合問題與正則化。介紹模型狀態分析及過擬合問題,以及緩解過擬合問題可以使用的正則化手段。

  • 第6部分:特徵變換與非線性切分。介紹由線性分類器到非線性分類場景,對特徵可以進行的變換如構建多項式特徵,使得分類器得到分線性切分能力。

(本篇邏輯迴歸演算法的部分內容涉及到機器學習基礎知識,沒有先序知識儲備的寶寶可以檢視ShowMeAI的文章 圖解機器學習 | 機器學習基礎知識

)。

1.機器學習與分類問題

1)分類問題

分類問題是機器學習非常重要的一個組成部分,它的目標是根據已知樣本的某些特徵,判斷一個樣本屬於哪個類別。分類問題可以細分如下:

  • 二分類問題:表示分類任務中有兩個類別新的樣本屬於哪種已知的樣本類。

  • 多類分類(Multiclass Classification)問題:表示分類任務中有多類別。

  • 多標籤分類(Multilabel Classification)問題:給每個樣本一系列的目標標籤。

2)分類問題的數學抽象

從演算法的角度解決一個分類問題,我們的訓練資料會被對映成n維空間的樣本點(這裡的n就是特徵維度),我們需要做的事情是對n維樣本空間的點進行類別區分,某些點會歸屬到某個類別。

下圖所示的是二維平面中的兩類樣本點,我們的模型(分類器)在學習一種區分不同類別的方法,比如這裡是使用一條直線去對2類不同的樣本點進行切分。

常見的分類問題應用場景很多,我們選擇幾個進行舉例說明:

  • 垃圾郵件識別:可以作為二分類問題,將郵件分為你「垃圾郵件」或者「正常郵件」。

  • 影象內容識別:因為影象的內容種類不止一個,影象內容可能是貓、狗、人等等,因此是多類分類問題。

  • 文字情感分析:既可以作為二分類問題,將情感分為褒貶兩種,還可以作為多類分類問題,將情感種類擴充套件,比如分為:十分消極、消極、積極、十分積極等。

2.邏輯迴歸演算法核心思想

下面介紹本次要講解的演算法——邏輯迴歸(Logistic Regression)。邏輯迴歸是線性迴歸的一種擴充套件,用來處理分類問題。

1)線性迴歸與分類

分類問題和迴歸問題有一定的相似性,都是通過對資料集的學習來對未知結果進行預測,區別在於輸出值不同

  • 分類問題的輸出值是離散值(如垃圾郵件和正常郵件)。

  • 迴歸問題的輸出值是連續值(例如房子的價格)。

既然分類問題和迴歸問題有一定的相似性,那麼我們能不能在迴歸的基礎上進行分類呢

可以想到的一種嘗試思路是,先用線性擬合,然後對線性擬合的預測結果值進行量化,即將連續值量化為離散值——即使用『線性迴歸+閾值』解決分類問題

我們來看一個例子。假如現在有一個關於腫瘤大小的資料集,需要根據腫瘤的大小來判定是良性(用數字0表示)還是惡性(用數字1表示),這是一個很典型的二分類問題。

如上圖,目前這個簡單的場景我們得到1個直觀的判定:腫瘤的大小大於5,即為惡性腫瘤(輸出為1);腫瘤的大小等於5,即為良性腫瘤(輸出為0)。
下面我們嘗試之前提到的思路,使用一元線性函式\(h(x) = \theta_0+\theta_1x\)去進行擬合數據,函式體現在圖片中就是這條黑色直線。

這樣分類問題就可以轉化為:對於這個線性擬合的假設函式,給定一個腫瘤的大小,只要將其帶入假設函式,並將其輸出值和0.5進行比較:

  • 如果線性迴歸值大於0.5,就輸出1(惡性腫瘤)。

  • 如果線性迴歸值小於0.5,就輸出0(良性腫瘤)。

上圖的資料集中的分類問題被完美解決。但如果將資料集更改一下,如圖所示,如果我們還是以0.5為判定閾值,那麼就會把腫瘤大小為6的情況進行誤判為良好。

所以,單純地通過將線性擬合的輸出值與某一個閾值進行比較,這種方法用於分類非常不穩定。

2)邏輯迴歸核心思想

因為「線性迴歸+閾值」的方式很難得到魯棒性好的分類器,我們對其進行拓展得到魯棒性更好的邏輯迴歸(Logistic Regression,有些地方也叫做「對數機率迴歸」)。邏輯迴歸將資料擬合到一個logit函式中,從而完成對事件發生概率的預測。

如果線性迴歸的結果輸出是一個連續值,而值的範圍是無法限定的,這種情況下我們無法得到穩定的判定閾值。那是否可以把這個結果對映到一個固定大小的區間內(比如0到1),進而判斷呢。

當然可以,這就是邏輯迴歸做的事情,而其中用於對連續值壓縮變換的函式叫做Sigmoid函式(也稱Logistic函式,S函式)。

Sigmoid數學表示式為

\[S(x) = \dfrac{1}{1+e^{-x}} \]

可以看到S函式的輸出值在0到1之間。

3.Sigmoid函式與決策邊界

剛才大家見到了Sigmoid函式,下面我們來講講它和線性擬合的結合,如何能夠完成分類問題,並且得到清晰可解釋的分類器判定「決策邊界」。

1)分類與決策邊界

決策邊界就是分類器對於樣本進行區分的邊界,主要有線性決策邊界(linear decision boundaries)和非線性決策邊界(non-linear decision boundaries),如下圖所示。

2)線性決策邊界生成

那麼,邏輯迴歸是怎麼得到決策邊界的呢,它與Sigmoid函式又有什麼關係呢?

如下圖中的例子:

如果我們用函式g表示Sigmoid函式,邏輯迴歸的輸出結果由假設函式\(h_{\theta}(x)=g\left(\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}\right)\)得到。

對於圖中的例子,我們暫時取引數\(\theta_{0}、\theta_{1} 、\theta_{2}\)分別為-3、1和1,那麼對於圖上的兩類樣本點,我們代入一些座標到\(h_{\theta}(x)\),會得到什麼結果值呢。

  • 對於直線上方的點\(\left ( x_{1}, x_{2} \right )\)(例如\(\left ( 100, 100 \right )\)),代入\(-3+ x_{1}+ x_{2}\),得到大於0的取值,經過Sigmoid對映後得到的是大於0.5的取值。

  • 對於直線下方的點\(\left ( x_{1}, x_{2} \right )\)(例如\(\left ( 0, 0 \right )\)),代入\(-3+ x_{1}+ x_{2}\),得到小於0的取值,經過Sigmoid對映後得到的是小於0.5的取值。

如果我們以0.5為判定邊界,則線性擬合的直線\(-3+ x_{1}+ x_{2} = 0\)變換成了一條決策邊界(這裡是線性決策邊界)。

3)非線性決策邊界生成

其實,我們不僅僅可以得到線性決策邊界,當\(h_{\theta}(x)\)更復雜的時候,我們甚至可以得到對樣本非線性切分的非線性決策邊界(這裡的非線性指的是無法通過直線或者超平面把不同類別的樣本很好地切分開)。

如下圖中另外一個例子:如果我們用函式g表示Sigmoid函式,邏輯迴歸的輸出結果由假設函式\(h_{\theta}(x)=g\left(\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\theta_{3} x_{1}^{2}+\theta_{4} x_{2}^{2}\right)\)得到。

對於圖中的例子,我們暫時取引數\(\theta_{0} 、\theta_{1} 、\theta_{2} 、\theta_{3} 、\theta_{4}\)分別為-1、0、0、1和1,那麼對於圖上的兩類樣本點,我們代入一些座標到
\(h_{\theta}(x)\),會得到什麼結果值呢。

  • 對於圓外部的點\(\left ( x_{1}, x_{2} \right )\)(例如\(\left ( 100, 100 \right )\)),代入\(\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\theta_{3} x_{1}^{2}+\theta_{4} x_{2}^{2}\),得到大於0的取值,經過Sigmoid對映後得到的是大於0.5的取值。

  • 對於圓內部的點\(\left ( x_{1}, x_{2} \right )\)(例如\(\left ( 0, 0 \right )\)),代入\(\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\theta_{3} x_{1}^{2}+\theta_{4} x_{2}^{2}\),得到小於0的取值,經過Sigmoid對映後得到的是小於0.5的取值。

如果我們以0.5為判定邊界,則線性擬合的圓曲線\(-1+x_{1}^2+x_{2}^2=0\)變換成了一條決策邊界(這裡是非線性決策邊界)。

4.梯度下降與優化

1)損失函式

前一部分的例子中,我們手動取了一些引數θ的取值,最後得到了決策邊界。但大家顯然可以看到,取不同的引數時,可以得到不同的決策邊界。

哪一條決策邊界是最好的呢?我們需要定義一個能量化衡量模型好壞的函式——損失函式(有時候也叫做「目標函式」或者「代價函式」)。我們的目標是使得損失函式最小化。

我們如何衡量預測值和標準答案之間的差異呢,最簡單直接的方式是數學中的均方誤差。它的計算方式很簡單,對於所有的樣本點\(x_{i}\),預測值\(h_{\theta}(x_{i})\)與標準答案\(y_{i}\)作差後平方,求均值即可,這個取值越小代表差異度越小。

\[MSE=\frac{1}{m} \sum_{i=1}^{m}\left(f\left(x_{i}\right)-y_{i}\right)^{2} \]

均方誤差對應的損失函式:均方誤差損失(MSE)在迴歸問題損失定義與優化中廣泛應用,但是在邏輯迴歸問題中不太適用。sigmoid函式的變換使得我們最終得到損失函式曲線如下圖所示,是非常不光滑凹凸不平的,這種數學上叫做非凸的損失函式(關於損失函式與凸優化更多知識可以參考ShowMeAI的文章 圖解AI數學基礎 | 微積分與最優化),我們要找到最優引數(使得函式取值最小的引數)是很困難的。

解釋:在邏輯迴歸模型場景下,使用MSE得到的損失函式是非凸的,數學特性不太好,我們希望損失函式如下的凸函式。凸優化問題中,區域性最優解同時也是全域性最優解,這一特性使得凸優化問題在一定意義上更易於解決,而一般的非凸最優化問題相比之下更難解決。

我們更希望我們的損失函式如下圖所示,是凸函式,我們在數學上有很好優化方法可以對其進行優化。

在邏輯迴歸模型場景下,我們會改用對數損失函式(二元交叉熵損失),這個損失函式同樣能很好地衡量引數好壞,又能保證凸函式的特性。對數損失函式的公式如下:

\[J(\theta)=-\frac{1}{m}\left[\sum_{i=1}^{m} y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right] \]

其中\(y^{(i)}\)表示樣本取值,在其為正樣本時取值為1,負樣本時取值為0,我們分這兩種情況來看看:

\[\operatorname{Cost}\left(h_{\theta}(x), y\right)=\left\{\begin{array}{ll} -\log \left(h_{\theta}(x)\right) & \text { if } y=0 \\ -\log \left(1-h_{\theta}(x)\right) & \text { if } y=1 \end{array}\right. \]

-\(y^{(i)}=0\):當一個樣本為負樣本時,若\(h_{\theta}(x)\)的結果接近1(即預測為正樣本),那麼\(- \log \left(1-h_{\theta}\left(x\right)\right)\)的值很大,那麼得到的懲罰就大。

-\(y^{(i)}=1\):當一個樣本為正樣本時,若\(h_{\theta}(x)\)的結果接近0(即預測為負樣本),那麼\(- \log \left(h_{\theta}\left(x\right)\right)\)的值很大,那麼得到的懲罰就大。

2)梯度下降

損失函式可以用於衡量模型引數好壞,但我們還需要一些優化方法找到最佳的引數(使得當前的損失函式值最小)。最常見的演算法之一是「梯度下降法」,逐步迭代減小損失函式(在凸函式場景下非常容易使用)。如同下山,找準方向(斜率),每次邁進一小步,直至山底。

梯度下降(Gradient Descent)法,是一個一階最優化演算法,通常也稱為最速下降法。要使用梯度下降法找到一個函式的區域性極小值,必須向函式上當前點對應梯度(或者是近似梯度)的反方向的規定步長距離點進行迭代搜尋。

上圖中,α稱為學習率(learning rate),直觀的意義是,在函式向極小值方向前進時每步所走的步長。太大一般會錯過極小值,太小會導致迭代次數過多。

(關於損失函式與凸優化更多知識可以參考ShowMeAI的文章 圖解AI數學基礎 | 微積分與最優化http://www.showmeai.tech/article-detail/165,關於監督學習的更多總結可以檢視ShowMeAI總結的速查表手冊 AI知識技能速查 | 機器學習-監督學習

5.正則化與緩解過擬合

1)過擬合現象

在訓練資料不夠多,或者模型複雜又過度訓練時,模型會陷入過擬合(Overfitting)狀態。如下圖所示,得到的不同擬合曲線(決策邊界)代表不同的模型狀態:

  • 擬合曲線1能夠將部分樣本正確分類,但是仍有較大量的樣本未能正確分類,分類精度低,是「欠擬合」狀態。

  • 擬合曲線2能夠將大部分樣本正確分類,並且有足夠的泛化能力,是較優的擬合曲線。

  • 擬合曲線3能夠很好的將當前樣本區分開來,但是當新來一個樣本時,有很大的可能不能將其正確區分,原因是該決策邊界太努力地學習當前的樣本點,甚至把它們直接「記」下來了。

擬合曲線中的「抖動」,表示擬合曲線不規則、不光滑(上圖中的擬合曲線3),對資料的學習程度深,過擬合了。

2)正則化處理

過擬合的一種處理方式是正則化,我們通過對損失函式新增正則化項,可以約束引數的搜尋空間,從而保證擬合的決策邊界並不會抖動非常厲害。如下圖為對數損失函式中加入正則化項(這裡是一個L2正則化項)

\[J(\theta)=\frac{1}{m} \sum_{i=1}^{m}\left[-y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)-\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]+\frac{\lambda}{2 m} \sum_{j=1}^{n} \theta_{j}^{2} \]

其中\(\lambda\)表示正則化係數,表示懲罰程度,\(\lambda\)的值越大,為使\(J(\theta)\)的值小,則引數\(\theta\)的絕對值就得越小,通常對應于越光滑的函式,也就是更加簡單的函式,因此不易發生過擬合的問題。我們依然可以採用梯度下降對加正則化項的損失函式進行優化。

6.特徵變換與非線性表達

1)多項式特徵

對於輸入的特徵,如果我們直接進行線性擬合再給到Sigmoid函式,得到的是線性決策邊界。但新增多項式特徵,可以對樣本點進行多項式迴歸擬合,也能在後續得到更好的非線性決策邊界。

多項式迴歸,迴歸函式是迴歸變數多項式。多項式迴歸模型是線性迴歸模型的一種,此時迴歸函式關於迴歸係數是線性的。

在實際應用中,通過增加一些輸入資料的非線性特徵來增加模型的複雜度通常是有效的。一個簡單通用的辦法是使用多項式特徵,這可以獲得特徵的更高維度和互相間關係的項,進而獲得更好的實驗結果。

2)非線性切分

如下圖所示,在邏輯迴歸中,擬合得到的決策邊界,可以通過新增多項式特徵,調整為非線性決策邊界,具備非線性切分能力。

-\(Z_{\theta}(x)\)\(\theta\)是引數,當\(Z_{\theta}(x) = \theta_{0} + \theta_{1}x\)時,此時得到的是線性決策邊界;

-\(Z_{\theta}(x) = \theta_{0} + \theta_{1}x + \theta_{2}x^2\)時,使用了多項式特徵,得到的是非線性決策邊界。

目的是低維線性不可分的資料轉化到高維時,會變成線性可分。得到在高維空間下的線性分割引數映射回低維空間,形式上表現為低維的非線性切分。

更多監督學習的演算法模型總結可以檢視ShowMeAI的文章 AI知識技能速查 | 機器學習-監督學習

視訊教程

可以點選 B站 檢視視訊的【雙語字幕】版本

【雙語字幕+資料下載】MIT 6.036 | 機器學習導論(2020·完整版)

https://www.bilibili.com/video/BV1y44y187wN?p=4

ShowMeAI相關文章推薦

ShowMeAI系列教程推薦