多元线性回归理论知识介绍与实战(Python)

模型

一元回归模型在二维空间中是一条直线,而多元回归模型,由于自变量的增加,它在更高维的空间中显示,因此很难将它画出来,相比一元回归模型,用归纳的方法将多元回归模型表述出来。

回归模型

多元线性回归的模型为 y = β 0 + β 1 x 1 + + β 2 x 2 + ⋯ + β k x k + ε y=\beta_0+\beta_1x_1++\beta_2x_2+\cdots+\beta_kx_k+\varepsilon y=β0+β1x1++β2x2++βkxk+ε β 0 , β 1 , β 2 , ⋯   , β k \beta_0,\beta_1,\beta_2,\cdots,\beta_k β0,β1,β2,,βk是回归系数, ε \varepsilon ε为误差项。

于是得到多元回归方程:
E ( y ) = β 0 + β 1 x 1 + + β 2 x 2 + ⋯ + β k x k E(y)=\beta_0+\beta_1x_1++\beta_2x_2+\cdots+\beta_kx_k E(y)=β0+β1x1++β2x2++βkxk
它描述了 y y y x 1 , x 2 , ⋯   , x k x_1,x_2,\cdots,x_k x1,x2,,xk之间的关系。

现有 n n n个独立观测数据 ( y i , x i 1 , ⋯   , x i k ) (y_i , x_{i1},\cdots, x_{ik} ) (yi,xi1,,xik) i = 1 , ⋯   , n , n > k i = 1,\cdots,n,n>k i=1,,n,n>k,有
y i = β 0 + β 1 x i 1 + + β 2 x i 2 + ⋯ + β k x i k + ε i y_i=\beta_0+\beta_1x_{i1}++\beta_2x_{i2}+\cdots+\beta_kx_{ik}+\varepsilon_i yi=β0+β1xi1++β2xi2++βkxik+εi

为了将模型简化,用矩阵的形式表示该模型,


Y = [ y 1 y 2 ⋮ y n ] , X = [ 1 x 11 ⋯   x 1 k 1 x 21 ⋯   x 2 k ⋮ ⋮ ⋱ ⋮ 1 x n 1 ⋯   x n k ] , ε = [ ε 1 ε 2 ⋮ ε n ] , β = [ β 0 β 1 ⋮ β k ] Y =\begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_n \\ \end{bmatrix} , X= \begin{bmatrix} 1 & x_{11} & \cdots\ &x_{1k}\\ 1 & x_{21} & \cdots\ &x_{2k}\\ \vdots & \vdots & \ddots & \vdots \\ 1 & x_{n1} & \cdots\ & x_{nk}\\ \end{bmatrix} , \varepsilon =\begin{bmatrix} \varepsilon_1 \\ \varepsilon_2 \\ \vdots \\ \varepsilon_n \\ \end{bmatrix} , \beta =\begin{bmatrix} \beta_0 \\ \beta_1 \\ \vdots \\ \beta_k \\ \end{bmatrix} Y=y1y2yn,X=111x11x21xn1   x1kx2kxnk,ε=ε1ε2εn,β=β0β1βk

则有
Y = X β + ε Y=X\beta+\varepsilon Y=Xβ+ε

和一元线性回归类似,假设:

  • r ( X ) = k + 1 r(X)=k+1 r(X)=k+1,即该矩阵列满秩
  • 满足 G − M G-M GM条件
  • ε ∼ N ( 0 , σ 2 I n ) \varepsilon\sim N(0,\sigma^2I_n) εN(0,σ2In),其中 I n I_n In n n n阶单位阵

根据假设,则有
Y ∼ N ( X β , σ 2 I n ) Y \sim N(X\beta,\sigma^2I_n ) YN(Xβ,σ2In)

扫描二维码关注公众号,回复: 13408333 查看本文章

估计的多元回归方程

