【機器學習筆記】:從零開始學會邏輯迴歸(一)

作者:xiaoyu

知乎:https://zhuanlan.zhihu.com/pypcfx

介紹:一個半路轉行的數據挖掘工程師

▍前言

邏輯迴歸是一個非常經典,也是很常用的模型。之前和大家分享過它的重要性:5個原因告訴你:爲什麼在成爲數據科學家之前,“邏輯迴歸”是第一個需要學習的

關於邏輯迴歸,可以用一句話來總結:邏輯迴歸假設數據服從伯努利分佈,通過極大似然函數的方法,運用梯度下降來求解參數,來達到將數據二分類的目的。

本篇我們就開始邏輯迴歸的介紹。

▍sigmoid函數

首先我們瞭解一個函數:sigmoid,邏輯迴歸就是基於這個函數構建的模型。sigmod函數公式如下:

使用Python的numpy,matplotlib對該函數進行可視化,如下:

圖中我們可以直觀地看到這個函數的一些特點:

  • 中間範圍內函數斜率最大,對應Y的大部分數值變化
  • Y軸數值範圍在 0~1 之間
  • X軸數值範圍沒有限制,但當X大於一定數值後,Y無限趨近於1,而小於一定數值後,Y無限趨近於0
  • 特別地,當 X=0 時,Y=0.5

▍廣義線性模型

前幾篇我們詳細地介紹了線性迴歸模型:

其中在殘差分析的過程中,如果殘差方差不是齊性的,我們一般會對變量取自然對數進行變換,以達到殘差方差齊性的效果。比如我們這樣取對數:

我們一般稱這種爲“對數線性迴歸”,其形式上是線性迴歸,但實際上是在求輸入空間到輸出空間的非線性函數映射。這裏的對數函數就起到了將線性迴歸模型預測值與真實值聯繫起來的作用。

我們稱這樣變換後的模型爲“廣義線性模型”,其中對數函數爲“聯繫函數”,當然也可以是其他函數。廣義線性模型是個宏觀概念,上面通過對數函數變換得到的模型只是廣義線性模型的其中一種而已。

▍邏輯迴歸模型構建

瞭解了上面的基本內容,我們來看一下邏輯迴歸模型是如何建立的。其實,邏輯迴歸模型也是廣義線性模型的其中一種,只是形式上和上面取對數有些不同。它正是通過開始提到的sigmoid函數變換得到的模型。

那麼爲什麼要用sigmoid函數呢?

對於一般的線性迴歸模型,我們知道:我們的自變量X和因變量Y都是連續的數值,通過X的輸入就可以很好的預測Y值。

但現實生活中,我們也有離散的數據類型,比如好和壞,男和女等等。那麼我們在想:在線性迴歸模型的基礎上,是否可以實現一個預測因變量是離散數據類型的模型呢?

答案當然是可以的。我們可能會想到階躍函數:

但是它在這裏是不合適的,正如我們神經網絡激活函數不選擇階躍函數一樣,因爲它不連續不可微。而能滿足分類效果,且是連續的函數,sigmoid是再好不過的選擇了(返回文章開頭看一下sigmoid函數的特點就知道了)。因此,邏輯迴歸模型就可以通過在線性迴歸模型的基礎上,套一個sigmoid函數來實現,這樣不管X取什麼樣的值,Y值都被非線性地映射在 0~1 之間,實現二分類。這也證明一個結論:邏輯迴歸不是迴歸模型,而是分類模型。

我們這裏討論的都是二元分類,因此,一個二元邏輯迴歸模型就建立出來了,其的公式如下:

我們簡單地把原來的X替換爲一個線性模型就得到了上面公式。代替部分可以擴展如下:

除了上面的表現形式,我們也可以用另外一種形式來表達二元邏輯迴歸模型。將上面模型簡單地進行變化:

公式中,y可以理解爲樣本x爲正例的概率,而1-y則可以理解爲樣本x爲負例時的概率。二者的比值y/(1-y)被稱爲“odds”,即“機率”,反映了x作爲正例的相對可能性,對機率取對數就得到了線性迴歸模型了。

上式其實是在用線性迴歸模型的預測結果去逼近真實標記的對數機率。所以該模型也被稱作“對數機率迴歸”

▍二元邏輯迴歸是如何進行分類的?

通過上面的介紹,我們知道了二元邏輯迴歸的模型。但我們發現它的Y是在 0~1 之間連續的數值,也即這個範圍內的任意小數(百分比)。那麼這些小數是如何進行分類的呢?

可以將模型的輸出h(x)當作某一分類的概率的大小。這樣來看,小數值越接近1,說明是1分類的概率越大,相反,小數值越接近0,說明是0分類的概率越大。

