动态

详情 返回 返回

彩筆運維勇闖機器學習--最小二乘法的數學推導 - 动态 详情

前言

今天我們來討論一下回歸算法當中的數學實現。本人數學也是渣,大學時期概率論一直掛到清考才勉強通過,+_+ !!,如今勇闖機器學習,硬着頭皮重新學習了微積分和線代,也是為了記錄自己最近的狀態,避免過段時間忘記了。描述的時候有不周全的地方,請各位大佬們多擔待了

本節將會運用一些數學知識來解釋一下相關的迴歸算法的合理性,雖有些枯燥,但知其然也知其所以然,多瞭解一些總是好的

最小二乘法

最小二乘法的核心思想是找到一組參數,使得模型預測值與實際觀測值之間的誤差平方和最小。最小二乘法是迴歸模型中非常常用的計算迴歸係數的方法:

\[\text{f} = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \]

其中\(y_i\)是真實值,\(\hat{y}_i\)是預測值

推導過程

先用最簡單的一元線性迴歸,一元線性迴歸的數學模型為:

\[\hat{y_i}=β_0+β_1x_i \]

帶入公式:

\[\text{f} = \sum_{i=1}^{n} (y_i - (β_0+β_1x_i))^2 = \sum_{i=1}^{n} (y_i - β_0 - β_1x_i)^2 \]

由於要討論的是\(β_0\)\(β_1\),這是一個多變量函數,為了研究單獨變量,可以分別對其求偏導

