zoukankan      html  css  js  c++  java
  • 从一个R语言案例学线性回归

    线性回归简介

    如下图所示,如果把自变量(也叫independent variable)和因变量(也叫dependent variable)画在二维坐标上,则每条记录对应一个点。线性回规最常见的应用场景则是用一条直线去拟和已知的点,并对给定的x值预测其y值。而我们要做的就是找出一条合适的曲线,也就是找出合适的斜率及纵截矩。

    SSE & RMSE

      上图中的SSE指sum of squared error,也即预测值与实际值之差的平方和,可由此判断该模型的误差。但使用SSE表征模型的误差有些弊端,比如它依赖于点的个数,且不好定其单位。所以我们有另外一个值去称量模型的误差。RMSE(Root-Mean-Square Error)。

    由N将其标准化,并且其单位与变量单位相同。

    案例

    许多研究表明,全球平均气温在过去几十年中有所升高,以此引起的海平面上升和极端天气频现将会影响无数人。本文所讲案例就试图研究全球平均气温与一些其它因素的关系。
    读者可由此下载本文所使用的数据climate_change.csv。
    https://courses.edx.org/c4x/MITx/15.071x_2/asset/climate_change.csv
    此数据集包含了从1983年5月到2008年12月的数据。
    本例我们以1983年5月到2006年12月的数据作为训练数据集,以之后的数据作为测试数据集。

    数据

    首先加载数据

     temp <- read.csv("climate_change.csv") 

    数据解释

    • Year 年份 M

    • Month 月份 T

    • emp 当前周期内的全球平均气温与一个参考值之差

    • CO2, N2O,CH4,CFC.11,CFC.12:这几个气体的大气浓度 Aerosols

    模型选择

    线性回归模型保留两部分。

    • 选择目标feature。我们数据中,有多个feature,但并非所有的feature都对预测有帮助,或者并非所有的feature都需要一起工作来做预测,因此我们需要筛选出最小的最能预测出接近事实的feature组合。

    • 确定feature系数(coefficient)。feature选出来后,我们要确定每个feature对预测结果所占的权重,这个权重即为coefficient

    结合实例选择模型

    初始选择所有feature
    选择所有feature作为第一个model1,并使用summary函数算出其Adjusted R2为0.7371。

     model1 <- lm(Temp ~ MEI + CO2 + CH4 + N2O + CFC.11 + CFC.12 + TSI + Aerosols, temp) summary(model1) 

    逐一去掉feature
    在model1中去掉任一个feature,并记下相应的Adjusted R2如下

    FeatureAdjusted R2
    CO2 + CH4 + N2O + CFC.11 + CFC.12 + TSI + Aerosols 0.6373
    MEI + CH4 + N2O + CFC.11 + CFC.12 + TSI + Aerosols 0.7331
    MEI + CO2 + N2O + CFC.11 + CFC.12 + TSI + Aerosols 0.738
    MEI + CO2 + CH4 + CFC.11 + CFC.12 + TSI + Aerosols 0.7339
    MEI + CO2 + CH4 + N2O + CFC.12 + TSI + Aerosols 0.7163
    MEI + CO2 + CH4 + N2O + CFC.11 + TSI + Aerosols 0.7172
    MEI + CO2 + CH4 + N2O + CFC.11 + CFC.12 + Aerosols 0.697
    MEI + CO2 + CH4 + N2O + CFC.11 + CFC.12 + TSI 0.6883

      本轮得到Temp ~ MEI + CO2 + N2O + CFC.11 + CFC.12 + TSI + Aerosols

    从model2中任意去掉1个feature,并记下相应的Adjusted R2如下

    FeatureAdjusted R2
    CO2 + N2O + CFC.11 + CFC.12 + TSI + Aerosols 0.6377
    MEI + N2O + CFC.11 + CFC.12 + TSI + Aerosols 0.7339
    MEI + CO2 + CFC.11 + CFC.12 + TSI + Aerosols 0.7346
    MEI + CO2 + N2O + CFC.12 + TSI + Aerosols 0.7171
    MEI + CO2 + N2O + CFC.11 + TSI + Aerosols 0.7166
    MEI + CO2 + N2O + CFC.11 + CFC.12 + Aerosols 0.698
    MEI + CO2 + N2O + CFC.11 + CFC.12 + TSI 0.6891

    任一组合的Adjusted R2都比上一轮小,因此选择上一轮的feature组合作为最终的模型,也即Temp ~ MEI + CO2 + N2O + CFC.11 + CFC.12 + TSI + Aerosols
    由summary(model2)可算出每个feature的coefficient如下 。

    线性回归介绍

    在线性回归中,数据使用线性预测函数来建模,并且未知的模型参数也是通过数据来估计。这些模型被叫做线性模型。最常用的线性回归建模是给定X值的y的条件均值是X的仿射函数。
    线性回归是回归分析中第一种经过严格研究并在实际应用中广泛使用的类型。这是因为线性依赖于其未知参数的模型比非线性依赖于其位置参数的模型更容易拟合,而且产生的估计的统计特性也更容易确定。
    上面这段定义来自于维基百科。

    这个错误估计函数是去对x(i)的估计值与真实值y(i)差的平方和作为错误估计函数,前面乘上的1/2m是为了在求导的时候,这个系数就不见了。至于为何选择平方和作为错误估计函数,就得从概率分布的角度来解释了。
    如何调整θ以使得J(θ)取得最小值有很多方法,本文会重点介绍梯度下降法和正规方程法。

    梯度下降

      在选定线性回归模型后,只需要确定参数θ,就可以将模型用来预测。然而θ需要使得J(θ)最小。因此问题归结为求极小值问题。
    梯度下降法流程如下:

      1. 首先对θ赋值,这个值可以是随机的,也可以让θ为一个全零向量。
    2. 改变θ的值,使得J(θ)按梯度下降的方向进行调整。

      梯度方向由J(θ)对θ的偏导数确定,由于求的是极小值,因此梯度方向是偏导数的反方向。更新公式为为:

    这种方法需要对全部的训练数据求得误差后再对θ进行更新。(α为学习速度)

    正规方程(Normal Equation)

     

  • 相关阅读:
    Minimum Depth of Binary Tree leetcode java
    Maximum Depth of Binary Tree leetcode java
    Symmetric Tree leetcode java
    Same Tree leetcode java
    Binary Tree Postorder Traversal leetcode java
    Binary Tree Preorder Traversal leetcode java
    Binary Tree Inorder Traversal leetcode java
    Combinations leetcode java
    一键清除Centos iptables 防火墙所有规则
    阿里云centos7.7x64安装open,并配置ip转发和nat伪装
  • 原文地址:https://www.cnblogs.com/shined/p/4394221.html
Copyright © 2011-2022 走看看