一文读懂多元线性回归

一、什么是线性回归模型

1.1模型

h θ = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 h_\theta = \theta_0 + \theta_{1}x_1+ \theta_{2}x_2+ \theta_{3}x_3 hθ=θ0+θ1x1+θ2x2+θ3x3

1.2线性

θ i \theta_i θi表示 x i x_i xi属性对 h θ h_\theta hθ的影响,影响程度与 x i x_i xi的数值成正比,影响程度也可以称为贡献度。 θ 0 \theta_0 θ0表示了$h_\theta $本身的性质,中心化后这一项消失。

1.3回归

h θ h_\theta hθ是一个预测值,建立合适的线性模型可以使得真实值 y y y以预测值为中心波动(y是包含误差和随机扰动的),即残差的均值为0。

二、如何建立线性回归模型

2.1寻找 y y y x x x

y y y需要是稳定的、可预测的, x x x需要与 y y y有逻辑上的关系。
模型是我们理解场景的手段,使用模型之前首先要根据领域经验确认场景是客观存在而且稳定的,这样才能让模型帮助我们更精确的理解场景,而不是成为一个数字游戏。能够发现客观 y y y是数据挖掘工程师的核心价值,能够建立稳定的评价 y y y x x x需要经验和技巧。

2.2确定模型参数

2.2.1 拟合的角度

什么是拟合

狭义上的拟合是指寻找 x x x y y y的函数 f f f,广义上的拟合是寻找能够解释 y y y f f f x x x,使得 y = f ( x ) y=f(x) y=f(x)成立。理想的成立是指等号完全成立,但是实际上的拟合是指“尽可能”成立,即拟合的结果与实际的结果误差尽可能小误差即损失函数,是预测值与真实值之间的差异,因此称之为损失(预测的损失),因此拟合就是一个最小化损失函数的过程。最小化损失函数一般是机器学习模型的目标,我们希望预测值与真实值尽可能接近,一般使用rmse、mse等衡量误差。

最小二乘法拟合线性回归模型

最小二乘法的定义包含两部分,二乘法即平方法,使用离差平方和作为误差的度量,损失函数为 J ( w ) = ∑ i = 1 m ( y ^ i − y i ) 2 J(w)=\sum_{i=1}^{m}(\hat{y}^{i}-y^{i})^2 J(w)=i=1m(y^iyi)2。使预测值与真实值误差最小即使二乘函数最小,因此最小二乘法可以用于拟合线性回归模型。
对于线性回归模型而言,二乘函数是一个关于系数的凸函数,可以使用驻点的必要条件求解极值点的系数。

2.2.2 统计的角度

什么是似然估计

似然估计的思想是已经出现的就是最有可能出现的。

模型的极大似然等价于误差的极大似然

如果模型是正确的,误差不含有有效信息,是一种白噪声。运用极大似然估计的思想,使得当前白噪声出现概率最大的参数就是正确参数。
L ( w ) = ∏ i = 1 m 1 2 π σ e − ( y i − y ^ i ) 2 2 σ 2 L(w)=\prod_{i=1}^{m}\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(y^i-\hat{y}^i)^2}{2\sigma^2}} L(w)=i=1m2π σ1e2σ2(yiy^i)2
L ( w ) L(w) L(w)的对数函数的极值点与 L ( w ) L(w) L(w)相同,与最小二乘的公式相同,从而实现等价。

2.2.3 公式解

