slide_1
slide_2
slide_3
slide_4
previous arrow
next arrow

Logistic Regression與Linear Regression

邏輯回歸(Logistic Regression)與線性回歸(Linear Regression)有很多方面都相似。然而,其中一個大分別是Logistic Regression涉及強烈的概率論概念,如對數似然(log-likelihood)、貝葉斯定理(Bayes Theorem)或條件概率(conditional probabilities)。事實上,Logistic Regression的解通常是從二項分佈(binomial distribution)的對數似然最大化得出的。

在這篇文章中,我們提出一種替代的Linear Regression方法,無需了解二項分佈或對數似然。如果你知道什麼是Linear Regression,你將學習如何輕鬆地推導出Logistic Regression,如何使用它,並使用Python的scikit-learn庫來正確解決它。

Linear Regression回顧

在Linear Regression,我們希望使用一組特徵(X)來預測一個連續變量(y),這些特徵由模型的參數(β)加權。假設我們收集了n個(y,X)的數據點。例如,我們可以使用球員的位置、進球數和年齡來預測他的轉會費用。在這種情況下,X是一個有n行和3列的矩陣,而y是一個大小為n的向量。預測值(y^​)是這三個特徵的線性組合。數學上我們有線性預測器

現在,你可以為參數β設定任何數字來進行預測。但是,如果你想更聰明一些,可以定義一個函數來優化,以找到最佳的參數集。這個函數將測量線性預測器與真實目標之間的接近程度。為了確保參數集的唯一性,我們需要在最小化時使函數凸(convex),在最大化時使函數凹(concave)。通常選擇均方誤差(MSE)作為要最小化的函數。還有其他替代方案,如平均絕對誤差、Huber損失等,每個都有其特定的性質。在我們優化均方誤差的情況下,我們需要找到最小化以下數量的參數集

這是我們誤差的二范數平方,誤差是我們預測值(y^​)與實際目標(y)之間的差異。這只是MSE的一種簡單表示。有時,我們可以在約束下進行優化。例如,如果你希望參數為正,那麼你可以在β>0的約束下最小化MSE。因此,Linear Regression的步驟如下:獲取一些數據,有一個要優化的函數(MSE),並找到最佳模型參數。我們不會推導解決方案,因為網上有成千上萬的文章在做這件事,這不是本文的目的。

Logistic Regression回顧

本文的目的是展示Logistic Regression等同於Linear Regression,但有一個小小的調整。如同Linear Regression一樣,Logistic Regression是一種線性模型:預測依賴於特徵的線性組合。這次我們希望使用一組特徵(X)來預測一個二元變量(y),這些特徵由模型的參數(β)加權。什麼是二元變量?這意味著目標只能取兩個值:0或1。這是一種數學表達方式,表示事件是否發生。例如,兩隊得分(y=1)與否(y=0),或主隊勝利(y=1)與否(y=0)。中間沒有可能的值。到目前為止,這就像Linear Regression,但y是二元的這一事實給問題增加了一個挑戰:現在預測必須在相同的二元尺度上。確實,你不能有負的預測或高於一的預測,但你可以有0和1之間的連續預測。那麼我們如何實現這一點呢?

Linear Regression與Logistic Regression之間的主要區別在於預測被約束在[0,1]之間的連續區間內。一個解決方案是將預測約束在同一區間內:

約束線性回歸的MSE

問題是線性且可解的,但它只在樣本內有效。對於模型從未見過的新數據,無法保證滿足約束條件。

一個更好的解決方案是將預測進行轉換,使其始終在正確的區間內。可能的轉換之一是S型函數(sigmoid function):

如你所見,t可以取任何值,σ(t)將始終在[0,1]區間內。問題解決了。新的MSE函數

需要最小化:

邏輯回歸的MSE(範數形式)
上面定義的均方誤差被稱為Brier得分。讓我們用具體數值替換所有數學量:

邏輯回歸的MSE(標量形式)
在不失一般性的情況下,我們可以最小化每個單獨平方表達式的對數之和。然後,由於y只能取兩個值,最小化簡化為:

邏輯回歸的MSE(簡化形式)
這種簡化形式正是標準概率推導的邏輯回歸模型的對數似然的兩倍。解決方案是相同的。

邏輯回歸是一種線性回歸,其中預測值通過S型函數轉換。

可以使用scikit-learn中的LogisticRegression類來進行最小化,並使用正確的輸入集:

from sklearn.linear_model import LogisticRegression
# fit_intercept可以為False如果我們需要
model = LogisticRegression(penalty=”none”, fit_intercept=True)
model.fit(X, y)

此時,模型已解決,參數β可以在model.coef_中找到。根據我們的框架,預測為Logistic Regression

我們可以爭論說,我們可以使用任何將預測縮放到0和1之間的函數,這不完全錯誤。但是並非所有函數都適合,因為最終步驟必須是凸的或凹的以便優化。但S型函數滿足這一要求。

此外,S型函數是唯一使線性回歸框架等同於概率方法的函數。

分類與回歸的結合

到目前為止,我們只談到了回歸,這就是我們所做的。但是你可以在任何統計書中看到,Logistic Regression是一種分類模型。所以我們缺少了什麼?

使用scikit-learn進行回歸預測時,你通常會調用model.predict(X)。如果你對上述的Logistic Regression模型進行這樣的操作,你將得到一組0和1的二元結果,這就是類別。這其實有點誤導。你需要調用的是model.predict_proba(X),這正是我們在Linear Regression框架中定義的預測。由於這些預測在[0,1]區間內連續,它們可以解釋為概率。如果預測接近1,比如0.87,那麼它更可能是1而不是0。因此,使用一個簡單的規則可以將這些預測轉換為二元預測:

pred = (model.predict_proba(X)[:, 1] >= 0.5).astype(int)

這正是LogisticRegression模型的model.predict(X)所做的。顯然,你可以改變0.5的閾值,或者在預測接近0.5時使用未知決策。因此,使用預測值而不是類別。

結論

在這篇文章中,我們展示了如何在不需要概率論知識的情況下推導出Logistic Regression。僅使用Linear Regression框架,我們解釋了約束Linear Regression與Logistic Regression是等價的。概率論通常比經典代數更難理解。通常存在概率方法的替代角度。

Back to Top