定义
线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
![](https://i-blog.csdnimg.cn/blog_migrate/2169bcbe92b3ccab41640afa2c876adc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f5b48d70ffea707df8a8e864b19421a6.png)
损失函数
![](https://i-blog.csdnimg.cn/blog_migrate/e19724440eb19322a9bc8dd9c108400f.png)
正规方程
![](https://i-blog.csdnimg.cn/blog_migrate/1c9e5766bd659445a65b35e3fd441ccb.png)
梯度下降
![](https://i-blog.csdnimg.cn/blog_migrate/a9f8748c5cc031888dd2d8a9cdb87234.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a2ca7d833fccc892757de08ea26f3ebc.png)
是一个迭代的过程,一步一步找到最小值
sklearn中的API
![](https://i-blog.csdnimg.cn/blog_migrate/a47c9a35cc56148155701f71a006e1b8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fe828d02fb8e4adce2bb0f53069090bc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3f600aec523204a6e7e2459caed246ce.png)
波士顿房价分析实例
![](https://i-blog.csdnimg.cn/blog_migrate/e579b01a58b95dd9ca4d4b5d260a32ba.png)
线性回归需要对特征值和目标值都进行标准化
import numpy as np
from sklearn.linear_model import LinearRegression,SGDRegressor
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
#导入均方误差,评价回归
from sklearn.metrics import mean_squared_error,r2_score
#获取波士顿房价数据
bs = load_boston()
#数据分割
x_train,x_test,y_train,y_test = train_test_split(bs.data,bs.target,test_size=0.25)
#进行标准化,特征值和目标值都需要进行标准化
#特征值标准化
#print('标准化前:',x_test)
stand_x = StandardScaler()
x_train = stand_x.fit_transform(x_train)
x_test = stand_x.transform(x_test)
#print(x_test)
#目标值标准化,要将目标值变为二维的,reshape(-1, 1)是将数据变成n行,1列,n是根据原始数据计算的
stand_y = StandardScaler()
y_train = stand_y.fit_transform(y_train.reshape(-1, 1))
y_test = stand_y.transform(y_test.reshape(-1, 1))
#estimator预测
#正规方程求解方式预约结果
lr = LinearRegression()
lr.fit(x_train,y_train)
#回归系数w
print('正规方程计算回归系数:',lr.coef_)
print('正规方程计算常数项:',lr.intercept_)
#预测标准化之后的房屋价格
y_predict_after_zg = lr.predict(x_test)
print('正规方程预测标准化之后的房屋价格:',y_predict_after_zg)
#预测标准化之前的房屋价格,inverse_transform是将数据转换为标准化之前的数据
y_predict_before_zg = stand_y.inverse_transform(lr.predict(x_test))
print('正规方程预测标准化之前的房屋价格:',y_predict_before_zg)
print('正规方程的均方误差是:',mean_squared_error(stand_y.inverse_transform(y_test),y_predict_before_zg))
#梯度下降法预测房价,ravel()方法将数组维度拉成一维数组,将目标值转换,否则梯度下降法计算时会发出警告信息
sgd = SGDRegressor()
sgd.fit(x_train,y_train.ravel())
#回归系数w
print('梯度下降法计算回归系数:',sgd.coef_)
print('梯度下降法计算常数项:',sgd.intercept_)
#预测标准化之后的房屋价格
y_predict_after_sgd = sgd.predict(x_test)
print('梯度下降法预测标准化之后的房屋价格:',y_predict_after_sgd)
#预测标准化之前的房屋价格,inverse_transform是将数据转换为标准化之前的数据
y_predict_before_sgd = stand_y.inverse_transform(sgd.predict(x_test))
print('梯度下降法预测标准化之前的房屋价格:',y_predict_before_sgd)
print('梯度下降法的均方误差是:',mean_squared_error(stand_y.inverse_transform(y_test),y_predict_before_sgd))
print(r2_score(stand_y.inverse_transform(y_test),y_predict_before_sgd))
print(lr.score(x_test,y_test))
print(sgd.score(x_test,y_test))
print('影响房价特征排序:',np.argsort(sgd.coef_))
#特征值名字
print('特征值名字:',bs.feature_names)
print('影响房价特征排序:',bs.feature_names[np.argsort(sgd.coef_)])
要将目标值变为二维的,reshape(-1, 1)是将数据变成n行,1列,n是根据原始数据计算的。
![](https://i-blog.csdnimg.cn/blog_migrate/4e4f969a8494e895fc8302864e710eb4.png)
回归性能评估-均方误差
![](https://i-blog.csdnimg.cn/blog_migrate/8f9537f788e9588982eac5efe25de307.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dbaaab7e4a7d9cbb70663683775fd352.png)
对比
![](https://i-blog.csdnimg.cn/blog_migrate/03af4fb1c13b61ebf758858f3d49487f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/35c059da0717818713590c0b7feae283.png)