y ^ i = w 0 + w 1 ∗ x 1 i + w 2 ∗ x 2 i + . . . + w n ∗ x n i \hat{y}^i=w_0+w_1*x_1^i+w_2*x_2^i+...+w_n*x_n^i y^i=w0+w1x1i+w2x2i+...+wnxni
ω = ( w 0 , w 1 , w 2 , . . . , w n ) T \omega =( w_0,w_1,w_2,...,w_n)^T ω=(w0,w1,w2,...,wn)T
X i = ( 1 , x 1 i , x 2 i , . . . , x n i ) T X^i =(1,x_1^i,x_2^i,...,x_n^i)^T Xi=(1,x1i,x2i,...,xni)T
y i = ( y 1 i , y 2 i , . . . , y n i ) T y^i =(y_1^i,y_2^i,...,y_n^i)^T yi=(y1i,y2i,...,yni)T
y ^ i = ω ∗ X i \hat{y}^i=\omega*X^i y^i=ωXi
ϵ i = y i − y ^ i \epsilon^i=y^i-\hat{y}^i ϵi=yiy^i
[ ϵ 1 ϵ 2 ϵ 3 . ϵ m ] = [ y 1 − y ^ 1 y 2 − y ^ 2 y 3 − y ^ 3 . y m − y ^ m ] = [ y 1 y 2 y 3 . y m ] − [ ω ∗ X 1 ω ∗ X 2 ω ∗ X 3 . ω ∗ X m ] = y ⃗ − y ^ ⃗ \begin{bmatrix} \epsilon^1 \\ \epsilon^2 \\ \epsilon^3 \\. \\ \epsilon^m \end{bmatrix} = \begin{bmatrix} y^1-\hat{y}^1 \\ y^2-\hat{y}^2\\ y^3-\hat{y}^3 \\. \\ y^m-\hat{y}^m \end{bmatrix} = \begin{bmatrix} y^1\\ y^2\\y^3 \\. \\y^m \end{bmatrix}-\begin{bmatrix} \omega*X^1\\\omega*X^2 \\\omega*X^3 \\. \\\omega*X^m \end{bmatrix}=\vec{y}-\vec{\hat{y}} ϵ1ϵ2ϵ3.ϵm=y1y^1y2y^2y3y^3.ymy^m=y1y2y3.ymωX1ωX2ωX3.ωXm=y y^
y ^ ⃗ = [ w 0 + w 1 ∗ x 1 1 + w 2 ∗ x 2 1 + . . . + w n ∗ x n 1 w 0 + w 1 ∗ x 1 2 + w 2 ∗ x 2 2 + . . . + w n ∗ x n 2 w 0 + w 1 ∗ x 1 3 + w 2 ∗ x 2 3 + . . . + w n ∗ x n 3 . w 0 + w 1 ∗ x 1 m + w 2 ∗ x 2 m + . . . + w n ∗ x n m ] = [ 1 x 1 1 x 2 1 x 3 1 . . . x n 1 1 x 1 2 x 2 2 x 3 2 . . . x n 2 1 x 1 3 x 2 3 x 3 3 . . . x n 3 . . . . . . 1 x 1 m x 2 m x 3 m . . . x n m ] ∗ [ w 0 w 1 w 2 . w n ] = X ∗ ω \vec{\hat{y}}=\begin{bmatrix} w_0+w_1*x_1^1+w_2*x_2^1+...+w_n*x_n^1\\ w_0+w_1*x_1^2+w_2*x_2^2+...+w_n*x_n^2 \\w_0+w_1*x_1^3+w_2*x_2^3+...+w_n*x_n^3 \\. \\w_0+w_1*x_1^m+w_2*x_2^m+...+w_n*x_n^m \end{bmatrix}=\begin{bmatrix} 1 & x_1^1&x_2^1&x_3^1&...&x_n^1\\1&x_1^2&x_2^2&x_3^2&...&x_n^2 \\1&x_1^3&x_2^3&x_3^3&...&x_n^3 \\. &.&.&.&.&.\\1&x_1^m&x_2^m&x_3^m&...&x_n^m \end{bmatrix}*\begin{bmatrix} w_0\\ w_1 \\ w_2 \\. \\ w_n \end{bmatrix}=X*\omega y^ =w0+w1x11+w2x21+...+wnxn1w0+w1x12+w2x22+...+wnxn2w0+w1x13+w2x23+...+wnxn3.w0+w1x1m+w2x2m+...+wnxnm=111.1x11x12x13.x1mx21x22x23.x2mx31x32x33.x3m.............xn1xn2xn3.xnmw0w1w2.wn=Xω
J ( ω ) = 1 2 ϵ 2 = 1 2 ϵ T ∗ ϵ = 1 2 ( y ⃗ − X ∗ ω ) T ∗ ( y ⃗ − X ∗ ω ) J(\omega)=\frac{1}{2}\epsilon^2 = \frac{1}{2}\epsilon^T * \epsilon=\frac{1}{2}(\vec{y}-X*\omega)^T*(\vec{y}-X*\omega) J(ω)=21ϵ2=21ϵTϵ=21(y Xω)T(y Xω)
下面使用的矩阵的求导公式如下:
∂ A x ⃗ ∂ x ⃗ = A T , ∂ A x ⃗ ∂ x ⃗ T = A , ∂ x ⃗ T A ∂ x ⃗ = A , ∂ ( x ⃗ T A x ⃗ ) ∂ x ⃗ = ( A T + A ) x ⃗ , 如 果 A = A T , ∂ ( x ⃗ T A x ⃗ ) ∂ x ⃗ = 2 A x ⃗ \frac{\partial{A\vec{x}}}{\partial{\vec{x}}}=A^T,\frac{\partial{A\vec{x}}}{\partial{\vec{x}^T}}=A,\frac{\partial{\vec{x}^TA}}{\partial{\vec{x}}}=A,\frac{\partial{(\vec{x}^TA\vec{x})}}{\partial{\vec{x}}}=(A^T+A)\vec{x},如果A=A^T,\frac{\partial{(\vec{x}^TA\vec{x})}}{\partial{\vec{x}}}=2A\vec{x} x Ax =AT,x TAx =A,x x TA=A,x (x TAx )=(AT+A)x ,A=AT,x (x TAx )=2Ax
1 2 ∂ ∂ ω ⃗ ( y ⃗ T y ⃗ − y ⃗ T X ω ⃗ − ω ⃗ T X T y ⃗ + ω ⃗ T X T X ω ⃗ ) = 0 \frac{1}{2}\frac{\partial{}}{\partial{\vec{\omega}}}(\vec{y}^T\vec{y}-\vec{y}^TX\vec{\omega}-\vec{\omega}^TX^T\vec{y}+\vec{\omega}^TX^TX\vec{\omega})=0 21ω (y Ty y TXω ω TXTy +ω TXTXω )=0
ω ⃗ = ( X T X ) − 1 X T y ⃗ \vec{\omega}=(X^TX)^{-1}X^T\vec{y} ω =(XTX)1XTy

