前言:本文主要内容:
1. 最小二乘法损失函数求解推导;
2. sklearn中linear_model.LinearRegression参数介绍+案例
最小二乘法损失函数求解推导
最小二乘法的思路:对损失函数求导,令其为0,求得损失函数最小值时的参数,但前提条件:导数为凸函数。
多元线性回归参数求解是一个矩阵求导的过程,所以需要知道一些矩阵运算、求导运算的公式:
然后对多元线性回归的损失函数进行求导,公式如下:(其中w、y、X都是矩阵)
令其为0:
其中倒数最后一步需要左乘(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_ # 返回模型的截距项