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

2022-09-16 21:12:26 字數 4401 閱讀 6833

本文 行向量 都是 \(w^t\)

\(x_i^\), 都是加了t; 列向量 都是 \(w\), \(x_i\),\(y_i\),\(y_i\),\(x_i\),都不加t,也有例外,如\(y=(y_1,y_2,...,y_m)\)則是行向量,反正這違反這一約定的情況下,一定會在旁邊說明

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

不妨記sigmoid 為 \(\sigma\)

sigmoid 函式影象:

\]sigmoid 導函式影象:

\]注意到sigmoid函式一下性質:(w表示列向量,\(w^t\)表示行向量)

(1) \(\sigma(0) = \frac\);

(2) sigmoid函式關於點(0,\(\frac\))對稱,故存在\(\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;

對於乙個樣本,記為\((x_,y_)\),\(y_\)取0或1.\(x_=<1,x_1,x_2,...x_n>\),引數\(w=\)

\(w_0 + w_1 \times x_1 + w_2 \times x_2 + ... + w_n \times x_n\) = \(w^t \times x\)

\(\hat = \sigma(w^t \times x)\)

當 \(\hat < 0.5\) 分為負類 0;

當 \(\hat > 0.5\) 分為正類 1;

利用極大似然估計(如果發生,就讓其發生的可能最大),lr的目標函式為:

當\(\hat} = 1\)時:

\[\hat} = p(y_ = 1 | x;w) (1)

\]當\(\hat} = 0\)時:

\[\hat} = 1 - p(y_ = 1 | x;w) (2)

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

\[\hat} = p(y_ | x_;w) = (p(y_ = 1 | x_;w))^}(1 - p(y_ = 1| x_;w))^)} (3)

\]\[(3)式 = \hat} = p(y_ | x_;w) = (1 - p(y_ = 1| x_;w)) = p(y_ =0 | x_;w)

\]當\(y_ = 1\)時:

\[(3)式 = \hat} = p(y_ | x_;w) = (p(y_ = 1 | x_;w))

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

不仿令\(h_(x_i) = \hat = p(y_ | x_;w)\),故所有樣本的損失函式為:

\[l(w) = \prod_^ (h_)^(1 - h(w))^ (4)

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

\[(4)式 = j(w) = \sum_^ y_log(h_(x_i)) + (1 - y_)log(1 - h_w(x_i))

\]即為:

\[j(w) = \sum_^ y_log(\sigma(w^tx_)) + (1 - y_)log(1 - \sigma(w^tx_)) (5)

\]注意,這裡 \(h_(x_)\) 為 \(\hat}\) 是**值, 而 \(y_\)是樣本中打得標籤,已知的哦,千萬不要混淆。

(4)式子為最終需要的損失函式,下面利用隨機梯度下降法,更新引數,

易得:標量對向量的求導參見:

\[(5)式 = \frac}} = \sum_^(y_i \frac \sigma(w^t x_i)(1 - \sigma(w^t x_i)) \frac}} - (1- y_i) \frac} \sigma(w^t x_i)(1 - \sigma(w^t x_i)) \frac}} )

\]\[(5)式 = \frac}} = \sum_^(y_i (1 - \sigma(w^t x_i)) \frac}} - (1- y_i) \sigma(w^t x_i) \frac}} )

\]特別地:

\[\frac}} = x_i

\]\[(5)式 = \frac}} = \sum_^(y_i (1 - \sigma(w^t x_i)) x_i - (1- y_i) \sigma(w^t x_i) x_i )

\]\[\frac}} = \sum_^((y_ - \sigma(w^tx)) x_) (6)

\]\[(6)式 = \frac}} = \sum_^((y_ - \hat}) x_i) (7)

\]故引數更新公式得:

\[w_ = w_ - \alpha \sum_^((y_ - \hat}) x_)

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

for i=0 to epoch:

\(\qquad step1: a = \hat = \sigma(w_^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}} =(y - \hat) x^t\)

\(\qquad step5: w_ = w_ + \alpha dw\) 說明:\(\alpha\) 統一設定為正數, 梯度上公升求最大值

當達到一定準確率,或者其他效能指標時,停止訓練,儲存\(w_\)值,即為\(w_f\),解可得訓練的最終模型為:

\[\sigma(x) = \frac

\]當 \(\sigma(x) > 0.5\) ,**y 為 1;反之,**y為0.

對於step3的解釋:

我們將\(j(w) = \sum_^ y_log(\sigma(w^tx_)) + (1 - y_)log(1 - \sigma(w^tx_)) (5)\) 中的 \(\sum_ ^\)向量化了,不然需要寫個for,不利於cuda並行。

\[j(w) = y (log (a)^t) + (1 - y)(log(1 - a)^t)

\]\[ = (y_1,y_2,...y_m)

\begin

log(a_1) \\

log(a_2) \\

...\\

log(a_m)

\end

+ (1 - y_1, 1 - y_2,...,1 - y_m)

\begin

log(1 - a_1) \\

log(1 - a_2) \\

...\\

log(1 - a_m) \\

\end

\]\[= \sum_^ y_log(\sigma(w^tx_)) + (1 - y_)log(1 - \sigma(w^tx_))

\]其中 \(a_i = \sigma(w_i^t x_i)\)

對於step4的解釋:

我們將\((6)式 = \frac}} = \sum_^((y_ - \hat}) x_i) (7)\) 中的 \(\sum_ ^\)向量化了。其中 \((y - \hat)\) x^t,可以寫成:

\[\begin

y_1 -\hat & y_2 -\hat & ... & y_m -\hat

\end

\begin

x_1 \\

x_2 \\

... \\

x_m \\

\end

(8)\]

即為:\[(y_1 - \hat) x_i + (y_2 - \hat) x_i + ...+ (y_m - \hat) x_m

(9) = \sum_^(y_i- \hat}) x_\]

[1]

[2] (標量對矩陣的求導)

機器學習演算法之LR

說起lr要從極大似然估計說起 1 極大似然估計 講的比較好 2 lr模型 回歸是一種極易理解的模型,就相當於y f x 表明自變數x與因變數y的關係。最常見問題有如醫生治病時的望 聞 問 切,之後判定病人是否生病或生了什麼病,其中的望聞問切就是獲取自變數x,即特徵資料,判斷是否生病就相當於獲取因變數...

機器學習實戰之K 近鄰演算法(KNN)(一)理論

knn是k nearest neighbor的簡寫,直譯為k 近鄰演算法。顧名思義,找到最近的k個資料,在前k個資料中選擇佔比最高的類別作為 類別。如 分類的例子,可以分為軍事 和網遊 軍事 的以戰爭描寫為主,網遊 以網路遊戲描述為主。假設一本沒看過的 假設這本 是軍事 和網遊 之一 我們使用k 近...

機器學習實戰之knn演算法

程式 author xiaoyun from numpy import import operator def createdataset group array 1.0,0.9 1.0,1.0 0.1,0.2 0.0,0.1 labels a a b b return group,labels d...