Sklearn学习之线性回归

回归算法之线性回归。

sklearn学习之线性回归

普通线性回归

定义:线性回归通过一个或者多个自变量与因变量之间之间进行建模的回归分析。其中特点为一个或多个称为回归系数的模型参数的线性组合

  • 一元线性回归:涉及到的变量只有一个

  • 多元线性回归:涉及到的变量两个或两个以上

损失函数(误差大小)

  • yi为第i个训练样本的真实值

  • hw(xi)为第i个训练样本特征值组合预测函数

总损失定义(最小二乘法):

image-20200901082433866

最小二乘法之梯度下降(理解过程)

我们以单变量中的w0,w1为例子:

image-20200901090948423

α为学习速率,需要手动指定

image-20200901091105040表示方向

理解:沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后

更新W值。

image-20200901091143202

sklearn线性归正规方程、梯度下降API

正规方程:sklearn.linear_model.LinearRegression

梯度下降:sklearn.linear_model.SGDRegressor

1、sklearn.linear_model.LinearRegression()

普通最小二乘线性回归

  • coef_:回归系数

2、sklearn.linear_model.SGDRegressor( )

通过使用SGD最小化线性模型

  • coef_:回归系数

线性回归实例

1、sklearn线性回归正规方程、梯度下降API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
import joblib

# 波士顿房价预测
# 获取数据
lb=load_boston()

# 分割数据
x_train,x_test,y_train,y_test=train_test_split(lb.data,lb.target,test_size=0.25)

# 进行标准化
# 特征值和目标值都需要进行标准化处理
std_x=StandardScaler()
std_y=StandardScaler()

x_train=std_x.fit_transform(x_train)
x_test=std_x.transform(x_test)

# 目标值
# reshape(-1,1)转换为一列,-1是代表未知数据重整
y_train=std_y.fit_transform(y_train.reshape(-1,1))
y_test=std_y.transform(y_test.reshape(-1,1))

# 正规方程求解预测结构
lr=LinearRegression()
lr.fit(x_train, y_train)
y_lr_predict=lr.predict(x_test)

y_lr_predict=std_y.inverse_transform(y_lr_predict)
y_ture_test=std_y.inverse_transform(y_test)

sgd=SGDRegressor()
sgd.fit(x_train,y_train)

y_sgd_predict=std_y.inverse_transform(y_sgd_predict)

x=[i for i in range(len(y_test))]
plt.figure()
plt.plot(x,y_lr_predict,color='r',label='lr')
plt.plot(x,y_sgd_predict,color='b',label='sgd')
plt.plot(x,y_ture_test,color='g')
plt.legend()
plt.grid()

2、波士顿房价数据集分析流程

1、波士顿地区房价数据获取

2、波士顿地区房价数据分割

3、训练与测试数据标准化处理

4、使用最简单的线性回归模型LinearRegression和

梯度下降估计SGDRegressor对房价进行预测

回归性能评估API

均方误差(Mean Squared Error(MSE) 评价机制

image-20200901092421309

mean_squared_error(y_true, y_pred)

均方误差回归损失

  • y_true:真实值

  • y_pred:预测值

  • return:浮点数结果

回归性能对比

image-20200901092534655

官方建议

image-20200901092811474

存在问题

过拟合与欠拟合

image-20200901092931394

经过训练后,知道了天鹅是有翅膀的,天鹅的嘴巴是长长的。简单的认为有这些特征的都是天鹅。因为机器学习到的天鹅特征太少了,导致区分标准太粗糙,不能准确识别出天鹅。

image-20200901092940655

机器通过这些图片来学习天鹅的特征,经过训练后,知道了天鹅是有翅膀的,天鹅的嘴巴是长长的弯曲的,天鹅的脖子是长长的有点曲度,天鹅的整个体型像一个”2”且略大于鸭子。这时候机器已经基本能区别天鹅和其他动物了。然后,很不巧已有的天鹅图片全是白天鹅的,于是机器经过学习后,会认为天鹅的羽毛都是白的,以后看到羽毛是黑的天鹅就会认为那不是天鹅。

image-20200901093018044

过拟合:一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂)

欠拟合:一个假设在训练数据上不能获得更好的拟合, 但是在训练数据外的数据集上也不能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)

对线性模型进行训练学习会变成复杂模型

image-20200901093101833

欠拟合原因以及解决办法

原因:学习到数据的特征过少

解决办法:增加数据的特征数量

过拟合原因以及解决办法

原因:原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾各个测试数据点

解决办法:

1、进行特征选择,消除关联性大的特征(很难做)

2、交叉验证(让所有数据都有过训练)

3、正则化(了解)

L2正则化

作用:可以使得W的每个元素都很小,都接近于0

优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象

带有正则化的线性回归-Ridge

sklearn.linear_model.Ridge(alpha=1.0)

具有l2正则化的线性最小二乘法

  • alpha:正则化力度

  • coef_:回归系数

观察正则化程度的变化,对结果的影响?

image-20200901093523075

线性回归 LinearRegression与Ridge对比

  • 岭回归:回归得到的回归系数更符合实际,更可靠。另外,能让估计参数的波动范围变小,变的更稳定。在存在病态数据偏多的研究中有较大的实用价值。
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2020 WuXei Si
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信