估计样本的多元回归方程,总体回归参数 β 0 , β 1 , β 2 , ⋯   , β k \beta_0,\beta_1,\beta_2,\cdots,\beta_k β0,β1,β2,,βk是未知的,因此我们需要用样本去估计它们,其估计的回归方程为:
y ^ = β 0 ^ + β 1 ^ x 1 + β 2 ^ x 2 + ⋯ + β k ^ x k \hat{y}=\hat{\beta_0}+\hat{\beta_1}x_1+\hat{\beta_2}x_2+\cdots+\hat{\beta_k}x_k y^=β0^+β1^x1+β2^x2++βk^xk

最小二乘估计

和一元的一样,我们要估计未知的参数 β 0 , β 1 , β 2 , ⋯   , β k \beta_0,\beta_1,\beta_2,\cdots,\beta_k β0,β1,β2,,βk,采用最小二乘法。
在一元中,我们知道要使得拟合误差(即残差)平方和最小,即 ∑ e i 2 \sum e_i^2 ei2最小。
同样的,记
Q ( β 0 , β 1 , ⋯   , β k ) = ∑ i = 1 n ( y i − β 0 − β 1 x i 1 − β 2 x i 2 − ⋯ − β k x i k ) 2 Q(\beta_0,\beta_1,\cdots,\beta_k)=\sum_{i=1}^{n}(y_i-\beta_0-\beta_1x_{i1}-\beta_2x_{i2}- \cdots - \beta_kx_{ik})^2 Q(β0,β1,,βk)=i=1n(yiβ0β1xi1β2xi2βkxik)2