四、建模过程

使用线性回归模型建模,也是其他数据模型的一般步骤包括:
1.数据预处理

  • 特征样本和标签样本对齐
  • 异常数据处理,eg.nan值、inf值
  • 离群点值处理

2.切分数据集

  • 样本内数据集:拟合模型
  • 样本外数据集:验证模型泛化能力

3.拟合模型
4.使用模型预测

  • 使用样本外的特征预测样本外的标签

5.模型可视化

  • 样本外的点是否在拟合的直线附近,是否与样本内的点位于同一包络内
  • 只绘制预测值和真实值,比较两个的绝对数值的差异
  • 绘制残差图

6.模型评价(目标函数、损失函数、代价函数)

  • MAE:Mean Absolute Error->平均离差
    离差的均值,公式为 1 m ∑ i = 1 m ∣ y ^ i − y i ) ∣ \frac{1}{m}\sum_{i=1}^{m}|\hat{y}^i-y^i)| m1i=1my^iyi)
  • MSE:Mean Square Error->均方误差
    MAE中各个样本的误差权重是等权重的,背后的假设是误差服从一个均匀分布。但是我们希望我们的模型是稳定的,即小误差出现概率高,大误差出现概率低。因此使用MSE度量误差考虑了模型的平稳性,衡量的是预测值与真实值误差的平均平方和,公式为 1 m ∑ i = 1 m ( y ^ i − y i ) 2 \frac{1}{m}\sum_{i=1}^{m}(\hat{y}^i-y^i)^2 m1i=1m(y^iyi)2
  • RMSE:Root Mean Square Error->平方根均方误差
    因为MSE的单位是平方,不利于理解误差的大小,因此产生了RMSE的度量,公式为 R M S E = M S E RMSE=\sqrt{MSE} RMSE=MSE
  • R 2 R^2 R2:可决系数
    MAE、MSE、RMSE衡量的误差都是有量纲的,而且无上界。 R 2 R^2 R2是无量纲而且有上下界的,值域为[0,1]。 R 2 R^2 R2反映的是模型对被解释变量波动的解释程度,预测能力与直接使用均值预测相比的准确程度,最差的情况是模型预测与使用均值预测无区别,最好的情况是模型预测了被解释变量的每一个波动。
    TSS:total sum of squares->被解释变量的全部信息
    RSS:residual sum of squares->模型没有解释的部分
    ESS:explained sum of squares->模型解释的部分
    y ˉ = 1 m ∑ i = 1 m y i \bar{y}=\frac{1}{m}\sum_{i=1}^{m}y^i yˉ=m1i=1myi
    T S S = 1 m ∑ i = 1 m ( y i − y ˉ ) TSS=\frac{1}{m}\sum_{i=1}^{m}(y^i-\bar{y}) TSS=m1i=1m(yiyˉ)
    R S S = 1 m ∑ i = 1 m ( y ^ i − y i ) 2 RSS=\frac{1}{m}\sum_{i=1}^{m}(\hat{y}^i-y^i)^2 RSS=m1i=1m(y^iyi)2
    E S S = 1 m ∑ i = 1 m ( y ^ i − y ˉ ) ESS=\frac{1}{m}\sum_{i=1}^{m}(\hat{y}^i-\bar{y}) ESS=m1i=1m(y^iyˉ)
    T S S = E S S + R S S TSS = ESS+RSS TSS=ESS+RSS
    R 2 = E S S T S S = T S S − R S S T S S = 1 − R S S T S S R^2=\frac{ESS}{TSS}=\frac{TSS-RSS}{TSS}=1-\frac{RSS}{TSS} R2=TSSESS=TSSTSSRSS=1TSSRSS