\[\frac{\partial f}{\partial β_0} = (\sum_{i=1}^{n} (y_i - β_0 - β_1x_i)^2)' \]

首先,有限個數的求和之後的導數=有限個數導數之後求和,把\((y_i - β_0 - β_1x_i)^2\)看成一個整體

\[\frac{\partial f}{\partial β_0} = \sum_{i=1}^{n} ((y_i - β_0 - β_1x_i)^2)' \]

這是複合函數求導,那就來個剝洋葱法則,先對平方求導,再對加法求導

\[\frac{\partial f}{\partial β_0} = \sum_{i=1}^{n} 2(y_i - β_0 - β_1x_i)⋅(y_i - β_0 - β_1x_i)' \]

由於是對\(β_0\)求導,其餘可認為是常數,求導為0

\[\frac{\partial f}{\partial β_0} = \sum_{i=1}^{n} 2(y_i - β_0 - β_1x_i) ⋅ -1 =-2\sum_{i=1}^{n} β_0(y_i - β_0 - β_1x_i) \]

導數是函數切線的斜率,要找到函數的最小值,就是其導數為0的地方

\[\frac{\partial f}{\partial β_0}=-2\sum_{i=1}^{n} (y_i - β_0 - β_1x_i)=0 \]

整理一下:

\[\sum_{i=1}^{n} (y_i - β_0 - β_1x_i)=\sum_{i=1}^{n}y_i - \sum_{i=1}^{n}β_0 - \sum_{i=1}^{n}β_1x_i=0 \]

方程1: $$\sum_{i=1}^{n}y_i = nβ_0 + β_1⋅\sum_{i=1}^{n}x_i$$

同理對\(β_1\)求偏導

\[\frac{\partial f}{\partial β_1} = \sum_{i=1}^{n} 2(y_i - β_0 - β_1x_i) ⋅ -x_i =0 \]

整理一下:

\[\sum_{i=1}^{n} 2(y_i - β_0 - β_1x_i) ⋅ -x_i=-2(\sum_{i=1}^{n} x_iy_i-\sum_{i=1}^{n}β_0x_i-\sum_{i=1}^{n}β_1x_i^2)=0 \]

方程2:

\[\sum_{i=1}^{n} x_iy_i = β_0⋅\sum_{i=1}^{n}x_i+β_1⋅\sum_{i=1}^{n}x_i^2 \]

我們將樣本數據\((x_i, y_i)\)求平均值,就是樣本均值

\[\bar{x}=\frac{1}{n}\sum_{i=1}^{n}x_i \]

\[\bar{y}=\frac{1}{n}\sum_{i=1}^{n}y_i \]

帶入方程1:

\[\bar{y} = β_0 + β_1\bar{x} \]

\(β_0\)帶入方程2計算\(β_1\)

\[\sum_{i=1}^{n} x_iy_i = (\bar{y} - β_1\bar{x})⋅\sum_{i=1}^{n}x_i+β_1⋅\sum_{i=1}^{n}x_i^2 = n\bar{x}\bar{y}-nβ_1\bar{x}^2+β_1⋅\sum_{i=1}^{n}x_i^2 \]

\[\sum_{i=1}^{n} x_iy_i - n\bar{x}\bar{y} = β_1(-n\bar{x}^2+\sum_{i=1}^{n}x_i^2) \]

\[β_1=\frac{\sum_{i=1}^{n} x_iy_i - n\bar{x}\bar{y}}{\sum_{i=1}^{n}x_i^2-n\bar{x}^2} \]

經過漫長的推導:

\[β_1=\frac{\sum_{i=1}^{n} x_iy_i - n\bar{x}\bar{y}}{\sum_{i=1}^{n}x_i^2-n\bar{x}^2} \]

\[β_0 = \bar{y} - β_1\bar{x} \]

小結

通過最小二乘法,一步一步計算出截距與迴歸係數的公式,這其中用到的數學知識主要有:多元函數求偏導、導數的計算

多元迴歸下的最小二乘法

推導過程

多元線性迴歸的數學模型:

\[y = β_0 + β_1x_1 + β_2x_2 + \dots + β_nx_n \]

相比於一元迴歸的最小二乘法,多元迴歸可謂有一點複雜,因為特徵數量的增加,帶來的樣本與特徵的快速上升

比如有3個樣本,2個特徵,記為:\(y = β_0 + β_1x_1 + β_2x_2\)

\[x^{(1)} = [1,2] \]

\[x^{(2)} = [3,4] \]

\[x^{(3)} = [5,6] \]

用矩陣表達:

\[X=\begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix} \]

假設有m個特徵,n個樣本

\[\hat{y}_i = β_0 + β_1x_1^{(1)} + β_2x_2^{(1)} + \dots + β_nx_n^{(1)} \]

\[\hat{y}_i = β_0 + β_1x_1^{(2)} + β_2x_2^{(2)} + \dots + β_nx_n^{(2)} \]

\[... \]

\[\hat{y}_i = β_0 + β_1x_1^{(m)} + β_2x_2^{(m)} + \dots + β_nx_n^{(m)} \]

\[X=\begin{bmatrix} 1 & x_1^{(1)} & x_2^{(1)} & \dots & x_n^{(1)} \\ 1 & x_1^{(2)} & x_2^{(2)} & \dots & x_n^{(2)} \\ ... \\ 1 & x_1^{(m)} & x_2^{(m)} & \dots & x_n^{(m)} \\ \end{bmatrix} \]

\[β=\begin{bmatrix} β_0 \\ β_1 \\ ... \\ β_n \\ \end{bmatrix} \]

所以通過矩陣的點積,可以將公式改寫為,在m個特徵,n個樣本下:

\[\hat{y}_i=Xβ \]

帶入最小二乘法公式:

\[\text{f} = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 = \sum_{i=1}^{n} (y_i - Xβ)^2 = \| {y_i} - Xβ \|_2 = (y_i - Xβ)^T(y_i - Xβ) \]

展開矩陣:

\[(y_i - Xβ)^T(y_i - Xβ) = y_i^Ty_i-y_i^TXβ-X^Tβ^Ty_i+X^Tβ^TXβ \]

由於 \(y_i^TXβ\) 的轉置矩陣就是 \(X^Tβ^Ty_i\)

\[= y_i^Ty_i-2X^Tβ^Ty_i+X^Tβ^TXβ \]

為了找到β最小值,先求導然後令導數為0

\[\frac{\partial f}{\partial β} = (y_i^Ty_i-2X^Tβ^Ty_i+X^Tβ^TXβ)' = -2X^Ty_i+2X^TXβ = 0 \]

=>

\[X^Ty_i=X^TXβ \]

兩邊同時乘以\(X^TX\)逆矩陣,換句話説,\(X^TX\)是可逆矩陣:

\[β=(X^TX)^{-1}X^Ty_i \]

小結

這其中用到的數學知識主要有:導數、矩陣等方面的知識

用MathJax語法寫公式真的太費勁了!還不如在紙上手寫

聯繫我

  • 聯繫我,做深入的交流


至此,本文結束
在下才疏學淺,有撒湯漏水的,請各位不吝賜教...

Add a new 评论

Some HTML is okay.