機器學習之LR算法理論和實戰(理論篇)


1. LR算法簡述

LR 全稱Logistic Regression,我們喜歡稱她為邏輯回歸或者邏輯斯蒂克回歸,是傳統機器學習中的最簡單的最常用的分類模型。總之,LR算法簡單、高效、易於並行且在線學習的特點,在工業界具有非常廣泛的應用。在線學習指得是:可以利用新的數據對各個特征的權重進行更新,而不需要重新利用歷史數據訓練。
LR適用於各項廣義上的分類任務,,如:評論信息正負情感分析(二分類)、用戶點擊率(二分類)、用戶違約信息預測(二分類)、用戶等級分類(多分類 )等場景;
實際開發中,一般針對該類任務首先都會構建一個基於LR的模型作為Baseline Model,實現快速上線,然后在此基礎上結合后續業務與數據的演進,不斷的優化改進。

2. 符號約定

本文 行向量 都是 \(W^T\) \(X_i^{T}\), 都是加了T; 列向量 都是 \(W\), \(X_i\),\(Y_i\),\(y_i\),\(x_i\),都不加T,也有例外,如\(Y=(Y_1,Y_2,...,Y_m)\)則是行向量,反正這違反這一約定的情況下,一定會在旁邊說明

3. LR的理論基礎

主要用於二分類算法,不妨用 1 0 表示兩個類

sigmoid函數

不妨記sigmoid 為 \(\sigma\)
sigmoid 函數圖像:

\[sigmoid(x) = \sigma(x)= \frac{1}{1 + e^{-x}} \]

sigmoid 導函數圖像:

\[sigmoid^{'}(x) = \sigma^{'}(x)= \sigma(x)(1 - \sigma(x)) \]

