如何推导最小二乘法,求解多元线性回归参数?

前言:本文主要内容:
1. 最小二乘法损失函数求解推导;
2. sklearn中linear_model.LinearRegression参数介绍+案例

最小二乘法损失函数求解推导

最小二乘法的思路:对损失函数求导,令其为0,求得损失函数最小值时的参数,但前提条件:导数为凸函数。


多元线性回归参数求解是一个矩阵求导的过程,所以需要知道一些矩阵运算、求导运算的公式:

(A-B)^T=A^T-B^T;(AB)^T=B^T*A^T

\frac{\partial{a}}{\partial{A}}=0;\frac{\partial{A^TB^TC}}{\partial{A}}=B^TC;\frac{\partial{C^TBA}}{\partial{A}}=B^TC;\frac{\partial{A^TBA}}{\partial{A}}=(B+B^T)A


 然后对多元线性回归的损失函数进行求导,公式如下:(其中w、y、X都是矩阵) 

\begin{aligned} \frac{\partial{RSS}}{\partial{w}}&=\frac{\partial{||y-Xw||_2^2}}{\partial{w}}\\ &=\frac{\partial{(y-Xw)^T(y-Xw)}}{\partial{w}}\\ &=\frac{\partial{(y^T-w^TX^T)(y-Xw)}}{\partial{w}}\\ &=\frac{\partial{(y^Ty-w^TX^Ty-y^TXw+w^TX^TXw)}}{\partial{w}}\\ &=0-X^Ty-X^Ty+2X^TXw\\ &=X^TXw-X^Ty \end{aligned}

令其为0: 

\bg_white \begin{aligned} X^TXw-X^Ty&=0\\ X^TXw&=X^Ty\\ w&=(X^TX)^{-1}X^Ty \end{aligned}

其中倒数最后一步需要左乘(X^TX)^-1。


 补充点:

1. 逆矩阵存在的充分必要条件:特征矩阵不能存在多重共线性。

2. 因为X^TX随着特征、数据量的增加,计算量很大,不能直接使用numpy计算,需要使用奇异值分解来计算。

奇异值分解在PCA中也涉及使用。

在PCA中,为了找到新的特征空间,需要使用奇异值分解来计算。 在sklearn.decomposition.PCA中,使用参数svd_solver来控制奇异值计算方法,可以使用full(精准)/arpack(截断)/randomized(随机)/auto。

3. 最小二乘法求解线性回归属于“无偏估计”,即要求标签必须是正态分布,所以需要对y进行正态处理,可以使用quantileTransformer或者PowerTransformer。不过因为机器学习为“后验方式”,如果不对y进行处理的效果好,那么也不必正态处理。


sklearn中linear_model.LinearRegression参数介绍+案例:加利福尼亚房价数据集

  • fit_intercept:是否有截距项,默认True;
  • normalize:对X进行标准化,默认True;
  • copy_X:是否复制一份,以保证不在原始数据上操作,默认True;
  • n_jobs:设定运算性能,填整数,默认None;
  • model.coef_ :查看系数,即w
  • model.intercept_ :查看截距项
from sklearn.datasets import fetch_california_housing as fch

housevalue=fch()

X=pd.DataFrame(housevalue.data,columns=housevalue.feature_names)
X.head()
y=housevalue.target

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=9)

from sklearn.linear_model import LinearRegression
model=LinearRegression().fit(X_train,y_train)
y_hat=model.predict(X_test)
y_hat

model.coef_ # 返回模型的参数
[*zip(X_train.columns,model.coef_)]

model.intercept_ # 返回模型的截距项

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值