Q ( β 0 ^ , β 1 ^ , ⋯   , β k ^ ) = m i n β 0 , β 1 , ⋯   , β k Q ( β 0 , β 1 , ⋯   , β k ) = ∑ i = 1 n ( y i − β 0 ^ − β 1 ^ x i 1 − ⋯ − β k ^ x i k ) 2 \begin{aligned} Q(\hat{\beta_0},\hat{\beta_1},\cdots,\hat{\beta_k}) &=\mathop{min}\limits_{\beta_0,\beta_1,\cdots,\beta_k}{Q(\beta_0,\beta_1,\cdots,\beta_k)}\\ &=\sum_{i=1}^{n}(y_i-\hat{\beta_0}-\hat{\beta_1}x_{i1}-\cdots-\hat{\beta_k}x_{ik})^2 \end{aligned} Q(β0^,β1^,,βk^)=β0,β1,,βkminQ(β0,β1,,βk)=i=1n(yiβ0^β1^xi1βk^xik)2
这时对每个估计参数求偏导,得到以下偏导方程组,
{ ∂ Q ∂ β 0 = − 2 ∑ i = 1 n ( y i − β 0 ^ − β 1 ^ x i 1 − ⋯ − β k ^ x i k ) = 0 ∂ Q ∂ β 1 = − 2 ∑ i = 1 n x i 1 ( y i − β 0 ^ − β 1 ^ x i 1 − ⋯ − β k ^ x i k ) = 0 ⋮ ∂ Q ∂ β k = − 2 ∑ i = 1 n x i k ( y i − β 0 ^ − β 1 ^ x i 1 − ⋯ − β k ^ x i k ) = 0 \begin{aligned} \begin{cases} &\frac{\partial Q}{\partial \beta_0} =-2\sum_{i=1}^{n}(y_i-\hat{\beta_0}-\hat{\beta_1}x_{i1}-\cdots-\hat{\beta_k}x_{ik})=0 \\ \\ &\frac{\partial Q}{\partial \beta_1} =-2\sum_{i=1}^{n}x_{i1}(y_i-\hat{\beta_0}-\hat{\beta_1}x_{i1}-\cdots-\hat{\beta_k}x_{ik})=0\\ &\vdots \\ &\frac{\partial Q}{\partial \beta_k} =-2\sum_{i=1}^{n}x_{ik}(y_i-\hat{\beta_0}-\hat{\beta_1}x_{i1}-\cdots-\hat{\beta_k}x_{ik})=0\\ \end{cases} \end{aligned} β0Q=2i=1n(yiβ0^β1^xi1βk^xik)=0β1Q=2i=1nxi1(yiβ0^β1^xi1βk^xik)=0βkQ=2i=1nxik(yiβ0^β1^xi1βk^xik)=0

整理得到,
{ β 0 ^ n + β 1 ^ ∑ x i 1 + β 2 ^ ∑ x i 2 + ⋯ + β k ^ ∑ x i k = ∑ y i β 0 ^ ∑ x i 1 + β 1 ^ ∑ x i 1 2 + β 2 ^ ∑ x i 1 x i 2 + ⋯ + β k ^ ∑ x i 1 x i k = ∑ x i 1 y i ⋮ β 0 ^ ∑ x i k + β 1 ^ ∑ x i k x i 1 + β 2 ^ ∑ x i k x i 2 + ⋯ + β k ^ ∑ x i k 2 = ∑ x i k y k \begin{cases} \hat{\beta_0}n+ \hat{\beta_1}\sum x_{i1}+\hat{\beta_2}\sum x_{i2}+\cdots+\hat{\beta_k}\sum x_{ik}=\sum y_i\\ \\ \hat{\beta_0}\sum x_{i1}+\hat{\beta_1}\sum x_{i1}^2+\hat{\beta_2}\sum x_{i1}x_{i2}+\cdots+\hat{\beta_k}\sum x_{i1}x_{ik}=\sum x_{i1}y_i\\ \vdots \\ \hat{\beta_0}\sum x_{ik}+\hat{\beta_1}\sum x_{ik}x_{i1}+\hat{\beta_2}\sum x_{ik}x_{i2}+\cdots+\hat{\beta_k}\sum x_{ik}^2=\sum x_{ik}y_k\\ \end{cases} β0^n+β1^xi1+β2^xi2++βk^xik=yiβ0^xi1+β1^xi12+β2^xi1xi2++βk^xi1xik=xi1yiβ0^xik+β1^xikxi1+β2^xikxi2++βk^xik2=xikyk
由于式子太多,为了方便,用矩阵表示,即
X T X β ^ = X T Y X^TX\hat{\beta}=X^TY XTXβ^=XTY

前面我们假设 X X X矩阵列满秩,则 X T X X^TX XTX为可逆矩阵,那么就可以得到
β ^ = ( X T X ) − 1 X T Y \hat{\beta}=(X^TX)^{-1}X^TY β^=(XTX)1XTY
最后得到估计的方程
Y ^ = X β ^ = X ( X T X ) − 1 X T Y \hat{Y}=X\hat{\beta}=X(X^TX)^{-1}X^TY Y^=Xβ^=X(XTX)1XTY

并且由方程组我们可以知道,
{ ∑ i = 1 n e i = 0 ∑ i = 1 n ∑ j = 1 k e i x i j = 0 \begin{aligned} \begin{cases} \sum_{i=1}^{n} e_i=0\\ \\ \sum_{i=1}^{n}\sum_{j=1}^{k} e_ix_{ij}=0 \end{cases} \end{aligned} i=1nei=0i=1nj=1keixij=0

将上面的等式写成矩阵的形式,即
e T X = 0 e^TX=0 eTX=0
其中 e T = [ e 1 , e 2 , ⋯   , e n ] e^T=[e_1,e_2,\cdots,e_n] eT=[e1,e2,,en] X X X为一开始表示的矩阵。

β ^ \hat{\beta} β^的性质

β ^ \hat{\beta} β^ Y Y Y的线性函数,这是显然的。并且 β ^ \hat{\beta} β^ β \beta β的无偏估计,下面给出证明:
E ( β ^ ) = E ( ( X T X ) − 1 X T Y ) = E ( ( X T X ) − 1 X T ( X β + ε ) ) = E ( ( X T X ) − 1 X T X β ) = β \begin{aligned} E(\hat{\beta}) &=E((X^TX)^{-1}X^TY)\\ &=E((X^TX)^{-1}X^T(X\beta+\varepsilon))\\ &=E((X^TX)^{-1}X^TX\beta)\\ &=\beta \end{aligned} E(β^)=E((XTX)1XTY)=E((XTX)1XT(Xβ+ε))=E((XTX)1XTXβ)=β
关于协方差矩阵的理解
V a r ( β ^ ) = C o v ( β ^ , β ^ ) = C o v ( ( X T X ) − 1 X T Y , ( X T X ) − 1 X T Y ) = ( X T X ) − 1 X T C o v ( Y , Y ) [ ( X T X ) − 1 X T ] T = ( X T X ) − 1 X T σ 2 I n X ( X T X ) − 1 = σ 2 ( X T X ) − 1 \begin{aligned} Var(\hat{\beta}) &=Cov(\hat{\beta},\hat{\beta})\\ &=Cov((X^TX)^{-1}X^TY,(X^TX)^{-1}X^TY)\\ &=(X^TX)^{-1}X^TCov(Y,Y)[(X^TX)^{-1}X^T]^T\\ &=(X^TX)^{-1}X^T\sigma^2I_nX(X^TX)^{-1}\\ &=\sigma^2(X^TX)^{-1} \end{aligned} Var(β^)=Cov(β^,β^)=Cov((XTX)1XTY,(XTX)1XTY)=(XTX)1XTCov(Y,Y)[(XTX)1XT]T=(XTX)1XTσ2InX(XTX)1=σ2(XTX)1

于是我们估计的 β ^ \hat{\beta} β^
β ^ ∼ N ( β , σ 2 ( X T X ) − 1 ) \hat{\beta} \sim N(\beta,\sigma^2(X^TX)^{-1}) β^N(β,σ2(XTX)1)

拟合优度检验

多重判定系数

与一元回归类似,对于多元回归,需要用多重判定系数评价其拟合程度。
同样有 S S T = S S R + S S E SST=SSR+SSE SST=SSR+SSE 成立。
为了度量多元回归方程拟合程度,我们定义多重判定系数 ,
R 2 = S S R S S T = 1 − S S E S S T R^2=\frac{SSR}{SST}=1-\frac{SSE}{SST} R2=SSTSSR=1SSTSSE

和一元一样,只要回归平方和占比越大,其拟合效果越好。

对于多重判定系数有一点特别重要的需要说明:自变量个数的增加将影响到因变量中被估计的回归方程所解释的比例。当增加自变量时,会使预测误差变得较小,从而减小残差平方和 S S E SSE SSE,那么 S S R SSR SSR就会变大。从而使 R 2 R^2 R2变大。
这就会引发一个问题,如果模型中增加一个自变量,即使这个自变量在统计上并不显著, R 2 R^2 R2也会变大。为了避免这个问题。统计学家提出了调整的多重判定系数,记为 R α 2 R^2_\alpha Rα2
R α 2 = 1 − ( 1 − R 2 ) ( n − 1 n − k − 1 ) R^2_\alpha=1-(1-R^2)(\frac{n-1}{n-k-1}) Rα2=1(1R2)(nk1n1)

R a 2 R_a^2 Ra2同时考虑了样本量 n n n和模型中自变量的个数 k k k的影响,这就使得 R a 2 R_a^2 Ra2的值永远小于 R 2 R^2 R2,而且 R a 2 R_a^2 Ra2的值不会因为模型中自变量的个数增多而逐渐接近于 1 1 1
在多元回归分析中,通常采用调整的多重判定回归系数。

估计标准误差

和一元回归一样, S e S_e Se是总体回归模型中 σ 2 = V a r ( ε i ) \sigma^2=Var(\varepsilon_i) σ2=Var(εi)的无偏估计量。

S e = M S E = 1 n − k − 1 ∑ i = 1 n ( y i − y i ^ ) 2 S_e=\sqrt{MSE}=\sqrt{\frac{1}{n-k-1}\sum_{i=1}^{n}(y_i-\hat{y_i})^2} Se=MSE =nk11i=1n(yiyi^)2

多元回归对 S e S_e Se的解释和一元类似,这里就不再叙述了。

显著性检验

我们仍需要对线性关系 ( F 检 验 ) (F检验) F和回归系数 ( t 检 验 ) (t检验) t的检验。

线性关系的检验

为检验 y y y k k k 个自变量之间的关系是否显著,进行 F F F检验。

其中
S S R σ 2 ∼ χ 2 ( k ) S S E σ 2 ∼ χ 2 ( n − k − 1 ) \begin{aligned} &\frac{SSR}{\sigma^2}\sim \chi^2(k)\\ &\frac{SSE}{\sigma^2}\sim \chi^2(n-k-1) \end{aligned} σ2SSRχ2(k)σ2SSEχ2(nk1)

构造统计量
F = M S R M S E ∼ F ( k , n − k − 1 ) F=\frac{MSR}{MSE} \sim F(k,n-k-1) F=MSEMSRF(k,nk1)

检验步骤如下,
第一步: 提出假设。
     H 0 : β 1 = β 2 = ⋯ = β k = 0 , H 1 : β 1 , β 2 , ⋯   , β k 不 全 为 0 H_0:\beta_1=\beta_2=\cdots=\beta_k=0,H_1:\beta_1,\beta_2,\cdots,\beta_k不全为0 H0β1=β2==βk=0H1β1,β2,,βk0
第二步:检验统计量。
     F = M S R M S E F=\frac{MSR}{MSE} F=MSEMSR
第三步:作出决策。
    给定显著性水平 α \alpha α,查表,
    若 F > F α F>F_\alpha F>Fα,拒绝 H 0 H_0 H0,表明 k k k个自变量和 y y y的线性关系是显著的,
    若 F < F α F<F_\alpha F<Fα,接受 H 0 H_0 H0,没有证据表明 k k k个自变量和 y y y的线性关系是显著的。

回归系数的检验

进行完线性关系的检验,就可以对回归系数 β i \beta_i βi进行检验,即每个自变量对 y y y的影响进行 t t t 检验。

前面我们有
β ^ ∼ N ( β , σ 2 ( X T X ) − 1 ) \hat{\beta} \sim N(\beta,\sigma^2(X^TX)^{-1}) β^N(β,σ2(XTX)1)
对于每个 β i ^ , i = 1 , 2 , ⋯   , k \hat{\beta_i},i=1,2,\cdots,k βi^i=1,2,,k,有
β i ^ ∼ N ( β i , σ 2 c i i ) \hat{\beta_i} \sim N(\beta_i,\sigma^2c_{ii}) βi^N(βi,σ2cii)
其中 c i i c_{ii} cii ( X T X ) − 1 (X^TX)^{-1} (XTX)1中主对角线第 ( i ) (i) (i)个元素。

构造统计量
t = β i ^ S e / c i i ∼ t ( n − k − 1 ) t=\frac{\hat{\beta_i}}{S_e/\sqrt{c_{ii}}} \sim t(n-k-1) t=Se/cii βi^t(nk1)

检验步骤如下,
第一步: 提出假设。
     H 0 : β i = 0 , H 1 : β i ≠ 0 H_0:\beta_i=0,H_1:\beta_i\ne0 H0βi=0H1βi=0
第二步:检验统计量。
     t = β i ^ S e / c i i t=\frac{\hat{\beta_i}}{S_e/\sqrt{c_{ii}}} t=Se/cii βi^
第三步:作出决策。
    给定显著性水平 α \alpha α,并根据自由度 d f = n − k − 1 df=n-k-1 df=nk1查表,
    若 ∣ t ∣ > t α / 2 \mid t \mid > t_{\alpha/2} t>tα/2,拒绝 H 0 H_0 H0,表明 k 个 x k个x kx y y y的影响是显著的,
    若 ∣ t ∣ < t α / 2 \mid t \mid < t_{\alpha/2} t<tα/2,接受 H 0 H_0 H0,没有证据表明 k 个 x k个x kx y y y的影响是显著的。

多重共线性

当回归模型中两个或两个以上的变量彼此相关时,则回归模型中存在多重共线性。

多重共线性的判定:

  • 模型中中各对自变量之间显著相关
  • 当模型的线性关系检验 ( F (F (F检验 ) ) )显著时,几乎所有的回归系数 β i β_i βi t t t检验却不显著。
  • 回归系数的正负号与预期的相反。
  • 容忍度 ( t o l e r a n c e ) (tolerance) (tolerance)方差扩大因子 ( V I F ) (VIF) (VIF)

容忍度:
某个变量的容忍度等于 1 1 1 减去该自变量为因变量而其他 k − 1 k−1 k1 个自变量为预测变量时所得到的线性回归模型的判定系数。即 1 − R i 2 1−R^2_i 1Ri2。 容忍度越小,多重共线性越严重。通常认为容忍度小于 0.1 0.1 0.1 时,存在严重的多重共线性。

方差扩大因子:
容忍度的倒数。 因此, V I F VIF VIF 越大,多重共线性越严重,一般认为 V I F VIF VIF 的值大于 10 10 10 时,存在严重的多重共线性。

多重共线性问题的处理:

  • 将一个或多个相关的自变量从模型中剔除,使保留的自变量尽可能不相关。

  • 如果要在模型中保留所有的自变量,那么应该:

    (1)避免根据 t t t 统计量对单个参数 β \beta β 进行检验,

    (2)对因变量 y y y值的推断(预测和估计)限定在自变量样本值的范围内。

预测

当回归模型和系数通过检验后,可由给定的 x 0 = ( x 01 , ⋯   , x 0 k ) x_0 = (x_{01},\cdots, x_{0k} ) x0=(x01,,x0k)预测 y 0 y_0 y0 y 0 y_0 y0是随机的,显然其预测值为
y 0 ^ = β 0 ^ + β 1 ^ x 01 + ⋯ + β k ^ x 0 k \hat{y_0}=\hat{\beta_0}+\hat{\beta_1}x_{01}+\cdots+\hat{\beta_k}x_{0k} y0^=β0^+β1^x01++βk^x0k

给定 α \alpha α,即可得到 y 0 y_0 y0的预测区间,结果较复杂,

n n n较大时,且 x 0 i x_{0i} x0i 接近 x ‾ i \overline{x}_i xi y 0 y_0 y0的预测区间可以简化为

[ y 0 ^ − z α / 2 S e , y 0 ^ + z α / 2 S e ] [\hat{y_0}-z_{\alpha/2}S_e,\hat{y_0}+z_{\alpha/2}S_e] [y0^zα/2Se,y0^+zα/2Se]

变量选择与逐步回归

在建立回归模型时,希望用最少的变量来建立模型,有效地引进自变量,使得模型更有操作性。

若新变量引入模型后,之前某个变量的$t检验不显著,则这个新变量将被模型剔除,在这种情况下,回归分析就很难存在多重共线性的影响,因此,要逐步回归搜索自变量,避免造成多重共线性。

逐步回归:逐步回归(Stepwise Regression)是一种常用的消除多重共线性、选取“最优”回归方程的方法。其做法是将逐个引入自变量,引入的条件是该自变量经F检验是显著的,每引入一个自变量后,对已选入的变量进行逐个检验,如果原来引入的变量由于后面变量的引入而变得不再显著,那么就将其剔除。引入一个变量或从回归方程中剔除一个变量,为逐步回归的一步,每一步都要进行F 检验,以确保每次引入新变量之前回归方程中只包含显著的变量。这个过程反复进行,直到既没有不显著的自变量选入回归方程,也没有显著自变量从回归方程中剔除为止。

多元回归分析大概就介绍这么多吧,中心化,标准化,样本相关阵等知识可以看这篇

实战

下面来实战吧~~~

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn import model_selection
import seaborn as sns

# 读取文件
data = pd.read_excel(r'Predict to Profit.xlsx')
examDf = pd.DataFrame(data)
print(examDf.head())

数据文件为Predict to Profit.xlsx,运行结果前五行如下:
在这里插入图片描述

该数据有三个自变量影响利润的大小,下面进行回归分析。

# 数据清洗,比如第一列有可能是日期,这样的话我们就只需要从第二列开始的数据,
# 这个情况下,把下面中括号中的0改为1就好,要哪些列取哪些列
new_examDf = examDf.ix[:, 0:]

# 检验数据
print(new_examDf.describe())  # 数据描述,会显示最值,平均数等信息,可以简单判断数据中是否有异常值
print(new_examDf[new_examDf.isnull() == True].count())  # 检验缺失值,若输出为0,说明该列没有缺失值

# 输出相关系数,判断是否值得做线性回归模型
print(new_examDf.corr())  # 0-0.3弱相关;0.3-0.6中相关;0.6-1强相关;

# 通过seaborn添加一条最佳拟合直线和95%的置信带,直观判断相关关系
sns.pairplot(data, aspect=0.8, kind='reg')
plt.show()

运行结果:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210411160342724.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_5rWp54S254S254S2,size_16,color_FFFFFF,t_70#pic_center)

训练线性回归模型

# 拆分训练集和测试集
X_train, X_test, Y_train, Y_test = model_selection.train_test_split(new_examDf.ix[:, :3], new_examDf.Profit,
                                                                    train_size=0.8)
print("自变量---源数据:", new_examDf.ix[:, :3].shape, ";  训练集:", X_train.shape, ";  测试集:", X_test.shape)
print("因变量---源数据:", examDf.Profit.shape, ";  训练集:", Y_train.shape, ";  测试集:", Y_test.shape)

# 调用线性规划包
model = LinearRegression()

model.fit(X_train, Y_train)  # 线性回归训练

a = model.intercept_  # 截距
b = model.coef_  # 回归系数
print("拟合参数:截距", a, ",回归系数:", b)

# 显示线性方程,并限制参数的小数位为两位
print("最佳拟合线: Y = ", round(a, 2), "+", round(b[0], 2), "* X1 + ", round(b[1], 2), "* X2 + ", round(b[2], 2), "* X3")

Y_pred = model.predict(X_test)  # 对测试集数据,用predict函数预测

plt.plot(range(len(Y_pred)), Y_pred, 'red', linewidth=2.5, label="predict data")
plt.plot(range(len(Y_test)), Y_test, 'green', label="test data")
plt.legend(loc=3)
plt.show()  # 显示预测值与测试值曲线

运行结果:

在这里插入图片描述
在这里插入图片描述

对比spss结果,如下图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

两种方法,得到两个拟合方程
y = 51130.77 + 0.77 x 1 − 0.01 x 2 + 0.03 x 3 y=51130.77+0.77x_1-0.01x_2+0.03x_3 y=51130.77+0.77x10.01x2+0.03x3

y = 52382.44 + 0.78 x 1 − 0.22 x 2 + 0.025 x 3 y=52382.44+0.78x_1-0.22x_2+0.025x_3 y=52382.44+0.78x10.22x2+0.025x3

参考资料

[1] 周志华.机器学习[M].北京:清华大学出版社,2020.

[2] 贾俊平.统计学[M].北京.中国人民大学出版社,2019.

[3] 机器学习多元线性回归

[4] python seaborn画图

猜你喜欢

转载自blog.csdn.net/lhrfighting/article/details/115600893