五、模型有效性分析的扩展

5.1.残差分析

OLS方法估计参数符合似然估计的前提是残差符合正态分布。建模过后可以通过对残差进行JB检验、qq图等检验残差的正态性。如果残差不符合正态分布,例如符合t分布,线性回归模型的参数受到离群点的影响较大,可以通过对似然函数分析得到这个结论。残差不满足正态分布的情况可以使用参考稳健估计的方法

5.2统计分析

从机器学习的角度来看OLS估计后建模结束,但是从统计学角度来看还要依次进行F检验检验因变量是否与自变量存在显著的相关性,进行t检验分别检验各自变量的系数是否显著,检验多重共线性(会导致回归参数不稳定,系数方差较大,而且影响对各个变量的分析, X T X X^TX XTX不可逆,使用PCA、主成分分析等方法解决),检验自相关性(估计的系数方差很大,影响t检验的有效性,使用差分法解决),检验异方差性质(估计的系数方差很大,影响t检验的有效性,使用WLS解决)。从高斯-马尔可夫定理的证明过程中可以看出,只有在同方差和非自相关性的条件下,OLS估计才具有最小方差性,后两者均不影响无偏性,影响有效性。

六、案例

6.1 波士顿房价预测

import numpy as np
import pandas as pd
from sklearn.datasets import load_boston
import matplotlib.pyplot as plt

# 载入波士顿房价数据集
boston = load_boston()
# 自变量名称
boston['feature_names']
# CRIM:房屋所在镇犯罪率
# ZN:面积大于25000平方英尺住宅所占比例
# INDUS:房屋所在镇非零售区域所占比例
# CHAS:房屋位于河边,值为1,否则为0
# NOX:NO浓度
# RM:平均房间数
# AGE:1940年前建成房屋所占比例
# DIS:房屋距离波士顿五大就业中心的加权距离
# RAD:距离房屋最近公路编号
# TAX:财产税额度
# PTRATIO:房屋所在镇师生比
# B:计算公式为1000*(房屋所在镇非美籍人口所占比例-0.63)**2
# LSTAT:弱势群体人口所占比例
# target:房屋的平均价格
array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',
       'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')
x,y = boston.data,boston.target
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
x_train,x_test,y_train,y_test = train_test_split(x,y.reshape(-1,1),test_size=0.25,random_state=0)
regression=LinearRegression()
# fit->拟合
# fit时,x是2D,y是2D
regression.fit(x_train,y_train)
# 查看模型训练结果
print('系数:',regression.coef_)
print('截距:',regression.intercept_)
系数: [[-1.17735289e-01  4.40174969e-02 -5.76814314e-03  2.39341594e+00
  -1.55894211e+01  3.76896770e+00 -7.03517828e-03 -1.43495641e+00
   2.40081086e-01 -1.12972810e-02 -9.85546732e-01  8.44443453e-03
  -4.99116797e-01]]
截距: [36.93325546]
# predict->预测
out_sample_predicted_y=regression.predict(x_test)
# 评价
from sklearn.metrics import mean_squared_error,mean_absolute_error,r2_score
# 注意参数顺序
# 注意接口的定义。metrics提供的接口是对原数据和预测数据计算,预测类自带的是使用原始数据即可,因为预测的结果已经在模型里了。
print('MAE:',mean_absolute_error(y_test,out_sample_predicted_y))
print('MSE:',mean_squared_error(y_test,out_sample_predicted_y))
print('RMSE:',np.sqrt(mean_squared_error(y_test,out_sample_predicted_y)))
print('R2:',r2_score(y_test,out_sample_predicted_y))
print('训练集R2:',regression.score(x_train,y_train))
print('测试集R2:',regression.score(x_test,y_test))
MAE: 3.668330148135717
MSE: 29.782245092302485
RMSE: 5.457311159564066
R2: 0.6354638433202114
训练集R2: 0.7697699488741149
测试集R2: 0.6354638433202114
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值