在繼續學習 GBDT(Gradient Boosting Decision Tree) 決策樹前,我們需要先來了解下邏輯回歸算法(Logistic Regression),因為 GBDT 較為複雜,但在邏輯回歸的基礎上,了解起來會容易些。
邏輯回歸是機器學習中最為基礎的算法,也是工業界使用得最多的算法之一,究其原因,在于其簡單、高效以及實用。
雖然線性回歸也很簡單,但卻不實用,是因為邏輯回歸本質上是一個機率模型,在實際應用中,預測一個 0-1 之間的機率值要比預測一個實數的場景要多得多,比如在廣告業務中,我們往往求的是使用者點選一條廣告的機率。
邏輯回歸是一個機率模型,但通過一定的轉換,我們依然可以把該模型的預測範圍從 0-1 轉換到實數範圍,是以它和線性回歸都可以被歸納到「通用的線性模型」(Generalized Linear Model)中,要了解這種轉換,我們需要引入一個概念:odds 和 log(odds)。

odds 和 log(odds)
odds 是幾率、勝算的意思,據維基百科記載,這個概念主要在賭博和統計學領域中使用,且它的曆史可以追溯到 16 世紀,早于機率論的發展時期。
odds 很容易了解,拿足球比賽作為例子,假設中國隊打巴西隊,中國隊的赢面是 1,輸面是 99,那麼中國隊赢的 odds 為 1/99,輸的 odds 就是 99,odds 和機率的差別也很容易通過這個例子看出來,從機率的角度講,中國隊赢巴西隊的機率為 0.01,輸的機率為 0.99。
上面的例子還可以看出,中國隊赢的 odds 和巴西隊赢的 odds 落在不同的取值範圍中,中國隊赢的 odds 的落在 (0,1) 區間,而巴西隊落在 (1,∞) 區間;也就是說,中國隊和巴西隊比賽,兩個隊伍的輸赢程度應該是相等的,但 1/99 和 99 這兩個數,它們的尺度不同,就很難對此做出直覺的判斷;而 log(odds) 就是用來解決該問題的:
中國隊赢 | 巴西隊赢 | |
---|---|---|
odds | 1/99 | 99 |
log(odds) | -4.60 | 4.60 |
可以看到,對 odds 加了 log 後,中國隊赢和巴西隊赢這兩種情況的 log(odds) 的絕對值都是 4.6,即兩者的輸赢程度相同,一眼就可以看出來;且當我們算赢面的 log(odds) 時,通過正負号就可以判斷赢面多還是赢面少,如 -4.6 就表示中國隊的赢面是少的;此外,當 log(odds) 為 0 時,赢面和輸面一樣多。
log(odds) 是一個很有用的名額,你可以寫一個程式,不斷産生 0-100 之間的随機數 $x$,然後把 $x$ 對應的 $\log(\frac{x}{100-x})$ 用柱狀圖畫出來,你會發現它符合正态分布:
在實際應用中,我們可以把上面的 $x$ 替換為某個網站的點選,或購買等名額,根據曆史資料算出對應的 log(odds) 分布,再找一堆相關的特征來拟合這個分布,這就是我們所說的 CTR(Click Through Ratio)或 CVR(Conversion Rate) 模型,後續來了一個使用者,我們把他相關的特征帶入到模型中,算出相應的 log(odds),就是這個使用者會點選或購買某個商品的幾率。
至此,有同學會問,這和邏輯回歸有什麼關系?實際上,log(odds) 還有一種計算方法:
$$
\log(odds) = \log(\frac{p}{1-p})
其實也很容易了解,依然是上面的例子,中國隊勝利的機率為 p=0.1,中國隊勝利的 log(odds) 為
\begin{aligned}
\log(odds) &= \log(\frac{1}{99}) \\&= \log(\frac{\frac{1}{100}}{\frac{99}{100}}) \\&= \log(\frac{\frac{1}{100}}{1-\frac{1}{100}}) \\&=\log(\frac{p}{1-p})
\end{aligned}
我們把等式兩邊同時求一個 $e$ 次方,算出 p 值,即
p &= \frac{e^{\log(odds)}}{1+e^{\log(odds)}} \\&= \frac{1}{1+e^{-\log(odds)}}
這就是我們所熟知的邏輯回歸,等式右邊的表達式通常被稱為 sigmoid 函數,而 log(odds) 又被稱為 logit 函數,它們之間的轉換關系如下圖所示,其中 x 可看成特征向量。
從圖中可以看出,如果把邏輯回歸轉化為 log(odds),有兩點明顯的變化:
- log(odds) 是一條直線
- log(odds) 可以将邏輯回歸的值域從 (0, 1) 拓寬到 (-∞, +∞)
突然有點像線性回歸了,但和線性回歸的差異是,邏輯回歸的樣本隻有 0 和 1 兩種取值,轉換為 log(odds) 正好是 -∞ 和 +∞,這樣你使用 MSE 來拟合時,得到的 Loss 永遠都是個無窮大,是以用線性回歸的方法來拟合邏輯回歸是不可行的。在邏輯回歸中,我們使用 Maximu Likelihood 來作為模型的 Loss。
Maximum Likelihood
Maximum Likelihood(最大釋然估計)也是很直覺的一個概念,即我現在有一堆正樣本和負樣本,我用一條怎樣的邏輯回歸曲線去拟合這些樣本,能使它們所得到機率的乘積最大。
舉個例子,假設下圖左邊是一個關于體重和肥胖的實驗資料,其中綠色點标記的是正常,而紅色點為肥胖,現在要使用邏輯回歸對這些樣本模組化,假設最佳模型如下圖右邊所示:
通過該模型的計算,假設綠色樣本對應的肥胖的機率由左至右分别為 0.01、0.02、0.03 和 0.9,綠色是正常樣本,需要計算他們不是肥胖的機率,是以要用 1 減去這些值,即: 0.99、0.98、0.97 和 0.1;同理,再分别計算紅色樣本是肥胖的機率為 0.1、0.97、0.98 和 0.99,因為該曲線已經是最優的了,是以這 8 個點所對應的機率的乘積——0.0089,即是所有可能的模型中,能得到的最大值。可見,Maximum Likelihood 真的就隻是其字面意思了。
線性回歸中,我們使用 MSE 來衡量線性模型的好壞,MSE 越小,說明拟合得越好;而在邏輯回歸中,使用的正是 Maximum Likelihood,該名額越大,模型越好。
對于樣本 $x_i$,當它為正樣本時,對應的機率為 $p(x_i)$,而當它為負樣本時,對應的機率為 $1-p(x_i)$,為友善計算,我們需要隻用一個式子來表示這兩種情況:
p_i = y_i\cdot p(x_i) + (1-y_i)\cdot (1-p(x_i))
這裡 y 表示樣本的取值,因為 y 隻有兩種取值,0 和 1,當 y 為正樣本 1 時,帶入上式得 $p_i=p(x_i)$,而當 y 為負樣本 0 時,帶入上式得 $p_i=1-p(x_i)$,于是每個樣本的機率的表現形式得到了統一,這樣總的 Likelihood 就很好表示了:
{\arg\max} L(\theta) &= \prod_{i=1}^{n}p_i \\
&= \prod_{i=1}^{n}[y_i\cdot p(x_i) + (1-y_i)\cdot (1-p(x_i))]
上式中,n 表示有 n 條樣本,下标 i 表示第 i 條樣本,x 為特征向量,y 為觀察到的目标值,$\theta$ 為特征向量的權重,也是模型的參數,L 即為所有樣本的 Likelihood,也是邏輯回歸中的 Loss 函數,我們的目标是調整 $\theta$, 以使 L 最大。
通常我們會把連乘通過 log 轉換為求和,并取負号,把求最大值轉換為求最小值,如下:
\arg\min (-\log(L(\theta))) &= -\sum_{i=1}^{n}\log(p_i) \\
&= -\sum_{i=1}^{n}[y_i\cdot \log(p(x_i)) + (1-y_i)\cdot \log((1-p(x_i)))]
接下來就是對 Loss 求梯度了,然後根據梯度來修改參數,并不斷疊代收斂的過程,為了減少大家閱讀時的不适感,這裡就不繼續推導了, 不過沒有推導過的同學,還是建議自己在草稿上演算一下,可加深自己的了解。
邏輯回歸和貝葉斯分類
貝葉斯分類的核心依然來自于經典的貝葉斯公式:
p(c|x) = \frac{p(x|c)p(c)}{p(x|c)p(c)+p(x|\bar{c})p(\bar{c})}
在分類問題中,我們要求的實際上是當樣本 x 出現時,它屬于分類 c 的機率,即上式的 p(c|x)。等式右邊的 $\bar{c}$ 表示為 c 之外的其他分類,p(c) 和 $p(\bar{c})$ 可以了解為先驗機率,一般情況下你可以把它們設定為均等的,如我們可以把二分類的先驗機率都設為 0.5。
接着,p(x|c) 可表示為在 c 分類中觀察到 x 樣本出現的機率,同理,$p(x|\bar{c})$ 則為在 $\bar{c}$ 分類中觀察到 x 樣本出現的機率。于是,p(c|x) 就是一個後驗機率。
了解了貝葉斯分類後,我們把等式右邊的分子分母同時除以 $p(x|c)p(c)$,如下:
p(c|x) = \frac{1}{1+\frac{p(x|\bar{c})p(\bar{c})}{p(x|c)p(c)}}
到此,這個式子是不是像極了 sigmoid 函數,我們設:
e^{-z} = \frac{p(x|\bar{c})p(\bar{c})}{p(x|c)p(c)}
再設先驗機率相等,同時在等式兩邊取 log,便得到:
-z = \log(\frac{p(x|\bar{c})}{p(x|c)})
将負号移到右邊:
z=\log(\frac{p(x|c)}{p(x|\bar{c})}) = \log(odds)
最後将 z 帶回原式:
p(c|x) = \frac{1}{1+e^{-\log(odds)}}
結論是,邏輯回歸實際上就是貝葉斯分類,它們都是一個後驗機率模型。
總結
本文我們主要通過 log(odds) 和貝葉斯分類這兩個概念來學習了邏輯回歸算法的原理,且了解了邏輯回歸是采用 Maximum Likelihood 來作為其損失函數的,希望你和我一樣,通過本文能夠對邏輯回歸有更深刻的了解。
參考:
- Logistic Regression, Clearly Explained
- Classification
- [Logistic Regression]( https://www.youtube.com/wat ch?v=hSXFuypLukA&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49&index=11&t=0s)