日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

监督学习 | 线性回归 之多元线性回归原理及Sklearn实现

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 监督学习 | 线性回归 之多元线性回归原理及Sklearn实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1. 線性回歸
    • 1.1 基本形式
    • 1.2 成本函數
  • 2. w 的計算方式
    • 2.1 標準方程法
      • 2.1.1 普通形式
      • 2.1.2 向量形式
      • 2.1.3 Python 實現
      • 2.1.4 計算復雜度
    • 2.2 梯度下降法
      • 2.2.1 梯度下降原理
      • 2.2.2 Python 實現
  • 3. Sklearn 實現
  • 參考資料

相關文章:

機器學習 | 目錄

機器學習 | 回歸評估指標

監督學習 | 非線性回歸 之多項式回歸原理及Sklearn實現

監督學習 | 線性回歸 之正則線性模型原理及Sklearn實現

監督學習 | 線性分類 之Logistic回歸原理及Sklearn實現

1. 線性回歸

線性回歸,又稱普通最小二乘法(Ordinary Least Squares, OLS),是回歸問題最簡單也最經典的線性方法。線性回歸需按照參數 w 和 b,使得對訓練集的預測值與真實的回歸目標值 y 之間的均方誤差(MSE)最小。

均方誤差(Mean Squared Error)是預測值與真實值之差的平方和除以樣本數。

線性回歸沒有參數,這是一個優點,但也因此無法控制模型的復雜度。

1.1 基本形式

線性回歸預測模型:

(1)f(x)=w1x1+w2x2+???+wnxn+bf(x)=w_1 x_1 + w_2 x_2 + \cdot \cdot \cdot + w_n x_n + b \tag{1}f(x)=w1?x1?+w2?x2?+???+wn?xn?+b(1)

  • f(x)f(x)f(x) 是預測值

  • nnn 是特征的數量

  • xix_ixi? 是第 iii 個特征值

  • 偏置項 bbb 以及特征權重 w1,w2,???,wnw_1, w_2,\cdot \cdot \cdot ,w_nw1?,w2?,???,wn?

這可以用更為簡介的向量化表示。

線性回歸預測模型(向量化):

(2)f(x)=wT?x+b=θT?x\begin{aligned} f(x) &= w^T \cdot x + b \\ &= \theta^T \cdot x \\ \end{aligned}\tag{2} f(x)?=wT?x+b=θT?x?(2)

  • w=(w1;w2;...;wn)w=(w_1;w_2;...;w_n)w=(w1?;w2?;...;wn?)

  • wwwbbb 學習得到,模型就得以確定

  • θ=(w;b)\theta=(w;b)θ=(w;b)

1.2 成本函數

在線性回歸中,我們選擇 MSE(均方誤差)作為其成本函數(Cost Function),其原因在與:首先它是一個凸函數,其次是因為它是可導的,這兩個條件決定了可以利用梯度下降法來求得 θ\thetaθ 的最小值。

2. w 的計算方式

關于 www 的計算,有兩種方法,一種是利用最小二乘法最小化 MSE 導出 www 的計算公式(標準方程);另一種是利用梯度下降法找出 MSE 的最小值。

首先來看最小利用最小二乘法計算 www 的公式。

利用最小二乘法最小化成本函數 ,可以得出 θ\thetaθ 的計算方程(標準方程):[1]

(3)θ^=(XT?X)(?1)?XT?y\hat{\theta} = (X^T \cdot X)^{(-1)} \cdot X^T \cdot y \tag{3}θ^=(XT?X)(?1)?XT?y(3)

  • θ^\hat{\theta}θ^ 是使成本函數 MSE 最小化的 θ\thetaθ

  • yyy 是包含 y(1)y^{(1)}y(1)y(m)y^{(m)}y(m) 的目標值向量

則最終學得的多元線性回歸模型為:

(4)f(xˉi)=xˉi?θT=xˉi?(XTX)?1XTy\begin{aligned} f(\bar{x}_i) &= \bar{x}_i \cdot \theta^T \\ &= \bar{x}_i\cdot(X^TX)^{-1}X^Ty\\ \end{aligned}\tag{4} f(xˉi?)?=xˉi??θT=xˉi??(XTX)?1XTy?(4)

其中:xˉi=(xi;1)\bar{x}_i=(x_i;1)xˉi?=(xi?;1)

