前言
今天我們來討論一下回歸算法當中的數學實現。本人數學也是渣,大學時期概率論一直掛到清考才勉強通過,+_+ !!,如今勇闖機器學習,硬着頭皮重新學習了微積分和線代,也是為了記錄自己最近的狀態,避免過段時間忘記了。描述的時候有不周全的地方,請各位大佬們多擔待了
本節將會運用一些數學知識來解釋一下相關的迴歸算法的合理性,雖有些枯燥,但知其然也知其所以然,多瞭解一些總是好的
最小二乘法
最小二乘法的核心思想是找到一組參數,使得模型預測值與實際觀測值之間的誤差平方和最小。最小二乘法是迴歸模型中非常常用的計算迴歸係數的方法:
\[\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語法寫公式真的太費勁了!還不如在紙上手寫
聯繫我
![]()
至此,本文結束
在下才疏學淺,有撒湯漏水的,請各位不吝賜教...