而實際使用中,我們會對所有輸出結果進行排序,然後結合業務來決定出一個閾值。假如閾值是0.5,那麼我們就可以將大於0.5的輸出都視爲1分類,而小於0.5的輸出都視爲0分類。所以,二元邏輯迴歸是一種概率類模型,是通過排序並和閾值比較進行分類的。

這個閾值的選擇關係到評估標準的結果,其實我們之前也提到過。ROC曲線就是通過遍歷所有閾值來實現的,曲線上每一個點對應一對FPR和TPR,而FPR和TPR平衡的點即爲F分數【機器學習筆記】:一文讓你徹底記住什麼是ROC/AUC(看不懂你來找我)

▍邏輯迴歸的假設

正如線性迴歸模型一樣,邏輯迴歸也有假設條件,主要是兩個:

(1)假設數據服從伯努利分佈

(2)假設模型的輸出值是樣本爲正例的概率

基於這兩個假設,我們可以分別得出類別爲1和0的後驗概率估計

▍邏輯迴歸的損失函數

有了模型,我們自然會想到要求策略,也就是損失函數。對於邏輯迴歸,我們很自然想到:用線性迴歸的損失函數“離差平方和”的形式是否可以?

但事實上,這種形式並不適合,因爲所得函數並非凸函數,而是有很多局部的最小值,這樣不利於求解。

前面說到邏輯迴歸其實是概率類模型,因此,我們通過極大似然估計(MLE)推導邏輯迴歸損失函數。下面是具體推導過程。

上面我們通過基本假設得到了1和0兩類的後驗概率,現在將兩個概率合併可得:

現在我們得到了模型概率的一般形式,接下來就可以使用極大似然估計來根據給定的訓練集估計出參數,將n個訓練樣本的概率相乘得到:

似然函數是相乘的模型,我們可以通過取對數將等式右側變爲相加模型,然後將指數提前,以便於求解。變換後如下:

如此就推導出了參數的最大似然估計。我們的目的是將所得似然函數極大化,而損失函數是最小化,因此,我們需要在上式前加一個負號便可得到最終的損失函數。

其等價於:

注:邏輯迴歸的損失函數“對數似然函數”,在模型GBDT分類情況下也會用到,又叫作“交叉熵”

▍邏輯迴歸損失函數求解

現在我們推導出了邏輯迴歸的損失函數,而需要求解是模型的參數theta,即線性模型自變量的權重係數。對於線性迴歸模型而言,可以使用最小二乘法,但對於邏輯迴歸而言使用傳統最小二乘法求解是不合適的。

邏輯迴歸的最小二乘法的代價函數

對於不適合的解釋原因有很多,但本質上不能使用經典最小二乘法的原因在於:logistic迴歸模型的參數估計問題不能“方便地”定義“誤差”或者“殘差”。

因此,考慮使用迭代類算法優化,常見的就是”梯度下降法“。當然,還有其它方法比如,座標軸下降法,牛頓法等。我們本篇介紹使用”梯度下降法“來對損失函數求解。

使用梯度下降法求解邏輯迴歸損失函數。梯度下降的迭代公式如下:

問題變爲如何求損失函數對參數theta的梯度。下面進行詳細推導過程:

推導過程中需要用到的數學知識是:偏導,對數求導,sigmoid函數求導。其中,函數求導公式如下:

最後將求得的梯度帶入迭代公式中,即爲:

注意:公式中,i 代表樣本數,j 代表特徵數。

其實,常用梯度下降有三個種方法,可以根據需要選擇,分別是:批量梯度下降(BGD),隨機梯度下降(SGD),small batch梯度下降。具體不進行介紹。

▍邏輯迴歸的優缺點

優點:

1. 直接對分類可能性進行建模,無需實現假設數據分佈,這樣就避免了假設分佈不準確所帶來的問題。

2. 形式簡單,模型的可解釋性非常好,特徵的權重可以看到不同的特徵對最後結果的影響。

3. 除了類別,還能得到近似概率預測,這對許多需利用概率輔助決策的任務很有用。

缺點:

1. 準確率不是很高,因爲形勢非常的簡單,很難去擬合數據的真實分佈。

2. 本身無法篩選特徵。

以上就是關於邏輯迴歸模型的一些分享,還有其它正則化,多元邏輯迴歸等問題,我們將在後續進行介紹。另外,後續也將準備邏輯迴歸sklearn的使用和實戰練習。

如果有任何問題,歡迎指正和補充,

另外歡迎點贊和轉發支持!

參考: 機器學習,周志華 https://blog.csdn.net/yinyu19950811/article/details/81321944 https://www.cnblogs.com/pinard/p/6029432.html

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