推導過程如下:

2.1 標準方程法

2.1.1 普通形式

標準方程法,又稱標準最小二乘法,即通過最小二乘法求出 wwwbbb 或向量形式下的 θ\thetaθ,由最小二乘法導出的 θ\thetaθ 計算公式稱為標準方程。

首先來推導普通形式下 wwwbbb 的計算公式。

線性回歸試圖學得:

(5)f(xi)=wxi+b,使得f(xi)?yif(x_i)=wx_i+b, 使得 f(x_i)\simeq y_i \tag{5}f(xi?)=wxi?+b,使f(xi?)?yi?(5)

如何確定 wwwbbb 呢?關鍵在于如何衡量 f(x)f(x)f(x)yyy 之間的差別。

回想一下,訓練模型就是設置模型參數知道模型最適應訓練集的過程。要達到這個目的,我們首先需要知道怎么衡量模型對訓練數據的擬合程度是好還是差,在 機器學習 | 回歸評估指標 里,我們了解到回歸模型最常見的性能指標有均方誤差(MSE)。因此以 MSE 為線性回歸模型的成本函數,在訓練線性回歸模型時,我們需要找到最小化 MSE 的 wwww?w^*w?,即:

(6)(w?,b?)=arg?min?(w,b)∑i=1m(f(xi)?yi)2=arg?min?(w,b)∑i=1m(yi?wxi?b)2\begin{aligned} (w^*,b^*) &= \mathop{\arg\min}\limits_{(w,b)}\sum_{i=1}^m(f(x_i)-y_i)^2 \\ &= \mathop{\arg\min}\limits_{(w,b)}\sum_{i=1}^m(y_i-wx_i-b)^2 \\ \end{aligned} \tag{6} (w?,b?)?=(w,b)argmin?i=1m?(f(xi?)?yi?)2=(w,b)argmin?i=1m?(yi??wxi??b)2?(6)

均方誤差有非常好的幾何意義,它對應了常用的歐幾里得距離(或簡稱歐氏距離,Euclidean distance),基于均方誤差最小化來進行模型求解的方法稱為“最小二乘法”(least square method),在線性回歸中,最小二乘法就是試圖找出一條直線,使得所有樣本到線上的歐氏距離之和最小。

求解 wwwbbb 使得 E(w,b)=∑i=1m(yi?wxi?b)2E_{(w,b)}=\sum_{i=1}^m(y_i-wx_i-b)^2E(w,b)?=i=1m?(yi??wxi??b)2 最小化的過程,稱為線性回歸模型的最小二乘“參數估計”(parameter estimation),我們可以將E(w,b)E_{(w,b)}E(w,b)? 分別對 wwwbbb 求偏導,得到:[2]

(7)?E(w,b)?w=2(w∑i=1mxi2?∑i=1m(yi?b)xi)\frac{\partial E_{(w,b)}}{\partial w} = 2\bigg(w\sum_{i=1}^m x_i^2 - \sum_{i=1}^m(y_i-b)x_i \bigg) \tag{7} ?w?E(w,b)??=2(wi=1m?xi2??i=1m?(yi??b)xi?)(7)
(9)?E(w,b)?b=2(mb?∑i=1m(yi?wxi))\frac{\partial E_{(w,b)}}{\partial b} = 2\bigg(mb - \sum_{i=1}^m(y_i-wx_i)\bigg) \tag{9}?b?E(w,b)??=2(mb?i=1m?(yi??wxi?))(9)

然后令公式 (8)、(9) 為零可以得到 wwwbbb 最優解的閉式(closed-form)解:

(10)w=∑i=1myi(xi?xˉ)∑i=1mxi2?1m(∑i=1mxi)2w = \frac{\sum_{i=1}^my_i(x_i-\bar{x})}{\sum_{i=1}^mx_i^2 - \frac{1}{m}\big(\sum_{i=1}^m x^i\big)^2} \tag{10}w=i=1m?xi2??m1?(i=1m?xi)2i=1m?yi?(xi??xˉ)?(10)
(11)b=1m∑i=1m(yi?wxi)b = \frac{1}{m}\sum_{i=1}^m(y_i-wx_i) \tag{11} b=m1?i=1m?(yi??wxi?)(11)

2.1.2 向量形式

更一般的情形是對如有 nnn 個屬性的數據集 DDD ,這時我們試圖學得:

(12)f(xi)=wTxi+b,使得f(xi)?yif(x_i)=w^Tx_i+b, 使得 f(x_i)\simeq y_i \tag{12}f(xi?)=wTxi?+b,使f(xi?)?yi?(12)

這稱為多元線性回歸(multivariate linear regression).

類似的,可利用最小二乘法對 wwwbbb 進行估計。為便于討論,我們吧 wwwbbb 轉換為向量形式 θ=(w;b)\theta = (w;b)θ=(w;b),即:

(13)f(xi)=wT?xi+b=θT?xi\begin{aligned} f(x_i) &= w^T \cdot x_i + b \\ &= \theta^T \cdot x_i \\ \end{aligned}\tag{13} f(xi?)?=wT?xi?+b=θT?xi??(13)

相應的,把數據集 DDD 表示為一個 m×(d+1)m \times (d+1)m×(d+1) 大小的矩陣 XXX,其中每行對應與一個示例,該行前 ddd 個元素對應與示例的 ddd 個屬性值,最后一個元素恒為 1,即:

(14)X=(x11x12?x1n1x21x22?x2n1?????xm1xm2?xmn1)=(x1nT1x2nT1??xmT1)X = \left( \begin{array}{cc} x_{11} & x_{12} & \cdots& x_{1n} & 1\\ x_{21} & x_{22} & \cdots\ & x_{2n} & 1\\ \vdots & \vdots & \ddots\ & \vdots & \vdots\\ x_{m1} & x_{m2} & \cdots& x_{mn} & 1\\ \end{array} \right) =\left( \begin{array}{cc} x_{1n}^T & 1\\ x_{2n}^T & 1\\ \vdots & \vdots\\ x_{m}^T & 1\\ \end{array} \right)\tag{14} X=??????x11?x21??xm1??x12?x22??xm2?????????x1n?x2n??xmn??11?1???????=??????x1nT?x2nT??xmT??11?1???????(14)

再把標記也寫成向量形式 y=(y1;y2;? ;ym)y=(y_1;y_2;\cdots;y_m)y=(y1?;y2?;?;ym?),類似于公式 (7) ,有:

(15)θ^=arg?min?θ(y?Xθ)T(y?Xθ)\hat{\theta} = \mathop{\arg\min}\limits_{\theta}(y-X\theta)^T(y-X\theta)\tag{15}θ^=θargmin?(y?Xθ)T(y?Xθ)(15)

Eθ=(y?Xθ)T(y?Xθ)E_{\theta}=(y-X\theta)^T(y-X\theta)Eθ?=(y?Xθ)T(y?Xθ) ,對 θ\thetaθ 求導得到:

(16)dEθdθ=2XT(Xθ?y)\frac{dE_{\theta}}{d\theta}=2X^T(X\theta-y)\tag{16}dθdEθ??=2XT(Xθ?y)(16)

令上式為零可得 θ\thetaθ 的最優解的閉式接,但由于涉及矩陣逆的計算,比單變量情形要復雜一些,下面我們做一個簡單的討論。

XTXX^TXXTX 為滿秩矩陣(full-rank matrix)或正定矩陣(positive definite matrix)時,令公式 (15) 為零可得標準方程:

(16)θ^=(XTX)?1XTy\hat{\theta}=(X^TX)^{-1}X^Ty \tag{16}θ^=(XTX)?1XTy(16)

其中 (XTX)?1(X^TX)^{-1}(XTX)?1 是矩陣 (XTX)(X^TX)(XTX) 的逆矩陣,令 xˉi=(xi,1)\bar{x}_i=(x_i,1)xˉi?=(xi?,1) ,則最終學得的多元線性回歸模型為:

KaTeX parse error: No such environment: align* at position 9: \begin{?a?l?i?g?n?*?}? f(\bar{x}…

2.1.3 Python 實現

我們利用 Python 簡單實現一下 θ\thetaθ 以及回歸方程的計算,首先方程 y=4+3×xy=4+3\times xy=4+3×x生成 100 個數據點并可視化:

import numpy as np import matplotlib.pyplot as pltX = 2 * np.random.rand(100, 1) y = 4 + 3 * X + np.random.randn(100, 1)plt.plot(X, y, "b.") plt.xlabel("$x_1$", fontsize=18) plt.ylabel("$y$", rotation=0, fontsize=18) plt.axis([0, 2, 0, 15]) plt.show() <Figure size 640x480 with 1 Axes>

接著我們利用公式 (16) 來計算 θ\thetaθ

X_b = np.c_[np.ones((100, 1)), X] # 向量形式下 x 的輸入為 (x, 1) theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y) theta array([[4.10499602],[2.78527083]])

我們用區間的首尾兩個點(x=0 和 x=2)來畫出擬合直線。計算出 θ\thetaθ 之后就可以利用公式 (17) 來計算兩個點的的預測數據 y_predict :

X_new = np.array([[0], [2]]) X_new_b = np.c_[np.ones((2, 1)), X_new] # add x0 = 1 to each instance y_predict = X_new_b.dot(theta) y_predictplt.plot(X_new, y_predict, "r-") plt.plot(X, y, "b.") plt.axis([0, 2, 0, 15]) plt.show()

2.1.4 計算復雜度

標準方程需對矩陣 (XTX)(X^TX)(XTX) 求逆,這是一個 n×nn \times nn×n的矩陣( nnn 是特征數量)。對這種矩陣求逆計算復雜度通常為 O(n2.4)O(n^{2.4})O(n2.4)O(n3)O(n^{3})O(n3) 之間(取決于計算實現)。換句話說,如果將特征數量翻倍,那么計算時間將乘以大約 22.4=5.32^{2.4}=5.322.4=5.3 倍到 23=82^{3}=823=8 倍之間。[3]

特征數量較大時(例如 100 000)時,標準方程的計算將極其緩慢

好的一面是,相對于訓練集中的實例數量 O(m)O(m)O(m) 來說,方程式線性的,所以能夠有效的處理大量的訓練集,只要內存足夠。

同樣,線性回歸模型一經訓練(不論是標準方程還是其他算法),預測就非常快速,因為計算復雜度相對于想要預測的實例數量和特征數量來說,都是線性的。換句話說,對兩倍的實例(或者是兩倍的特征數)進行預測,大概需要兩倍的時間。因此,我們來看看其他的優化算法:梯度下降算法。

2.2 梯度下降法

2.2.1 梯度下降原理

關于梯度下降法的推導及 Python 實現,請參考我的另一片文章:機器學習 | 梯度下降原理及Python實現。

2.2.2 Python 實現

機器學習 | 梯度下降原理及Python實現

3. Sklearn 實現

我們將使用線性回歸根據體質指數 (BMI) 預測預期壽命。

對于線性模型,我們將使用 sklearn.linear_model.LinearRegression 類(Sklearn 官方文檔)。

我們將使用線性回歸模型對數據進行擬合并畫出擬合直線。

import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegressionbmi_life_data = pd.read_csv("data/bmi_and_life_expectancy.csv")bmi_life_model = LinearRegression() bmi_life_model.fit(bmi_life_data[['BMI']], bmi_life_data[['BMI']])y_1 = bmi_life_model.predict(np.array(min(bmi_life_data['BMI'])).reshape(-1,1)) y_2 = bmi_life_model.predict(np.array(max(bmi_life_data['BMI'])).reshape(-1,1))y_1 = y_1.tolist() y_1 = [y for x in y_1 for y in x]y_2 = y_2.tolist() y_2 = [y for x in y_2 for y in x]plt.plot(bmi_life_data['BMI'], bmi_life_data['BMI'], 'b.') plt.plot([min(bmi_life_data['BMI']), max(bmi_life_data['BMI'])], [y_1, y_2], "r-") plt.xlabel("BMI") plt.ylabel('life_expectancy') plt.show()

參考資料

[1] 周志華. 機器學習[M]. 北京: 清華大學出版社, 2016: 53-56

[2] Aurelien Geron, 王靜源, 賈瑋, 邊蕤, 邱俊濤. 機器學習實戰:基于 Scikit-Learn 和 TensorFlow[M]. 北京: 機械工業出版社, 2018: 103-106.

[3] Aurelien Geron, 王靜源, 賈瑋, 邊蕤, 邱俊濤. 機器學習實戰:基于 Scikit-Learn 和 TensorFlow[M]. 北京: 機械工業出版社, 2018: 106-107.

總結

以上是生活随笔為你收集整理的监督学习 | 线性回归 之多元线性回归原理及Sklearn实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。