美文网首页
线性回归入门(2)

线性回归入门(2)

作者: 坐下等雨 | 来源:发表于2019-02-24 14:39 被阅读0次

1、多元线性回归

前一篇为简单的一元线性回归,它反映的是单个自变量对因变量的影响。然而,实际情况中,影响因变量的自变量往往不止一个,需要将一元线性回归模型拓展到多元线性回归模型。
多元线性回归指的就是一个样本有多个特征的线性回归问题。对于一个有n个特征的样本而言,它的回归结果可以写作下面方程:



其中,y和w为一维列向量,X为二维矩阵。
根据一元回归的最小二乘法思想,我们就是要构造一个目标函数:



使其取值最小。接下来我们对w进行求导:

我们先把式子展开成下面的样子(注意:(Xw)T=wTXT):

然后就可以写成四个部分求导的形式如下(累加后求导=求导后累加):



分别对上面四个部分求导步骤如下:

最后整合:



我们让求导后的一阶导数为0,并且我们的特征矩阵X肯定不会是一个所有元素都为0的矩阵,因此我们的XTX不会为0,因此我们可以得到:


而此时我们的w就是我们参数的最优解。求解出这个参数向量,我们就解出了我们的Xw,也就能够计算出我们的预测值yhat了。

2、多元线性回归模型实例

根据特征值预测加利福尼亚房屋价值

  • 导入模块
from sklearn.linear_model import LinearRegression
from statsmodels.api as sm
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.datasets import fetch_california_housing as fch # 加利福尼亚房屋价值数据集
import pandas as pd
  • 导入数据,探索数据
x = pd.DataFrame(housevalue.data)
y = housevalue.target
x.shape, y.shape

((20640, 8), (20640,))

housevalue.feature_names # 特征值

  • MedInc:该街区住户的收入中位数
  • HouseAge:该街区房屋使用年代的中位数
  • AveRooms:该街区平均的房间数目
  • AveBedrms:该街区平均的卧室数目
  • Population:街区人口
  • AveOccup:平均入住率
  • Latitude:街区的纬度
  • Longitude:街区的经度
x.columns = housevalue.feature_names
x.head()

    MedInc  HouseAge    AveRooms    AveBedrms   Population  AveOccup    Latitude    Longitude
0   8.3252  41.0    6.984127    1.023810    322.0   2.555556    37.88   -122.23
1   8.3014  21.0    6.238137    0.971880    2401.0  2.109842    37.86   -122.22
2   7.2574  52.0    8.288136    1.073446    496.0   2.802260    37.85   -122.24
3   5.6431  52.0    5.817352    1.073059    558.0   2.547945    37.85   -122.25
4   3.8462  52.0    6.281853    1.081081    565.0   2.181467    37.85   -122.25
  • 分训练集和测试集
xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size=0.3, random_state=420)
for i in [xtrain, xtest]:
    i.index = range(i.shape[0]) # 为训练集重进建立索引
xtrain.shape

 (14448, 8))
  • 建模
reg = LinearRegression().fit(xtrain, ytrain) 
yhat = reg.predict(xtest) # 得出预测数据
yhat
reg.coef_ # 系数
reg.intercept_ # 截距
  • 评估
    1 是否预测到了正确的数值
    指标:均方误差MSE,每个样本的平均误差,用来衡量预测值和真实值的差异
from sklearn.metrics import mean_squared_error as MSE
MSE(yhat, ytest)

0.5309012639324572

2 是否拟合到了足够的信息
指标:决定系数R2

from sklearn.metrics import r2_score
r2_score(ytest, yhat)

0.6043668160178817

我们观察到,虽然我们在加利福尼亚房子价值数据集上的MSE相当小,但我们的R2却不高,这证明我们的模型比较好地拟合了数据的数值,却没有能正确拟合数据的分布。让我们与绘图来看看,究竟是不是这样一回事。我们可以绘制一张图上的两条曲线,一条曲线是我们的真实标签Ytest,另一条曲线是我们的预测结果yhat,两条曲线的交叠越多,我们的模型拟合就越好。

import matplotlib.pyplot as plt
%matplotlib inline

plt.plot(range(len(ytest)), sorted(ytest), c='b', label='Data')
plt.plot(range(len(yhat)), sorted(yhat), c='r', label='Predict')
plt.legend()

可见,虽然我们的大部分数据被拟合得比较好,但是图像的开头和结尾处却又着较大的拟合误差。如果我们在图像右侧分布着更多的数据,我们的模型就会越来越偏离我们真正的标签。这种结果类似于我们前面提到的,虽然在有限的数据集上将数值预测正确了,但却没有正确拟合数据的分布,如果有更多的数据进入我们的模型,那数据标签被预测错误的可能性是非常大的。

相关文章

  • 2019-10-29

    Day2 简单线性回归模型 机器学习入门--简单线性回归机器学习算法之线性回归算法 导入库matplotlib 绘...

  • 机器学习专题:代码实现(R)

    一、入门(转载) 1、线性回归 Python代码 R代码 2、逻辑回归 Python代码 R代码 3、决策树 Py...

  • tensorflow入门应用方法(二)——全连接深度网络搭建

    前一篇文章tensorflow入门应用方法——线性回归和逻辑回归中,主要阐述了应用tensorflow搭建线性回归...

  • 线性回归

    线性回归是机器学习算法的入门,通过该算法,管中窥豹,研究该算法的精髓之处。 线性回归 线性回归的损失函数为最小二乘...

  • 线性回归入门(2)

    1、多元线性回归 前一篇为简单的一元线性回归,它反映的是单个自变量对因变量的影响。然而,实际情况中,影响因变量的自...

  • 线性回归模型

    参考:1.使用Python进行线性回归2.python机器学习:多元线性回归3.线性回归概念 线性回归模型是线性模...

  • Tensorflow线性回归

    介绍: 使用Tensorflow做线性回归 codes: References [1] TensorFlow入门一

  • 线性回归大家族

    目录 1、线性回归大家族谱 2、总结 1、线性回归家族谱 2、总结:本文中,大家学习了多元线性回归,岭回归,Las...

  • 统计学习基础复习浓缩版

    1.简单线性回归 2.多元线性回归 3.多项式回归 4.广义线性回归(含逻辑斯谛回归) 广义线性回归模型通过拟合响...

  • 机器学习-10 线性回归及其相关算法

    返回主页 本节讨论四个内容:1、线性回归2、多重共线性问题3、岭回归4、局部加权线性回归 线性回归(Linear ...

网友评论

      本文标题:线性回归入门(2)

      本文链接:https://www.haomeiwen.com/subject/rrzvyqtx.html