注意到sigmoid函數一下性質:(W表示列向量,\(W^T\)表示行向量)
(1) \(\sigma(0) = \frac{1}{2}\);
(2) sigmoid函數關於點(0,\(\frac{1}{2}\))對稱,故存在\(\sigma(x) + \sigma(-x) = 1\)
(2) \(\sigma\)函數為當趨近於-6時,y趨於0,當sigmoid函數趨於6時,y趨於1;
(3) \(\sigma^{'}(x) = \sigma(x)(1 - \sigma(x))\)
(4) sigmoid導函數為偶函數,且恆大於0;

3.1 LR算法

對於一個樣本,記為\((X_{i},Y_{i})\),\(Y_{i}\)取0或1.\(X_{i}=<1,x_1,x_2,...x_n>\),參數\(W=<w_0,w_1,w_2,...,w_n>\)
\(w_0 + w_1 \times x_1 + w_2 \times x_2 + ... + w_n \times x_n\) = \(W^T \times X\)
\(\hat{Y} = \sigma(W^T \times X)\)
\(\hat{Y} < 0.5\) 分為負類 0;
\(\hat{Y} > 0.5\) 分為正類 1;
利用極大似然估計(如果發生,就讓其發生的可能最大),LR的目標函數為:
\(\hat{Y_{i}} = 1\)時:

\[\hat{Y_{i}} = P(Y_{i} = 1 | X;W) (1) \]

\(\hat{Y_{i}} = 0\)時:

\[\hat{Y_{i}} = 1 - P(Y_{i} = 1 | X;W) (2) \]

故綜合(1)(2)式子得:

\[\hat{Y_{i}} = P(Y_{i} | X_{i};W) = (P(Y_{i} = 1 | X_{i};W))^{y_{i}}(1 - P(Y_{i} = 1| X_{i};W))^{(1 - Y_{i})} (3) \]

  • 注:
    因為,預測值\(Y_{i}\)只有兩種可能,0 或者 1.
    所以,當 \(Y_{i} = 0\)時:

\[(3)式 = \hat{Y_{i}} = P(Y_{i} | X_{i};W) = (1 - P(Y_{i} = 1| X_{i};W)) = P(Y_{i} =0 | X_{i};W) \]

\(Y_{i} = 1\)時:

\[(3)式 = \hat{Y_{i}} = P(Y_{i} | X_{i};W) = (P(Y_{i} = 1 | X_{i};W)) \]

故(3)式是(1)(2)兩種情況統一寫法。

不仿令\(h_{W}(X_i) = \hat{Y} = P(Y_{i} | X_{i};W)\),故所有樣本的損失函數為:

\[L(W) = \prod_{i}^{m} (h_{W})^{Y_i}(1 - h(W))^{1 - Y_i} (4) \]

這個是模型已知,求參數,使得L(W)最大,對等式(4)取log,不影響 W 的取值,故可以等價於 :

\[(4)式 = J(W) = \sum_{i}^{m} Y_{i}log(h_{W}(X_i)) + (1 - Y_{i})log(1 - h_W(X_i)) \]

即為:

\[J(W) = \sum_{i}^{m} Y_{i}log(\sigma(W^TX_{i})) + (1 - Y_{i})log(1 - \sigma(W^TX_{i})) (5) \]

注意,這里 \(h_{w}(X_{i})\)\(\hat{Y_{i}}\) 是預測值, 而 \(Y_{i}\)是樣本中打得標簽,已知的哦,千萬不要混淆。

(4)式子為最終需要的損失函數,下面利用隨機梯度下降法,更新參數,
易得:標量對向量的求導參見:https://www.cnblogs.com/pinard/p/10750718.html

\[(5)式 = \frac{\partial{J}}{\partial{W}} = \sum_{i}^{m}(Y_i \frac{1}{\sigma(W^T X_i)} \sigma(W^T X_i)(1 - \sigma(W^T X_i)) \frac{\partial{W^T X_i}}{\partial{W}} - (1- Y_i) \frac{1}{1 - \sigma{W^T X_i}} \sigma(W^T X_i)(1 - \sigma(W^T X_i)) \frac{\partial{W^T X_i}}{\partial{W}} ) \]

\[(5)式 = \frac{\partial{J}}{\partial{W}} = \sum_{i}^{m}(Y_i (1 - \sigma(W^T X_i)) \frac{\partial{W^T X_i}}{\partial{W}} - (1- Y_i) \sigma(W^T X_i) \frac{\partial{W^T X_i}}{\partial{W}} ) \]

特別地:

\[\frac{\partial{W^T X_i}}{\partial{W}} = X_i \]

\[(5)式 = \frac{\partial{J}}{\partial{W}} = \sum_{i}^{m}(Y_i (1 - \sigma(W^T X_i)) X_i - (1- Y_i) \sigma(W^T X_i) X_i ) \]

\[\frac{\partial{J}}{\partial{W}} = \sum_{i}^{m}((Y_{i} - \sigma(W^TX)) X_{i}) (6) \]

\[(6)式 = \frac{\partial{J}}{\partial{W}} = \sum_{i}^{m}((Y_{i} - \hat{Y_{i}}) X_i) (7) \]

故參數更新公式得:

\[W_{i+1} = W_{i} - \alpha \sum_{i}^{m}((Y_{i} - \hat{Y_{i}}) X_{i}) \]

其中 \(\alpha\)是學習率,取正數,需要我們手動設定。

3.2 LR算法訓練過程(偽代碼描述)

  • 初始化參數 \(W_{0}\) ,\(\alpha\),初始化預估訓練輪數 epoch
  • 向量化(不使用用for,for不利於cuda並行化):
    \(X = [X_1,X_2,...X_m]\), \(Y = (Y_1,Y_2,...Y_m)\) 其中 \(Y_i\) 取 0 或者 1故,Y就是行向量

for i=0 to epoch:
\(\qquad step1: A = \hat{Y} = \sigma(W_{i}^T \times X)\) 說明: 其中A是行向量。
\(\qquad step2: log(A)\) , \(log(1 - A)\) 說明: 其中(1-A)是標量1減去行向量A,用到了編程語言的廣播機制, 注意log(A) log(1 - A) 是行向量哦。
\(\qquad step3: J(W) = Y (log (A)^T) + (1 - Y)(log(1 - A)^T)\) 說明:注意這里的Y是行向量,其中 1- A是標量1減去行向量A,用到了編程語言的廣播機制,特別地,這里的Y,1 - Y都是行向量,和符號規定有點出入。
\(\qquad step4: dW = \frac{\partial{J}}{\partial{W}} =(Y - \hat{Y}) X^T\)
\(\qquad step5: W_{i} = W_{i-1} + \alpha dW\) 說明:\(\alpha\) 統一設置為正數, 梯度上升求最大值
當達到一定准確率,或者其他性能指標時,停止訓練,保存\(W_{i}\)值,即為\(W_f\),解可得訓練的最終模型為:

\[\sigma(X) = \frac{1}{W_f^T X} \]

\(\sigma(X) > 0.5\) ,預測Y 為 1;反之,預測Y為0.

對於step3的解釋:
我們將\(J(W) = \sum_{i}^{m} Y_{i}log(\sigma(W^TX_{i})) + (1 - Y_{i})log(1 - \sigma(W^TX_{i})) (5)\) 中的 \(\sum_{i} ^{m}\)向量化了,不然需要寫個for,不利於cuda並行。

\[J(W) = Y (log (A)^T) + (1 - Y)(log(1 - A)^T) \]

\[ = (Y_1,Y_2,...Y_m) \begin{bmatrix} log(a_1) \\ log(a_2) \\ ...\\ log(a_m) \end{bmatrix} + (1 - Y_1, 1 - Y_2,...,1 - Y_m) \begin{bmatrix} log(1 - a_1) \\ log(1 - a_2) \\ ...\\ log(1 - a_m) \\ \end{bmatrix} \]

\[= \sum_{i}^{m} Y_{i}log(\sigma(W^TX_{i})) + (1 - Y_{i})log(1 - \sigma(W^TX_{i})) \]

其中 \(a_i = \sigma(W_i^T X_i)\)

對於step4的解釋:
我們將\((6)式 = \frac{\partial{J}}{\partial{W}} = \sum_{i}^{m}((Y_{i} - \hat{Y_{i}}) X_i) (7)\) 中的 \(\sum_{i} ^{m}\)向量化了。其中 \((Y - \hat{Y})\) X^T,可以寫成:

\[\begin{pmatrix} Y_1 -\hat{Y_1} & Y_2 -\hat{Y_2} & ... & Y_m -\hat{Y_m} \end{pmatrix} \begin{bmatrix} X_1 \\ X_2 \\ ... \\ X_m \\ \end{bmatrix} (8)\]

即為:

\[(Y_1 - \hat{Y_1}) X_i + (Y_2 - \hat{Y_2}) X_i + ...+ (Y_m - \hat{Y_m}) X_m (9) = \sum_{1}^{m}(Y_i- \hat{Y_{i}}) X_{i}\]

4. 參考文獻

[1] https://www.jianshu.com/p/dce9f1af7bc9
[2] https://www.cnblogs.com/pinard/p/10750718.html(標量對矩陣的求導)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM