tft每日頭條

 > 生活

 > 最小二乘法多元線性回歸推導

最小二乘法多元線性回歸推導

生活 更新时间:2024-09-27 15:16:09

最小二乘法是一種通過數值對曲線函數拟合的一種統計學方法,這裡的最小是拟合誤差達到最小。我們可以根據拟合後的函數可以做一些預測或預報。它在數字信号處理、機器學習等領域廣泛的應用。本文W君将和大家一起學習如何通過最小二乘法進行線性回歸。

我們來用一個最簡單的一元線性回歸模型的例子來理解最小二乘法。在生活中,我們知道人的身高和腳的大小是成正比的,這裡我們假設身高和腳的大小是成一元線性關系的。那麼我們怎麼去建立這樣一個一元線性模型呢?我們從人群中随機抽取幾個身高不同的人,分别測量他們的身高和腳長,假如下面的表格就是我們的統計數據。

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)1

将他們在坐标系上顯示,如下圖,可以看到這些數據是趨近于一條直線的。

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)2

那麼如何拟合這個直線呢?早在1805年勒讓德就提出了最小二乘法。其方法就是根據已知的m個樣本特征值,列出一個目标函數E,并求其最優解,從而使得實際值與預估值達到最小。這裡的目标函數也叫損失函數,它是可以表征回歸模型中估測值和真實值的不一緻程度,其值越小越接近真實情況。它是由若幹個預測值和真實之差的平方和構成,所以我們稱之為最小二乘。

樣本特征值:

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)3

目标函數:

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)4

這裡我們假設拟合函數為:

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)5

這時我們的目标函數就為:

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)6

然後,通過最小二乘法使目标函數最小,求出這時的θ0和θ1的值,就可以得出拟合曲線了。

那麼,問題來了?怎樣讓目标函數最小,求出θ0和θ1這兩個參數呢? 這裡我們有兩種方法,對其進行求解,分别是代數法和矩陣法。

代數法

先高能預警一下,代數法公式看上去比較複雜,讓人看得不免有些枯燥,W君覺得這裡還是有必要列一下,大家隻要理解了就好。代數法的解法就是先分别對θ0和θ1分别求偏導數,然後分别使導數為0,得到一個關于θ0和θ1的方程組,最後解方程組即可。

損失函數對θ0求導,得到方程:

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)7

損失函數對θ1求導,得到方程:

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)8

根據上面兩個方程組成一個二元一次方程組,求解θ0和θ1:

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)9

類似的,對于n元一次方程也需要對每個參數進行求導,得出一個n元一次方程組,并求解出這n個θ參數。

看到這裡一大堆公式是不是已經頭大了?确實W君也覺得讓人頭大,那麼,還有沒有更加簡潔的方法呀?這就是下面我們要學習的矩陣法了。

矩陣法

矩陣解法要比代數法簡潔很多,也是大家比較習慣使用的方法。這裡我們用n元一次函數作為拟合函數來求導矩陣法的公式,推導過程同樣是痛苦的,但是大家最後記住公式就好,我們來看公式推導過程。

拟合函數:

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)10

其矩陣表示如下:

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)11

所以,損失函數:

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)12

在利用矩陣的迹公式得出:

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)13

令上面的公式為0,得出:

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)14

(敲黑闆,這個公式我們一定要記住!!!)

這裡的θ就是我們需要求的參數,不過這裡的是向量形式。

C 實現矩陣法

下面我們用矩陣法求解本文開頭的例子,我們使用表格中的身高和腳長作為樣本數據,再利用開源庫Eigen來實現矩陣運算。關于Eigen的安裝和使用可以參考W君的這篇文章《快速入門矩陣運算——開源庫Eigen》。這裡用到了轉置函數transpose()和求逆函數inverse()。

我們來看一下求解代碼,代碼中利用了矩陣法求θ向量的公式。

#include <iostream> #include "eigen_3_3_7/Eigen/Eigen" int main() { Eigen::MatrixXf X(8,2); Eigen::VectorXf Y(8); Eigen::VectorXf result; X << 155, 1, 159, 1, 163, 1, 169, 1, 175, 1, 179, 1, 184, 1, 188, 1; Y << 18.1, 19.7, 21.2, 24.2, 26.1, 27.8, 30.3, 32.4; result = (X.transpose()*X).inverse() * X.transpose() * Y; std::cout << "------ X ------" << std::endl << X << std::endl; std::cout << "------ Y ------" << std::endl << Y << std::endl; std::cout << "------ result ------" << std::endl << result << std::endl; }

程序計算結果如下,θ向量兩個參數分别為0.425896和-48.0662。所以,我們拟合出的曲線就是 y=0.425896x - 48.0062了 ,是不是很簡單快捷?

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)15

最後,我們可以用Excel驗算下我們的結果,如下圖,拟合出的曲線和我們代碼求出來的是一緻的。

最小二乘法多元線性回歸推導(如何用最小二乘法做線性回歸)16

關于如何使用Excel進行曲線拟合,W君後續計劃将會在Excel技巧裡再為大家詳細介紹,敬請關注。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved