1. 程式人生 > >邏輯迴歸原理小結

邏輯迴歸原理小結

    邏輯迴歸是一個分類演算法,它可以處理二元分類以及多元分類。雖然它名字裡面有“迴歸”兩個字,卻不是一個迴歸演算法。那為什麼有“迴歸”這個誤導性的詞呢?個人認為,雖然邏輯迴歸是分類模型,但是它的原理裡面卻殘留著迴歸模型的影子,本文對邏輯迴歸原理做一個總結。

1. 從線性迴歸到邏輯迴歸

    我們知道,線性迴歸的模型是求出輸出特徵向量Y和輸入樣本矩陣X之間的線性關係係數\(\theta\),滿足\(\mathbf{Y = X\theta}\)。此時我們的Y是連續的,所以是迴歸模型。如果我們想要Y是離散的話,怎麼辦呢?一個可以想到的辦法是,我們對於這個Y再做一次函式轉換,變為\(g(Y)\)。如果我們令\(g(Y)\)的值在某個實數區間的時候是類別A,在另一個實數區間的時候是類別B,以此類推,就得到了一個分類模型。如果結果的類別只有兩種,那麼就是一個二元分類模型了。邏輯迴歸的出發點就是從這來的。下面我們開始引入二元邏輯迴歸。

2. 二元邏輯迴歸的模型

    上一節我們提到對線性迴歸的結果做一個在函式g上的轉換,可以變化為邏輯迴歸。這個函式g在邏輯迴歸中我們一般取為sigmoid函式,形式如下:

    \(g(z) = \frac{1}{1+e^{-z}}\) 

    它有一個非常好的性質,即當z趨於正無窮時,\(g(z)\)趨於1,而當z趨於負無窮時,\(g(z)\)趨於0,這非常適合於我們的分類概率模型。另外,它還有一個很好的導數性質:

    \(g^{'}(z) = g(z)(1-g(z))\) 

    這個通過函式對\(g(z)\)求導很容易得到,後面我們會用到這個式子。

    如果我們令\(g(z)\)中的z為:\({z = x\theta}\),這樣就得到了二元邏輯迴歸模型的一般形式:

    \(h_{\theta}(x) = \frac{1}{1+e^{-x\theta}}\) 

    其中x為樣本輸入,\(h_{\theta}(x)\)為模型輸出,可以理解為某一分類的概率大小。而\(\theta\)為分類模型的要求出的模型引數。對於模型輸出\(h_{\theta}(x)\),我們讓它和我們的二元樣本輸出y(假設為0和1)有這樣的對應關係,如果\(h_{\theta}(x) >0.5\) ,即\(x\theta > 0\), 則y為1。如果\(h_{\theta}(x) < 0.5\),即\(x\theta < 0\), 則y為0。y=0.5是臨界情況,此時\(x\theta = 0\)為, 從邏輯迴歸模型本身無法確定分類。

    \(h_{\theta}(x)\)的值越小,而分類為0的的概率越高,反之,值越大的話分類為1的的概率越高。如果靠近臨界點,則分類準確率會下降。

    此處我們也可以將模型寫成矩陣模式:

    \(h_{\theta}(X) = \frac{1}{1+e^{-X\theta}}\) 

    其中\(h_{\theta}(X)\)為模型輸出,為 mx1的維度。X為樣本特徵矩陣,為mxn的維度。\(\theta\)為分類的模型係數,為nx1的向量。

    理解了二元分類迴歸的模型,接著我們就要看模型的損失函數了,我們的目標是極小化損失函式來得到對應的模型係數\(\theta\)。

3. 二元邏輯迴歸的損失函式

    回顧下線性迴歸的損失函式,由於線性迴歸是連續的,所以可以使用模型誤差的的平方和來定義損失函式。但是邏輯迴歸不是連續的,自然線性迴歸損失函式定義的經驗就用不上了。不過我們可以用最大似然法來推匯出我們的損失函式。

    我們知道,按照第二節二元邏輯迴歸的定義,假設我們的樣本輸出是0或者1兩類。那麼我們有:

    \(P(y=1|x,\theta ) = h_{\theta}(x)\)

    \(P(y=0|x,\theta ) = 1- h_{\theta}(x)\)

     把這兩個式子寫成一個式子,就是:

    \(P(y|x,\theta ) = h_{\theta}(x)^y(1-h_{\theta}(x))^{1-y}\)

    其中y的取值只能是0或者1。

    用矩陣法表示,即為:

    \(P(Y|X,\theta ) = h_{\theta}(X)^Y(E-h_{\theta}(X))^{1-Y}\),其中E為單位向量。

    得到了y的概率分佈函式表示式,我們就可以用似然函式最大化來求解我們需要的模型係數\(\theta\)。

    為了方便求解,這裡我們用對數似然函式最大化,對數似然函式取反即為我們的損失函式\(J(\theta\))。其中:

    似然函式的代數表示式為:

    \(L(\theta) = \prod\limits_{i=1}^{m}(h_{\theta}(x^{(i)}))^{y^{(i)}}(1-h_{\theta}(x^{(i)}))^{1-y^{(i)}}\)

    其中m為樣本的個數。

    對似然函式對數化取反的表示式,即損失函式表示式為:

    \(J(\theta) = -lnL(\theta) = -\sum\limits_{i=1}^{m}(y^{(i)}log(h_{\theta}(x^{(i)}))+ (1-y^{(i)})log(1-h_{\theta}(x^{(i)})))\)

     損失函式用矩陣法表達更加簡潔:

    \(J(\theta) = -Y\odot logh_{\theta}(X) - (E-Y)\odot log(E-h_{\theta}(X))\)

    其中E為全1向量,\(\odot\)為哈達馬乘積。

4. 二元邏輯迴歸的損失函式的優化方法

    對於二元邏輯迴歸的損失函式極小化,有比較多的方法,最常見的有梯度下降法,座標軸下降法,等牛頓法等。這裡推匯出梯度下降法中\(\theta\)每次迭代的公式。由於代數法推導比較的繁瑣,我習慣於用矩陣法來做損失函式的優化過程,這裡給出矩陣法推導二元邏輯迴歸梯度的過程。

    對於\(J(\theta) = -Y\odot logh_{\theta}(X) - (E-Y)\odot log(E-h_{\theta}(X))\),我們用\(J(\theta)\)對\(\theta\)向量求導可得:

    \(\frac{\partial}{\partial\theta}J(\theta) = -Y \odot X^T\frac{1}{h_{\theta}(X)}\odot h_{\theta}(X)\odot (E-h_{\theta}(X)) + (E-Y)\odot X^T\frac{1}{1-h_{\theta}(X)}\odot h_{\theta}(X)\odot (E-h_{\theta}(X))\)

    這一步我們用到了矩陣求導的鏈式法則,和下面三個矩陣求導公式:

    \(\frac{\partial}{\partial X}logX = 1/X\)

    \(\frac{\partial}{\partial z}g(z) = g(z)(1-g(z))   (g(z)為sigmoid函式) \) 

    \(\frac{\partial}{\partial\theta}X\theta = X^T\)

    對於剛才的求導公式我們進行化簡可得:

    \(\frac{\partial}{\partial\theta}J(\theta) = X^T(h_{\theta}(X) - Y )\)

    從而在梯度下降法中每一步向量\(\theta\)的迭代公式如下:

    \(\theta = \theta - \alpha X^T(h_{\theta}(X) - Y )\)

    其中,\(\alpha\)為梯度下降法的步長。

    實踐中,我們一般不用操心優化方法,大部分機器學習庫都內建了各種邏輯迴歸的優化方法,不過了解至少一種優化方法還是有必要的。

5. 二元邏輯迴歸的正則化

    邏輯迴歸也會面臨過擬合問題,所以我們也要考慮正則化。常見的有L1正則化和L2正則化。

    邏輯迴歸的L1正則化的損失函式表示式如下,相比普通的邏輯迴歸損失函式,增加了L1的範數做作為懲罰,超引數\(\alpha\)作為懲罰係數,調節懲罰項的大小。

    二元邏輯迴歸的L1正則化損失函式表示式如下:

    \(J(\theta) = -Y\odot logh_{\theta}(X) - (E-Y)\odot log(E-h_{\theta}(X)) + ||\theta||_1\)

    其中\(||\theta||_1\)為\(\theta\)的L1範數。

    邏輯迴歸的L1正則化損失函式的優化方法常用的有座標軸下降法和最小角迴歸法。

    二元邏輯迴歸的L2正則化損失函式表示式如下:

    \(J(\theta) = -Y\odot logh_{\theta}(X) - (E-Y)\odot log(E-h_{\theta}(X)) + \frac{1}{2}\alpha||\theta||_2^2\)

    其中\(||\theta||_2\)為\(\theta\)的L2範數。

    邏輯迴歸的L2正則化損失函式的優化方法和普通的邏輯迴歸類似。

6. 二元邏輯迴歸的推廣:多元邏輯迴歸

    前面幾節我們的邏輯迴歸的模型和損失函式都侷限於二元邏輯迴歸,實際上二元邏輯迴歸的模型和損失函式很容易推廣到多元邏輯迴歸。比如總是認為某種型別為正值,其餘為0值,這種方法為最常用的one-vs-rest,簡稱OvR.

    另一種多元邏輯迴歸的方法是Many-vs-Many(MvM),它會選擇一部分類別的樣本和另一部分類別的樣本來做邏輯迴歸二分類。最常用的是One-Vs-One(OvO)。OvO是MvM的特例。每次我們選擇兩類樣本來做二元邏輯迴歸。

    這裡只介紹多元邏輯迴歸的softmax迴歸的一種特例推導:

    首先回顧下二元邏輯迴歸。

    \(P(y=1|x,\theta ) = h_{\theta}(x) =  \frac{1}{1+e^{-x\theta}} = \frac{e^{x\theta}}{1+e^{x\theta}}\)

    \(P(y=0|x,\theta ) = 1- h_{\theta}(x) = \frac{1}{1+e^{x\theta}}\)

    其中y只能取到0和1。則有:

    \(ln\frac{P(y=1|x,\theta )}{P(y=0|x,\theta)} = x\theta\)

    如果我們要推廣到多元邏輯迴歸,則模型要稍微做下擴充套件。

    我們假設是K元分類模型,即樣本輸出y的取值為1,2,。。。,K。

    根據二元邏輯迴歸的經驗,我們有:

    \(ln\frac{P(y=1|x,\theta )}{P(y=K|x,\theta)} = x\theta_1\)

    \(ln\frac{P(y=2|x,\theta )}{P(y=K|x,\theta)} = x\theta_2\) 

    ...

    \(ln\frac{P(y=K-1|x,\theta )}{P(y=K|x,\theta)} = x\theta_{K-1}\) 

    上面有K-1個方程。

    加上概率之和為1的方程如下:

    \(\sum\limits_{i=1}^{K}P(y=i|x,\theta ) = 1\)

    從而得到K個方程,裡面有K個邏輯迴歸的概率分佈。

    解出這個K元一次方程組,得到K元邏輯迴歸的概率分佈如下:

    \(P(y=k|x,\theta ) =  e^{x\theta_k} \bigg/ 1+\sum\limits_{t=1}^{K-1}e^{x\theta_t}\)  k = 1,2,...K-1

    \(P(y=K|x,\theta ) =  1 \bigg/ 1+\sum\limits_{t=1}^{K-1}e^{x\theta_t}\)

    多元邏輯迴歸的損失函式推導以及優化方法和二元邏輯迴歸類似,這裡就不累述。

7.小結

    邏輯迴歸尤其是二元邏輯迴歸是非常常見的模型,訓練速度很快,雖然使用起來沒有支援向量機(SVM)那麼佔主流,但是解決普通的分類問題是足夠了,訓練速度也比起SVM要快不少。如果你要理解機器學習分類演算法,那麼第一個應該學習的分類演算法個人覺得應該是邏輯迴歸。理解了邏輯迴歸,其他的分類演算法再學習起來應該沒有那麼難了。

 (歡迎轉載,轉載請註明出處。歡迎溝通交流: [email protected]) 

相關推薦

邏輯迴歸原理小結

    邏輯迴歸是一個分類演算法,它可以處理二元分類以及多元分類。雖然它名字裡面有“迴歸”兩個字,卻不是一個迴歸演算法。那為什麼有“迴歸”這個誤導性的詞呢?個人認為,雖然邏輯迴歸是分類模型,但是它的原理裡面卻殘留著迴歸模型的影子,本文對邏輯迴歸原理做一個總結。 1. 從線性迴歸到邏輯迴歸     我們知道,線

利用python實現梯度下降和邏輯迴歸原理(Python詳細原始碼:預測學生是否被錄取)

本案例主要是:建立邏輯迴歸模型預測一個學生是否被大學錄取,沒有詳細介紹演算法推到, 讀者可查閱其他部落格理解梯度下降演算法的實現:https://blog.csdn.net/wangliang0633/article/details/79082901 資料格式如下:第三列表示錄取狀態,0--

邏輯迴歸原理與實現

前提 程式碼  import numpy as np import os def loadData(dir): trainfileList = os.listdir(dir) m = len(trainfileList) dataArray = np

Python邏輯迴歸原理及實際案例應用

前言 上面我們介紹了線性迴歸, 嶺迴歸, Lasso迴歸, 今天我們來看看另外一種模型—"邏輯迴歸". 雖然它有"迴歸"一詞, 但解決的卻是分類問題 目錄 1. 邏輯迴歸 2. 優缺點及優化問題 3. 實際案例應用 4. 總結 正文 在前面所介紹的線性迴歸, 嶺迴歸和Lasso迴歸這三種迴歸模

邏輯迴歸原理及matlab實現

個人部落格文章連結:  http://www.huqj.top/article?id=163 對於某些分類問題,自變數可能是連續的,但是因變數卻可能是離散的,例如:根據腫瘤大小判斷該腫瘤是否是良性。這種問題不適合用線性迴歸來解決,雖然可以將連續的因變數值對映到離散的分類上,但

Python邏輯迴歸原理及實際案例應用!

前言 上面我們介紹了線性迴歸, 嶺迴歸, Lasso迴歸, 今天我們來看看另外一種模型—"邏輯迴歸". 雖然它有"迴歸"一詞, 但解決的卻是分類問題 目錄 正文 在前面所介紹的線性迴歸, 嶺迴歸和Lasso迴歸這三種迴歸模型中, 其輸出變數均為連續型, 比如常見的線性迴歸模型為:

邏輯迴歸原理介紹及Matlab實現

一、邏輯迴歸基本概念 1. 什麼是邏輯迴歸 邏輯迴歸就是這樣的一個過程:面對一個迴歸或者分類問題,建立代價函式,然後通過優化方法迭代求解出最優的模型引數,然後測試驗證我們這個求解的模型的好壞。 Logistic迴歸雖然名字裡帶“迴歸”,但是它實際上是一種分類方法,主

邏輯迴歸原理介紹與案例python程式碼實現

邏輯迴歸是用於分類的演算法。平常的線性迴歸方程為f(x)=wx+b,此時f(x)的取值可以是任意的,要讓預測的值可以分類,例如分類到class1是預測值為1,分類到class2時預測值為0。這時我們就要用到分類函式。下面來介紹一個分類函式sigmoid:其中z=wx+bf(z

邏輯迴歸原理及spark例子

例子中對K元邏輯迴歸沒有詳細推導,我自己推導了一下,過程也比較簡單。(太長時間不寫字,感覺已經不會拿筆了。。。) 過程如圖: 然後運行了一下spark自帶的LogisticRegressionWithLBFGSExample例子。 原始碼如下: import

邏輯迴歸的概念、原理相關

什麼是邏輯迴歸? 線性迴歸能夠對連續值進行預測,如根據面積對房價進行預測。而在現實生活中,我們還有常見的另一類問題:分類問題。最簡單的是二分類問題,即是與否的問題,如得病與否,交易是否合理,能否發放貸款,郵件是否垃圾郵件等。 邏輯迴歸其實是一個分類演算法而不是迴歸演算法。

邏輯迴歸(Logistic Regression)演算法小結

一、邏輯迴歸簡述:   回顧線性迴歸演算法,對於給定的一些n維特徵(x1,x2,x3,......xn),我們想通過對這些特徵進行加權求和彙總的方法來描繪出事物的最終運算結果。從而衍生出我們線性迴歸的計算公式:        向量化表示式:         &n

【演算法原理】從模型假設看線性迴歸邏輯迴歸

摘要 本文從演算法的模型假設方面,對線性迴歸、邏輯迴歸和感知器做一下簡要對比,說明了它們之間的聯絡。 符號約定 1)樣本集合: (xi,yi)(1⩽i⩽m)(xi,yi)(1⩽i⩽m),其中ii表示一共mm個樣本中的第ii個 2)xi=(xi0,xi

邏輯斯蒂迴歸原理

1.邏輯斯蒂迴歸模型 LR模型主要用於分類模型,細心的人不難發現LR模型線上性迴歸模型上加了一個sigmoid轉換。為了更加深入地瞭解這個模型,我們可能要思考以下幾個問題 (1)sigmoid從何而來,篇幅比較大,下面會單獨討論  (2)sigmoid轉換的優勢  -

邏輯迴歸原理+程式碼

(作者:陳玓玏) 邏輯迴歸算是傳統機器學習中最簡單的模型了,它的基礎是線性迴歸,為了弄明白邏輯迴歸,我們先來看線性迴歸。 一、線性迴歸 假設共N個樣本,每個樣本有M個特徵,這樣就產生了一個N*M大小的樣本矩陣。令矩陣為X,第i個樣本為Xi,第i個樣本的

邏輯斯蒂迴歸原理

1.邏輯斯蒂迴歸模型 LR模型主要用於分類模型,細心的人不難發現LR模型線上性迴歸模型上加了一個sigmoid轉換。為了更加深入地瞭解這個模型,我們可能要思考以下幾個問題 (1)sigmoid從

機器學習邏輯迴歸模型總結——從原理到sklearn實踐

0x00 基本原理 邏輯迴歸演算法,從名字上看似乎是個迴歸問題,但實際上邏輯迴歸是個典型的分類演算法。 對於分類問題,一般都是一些離散變數,且y的取值如下: y∈{0,1,2,3,...,n},顯然不能使用線性迴歸擬合。 以二元分類問題開始討論,y的取值

梯度下降原理及線上性迴歸邏輯迴歸中的應用

1 基本概念 1)定義 梯度下降法,就是利用負梯度方向來決定每次迭代的新的搜尋方向,使得每次迭代能使待優化的目標函式逐步減小。 梯度下降法是2範數下的最速下降法。 最速下降法的一種簡單形式是:x(k+1)=x(k)-a*g(k),其中a稱為學習速率,可以是較小的常數。g(k

【機器學習】演算法原理詳細推導與實現(二):邏輯迴歸

【機器學習】演算法原理詳細推導與實現(二):邏輯迴歸 在上一篇演算法中,線性迴歸實際上是 連續型 的結果,即 \(y\in R\) ,而邏輯迴歸的 \(y\) 是離散型,只能取兩個值 \(y\in \{0,1\}\),這可以用來處理一些分類的問題。 logistic函式 我們可能會遇到一些分類問題,例如想要劃

線性模型之邏輯迴歸(LR)(原理、公式推導、模型對比、常見面試點)

參考資料(要是對於本文的理解不夠透徹,必須將以下部落格認知閱讀,方可全面瞭解LR): (1).https://zhuanlan.zhihu.com/p/74874291 (2).邏輯迴歸與交叉熵 (3).https://www.cnblogs.com/pinard/p/6029432.html (4).htt

Vue工作原理小結

key 如何實現 reference 讀寫 owa 方法 cli scrip 枚舉 本文能幫你做什麽?1、了解vue的雙向數據綁定原理以及核心代碼模塊2、緩解好奇心的同時了解如何實現雙向綁定為了便於說明原理與實現,本文相關代碼主要摘自vue源碼, 並進行了簡化改造,相對較