从一个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如下

Feature Adjusted 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如下

Feature Adjusted 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)

 

时间: 2025-01-06 14:10:46

从一个R语言案例学线性回归的相关文章

分享一个R语言的脚本【时间记录】

分享一个R语言的脚本 最近捣弄下一个R语言的脚本,不知道大家有没有看过<奇特的一生>这本书,我高中看了后,高三就山寨了柳比歇夫大神的方法,记录时间开销.个人感觉是挺有用的. 脚本就是把下面的这种excel文件导入并自动转化成饼形图,输出图片到本地. 代码在此: record <- read.table("Book1.csv", header=TRUE,sep=",", fill=TRUE); library(ggplot2); new_sum<

R语言——一元线性回归

1 一元线性回归 高尔顿被誉为现代回归的创始人,"回归效应"的发现源于高尔顿的豌豆遗传试验.在这个试验中,高尔顿发现,并非尺寸大的豌豆,其后代尺寸也大,尺寸小的豌豆,其后代尺寸也小.而是具有一种不同的趋势,即尺寸大的豌豆趋向于得到尺寸更小的子代,而尺寸小的豌豆趋向于得到尺寸更大的后代.高尔顿把这一现象称为"返祖",后来又称为"向平均值回归"."回归效应"的应用非常广泛,生活中随处可见这样的例子. 1.1 变量之间的关系的度量

R语言 一元线性回归

#一元线性回归的基本步骤#1.载入数据 给出散点图 x<-c(0.10,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.20,0.21,0.23) y<-c(42.0,43.5,45.0,45.5,45.0,47.5,49.0,53.0,50.0,55.0,55.0,60.0) plot(x,y) #2.线性回归 得到回归方程  并查看回归结果 CG<-lm(y~x) CG summary(CG) #所得回归方程为y=130.83x+28.49#3.线

R语言数据分析系列之七

R语言数据分析系列之七 -- by comaple.zhang 回归分析建模是数据分析里面很重要的一个应用之一,即通过使用已有的自变量的值建立某种关系,来预测未知变量(因变量)的值.如果因变量是连续的那就是回归分析,如果因变量为离散的,可以理解为是分类.在机器学习算法中,不管是连续变量预测还是离散的变量预测,我们都称之为有监督学习. 回归分析可以用来做广告点击率预测也可以用来做销量预测,app各种指标预测,或者库存量,分仓铺货预测等.既然如此神奇,那么我们就来看一下回归是如何做到的. 数据集 我

第七届R语言会议 - 小记

第七届中国R语言会议 小记 R语言始于1993年,并在1995年首次发布,后来经过2000年R-1.0,2004年R-2.0和2013年R-3.0,以61%的得票荣登世界编程或同积累语言排行榜榜首,远超Python,SQL,SAS,JAVA,Excel和Rapidminer. R最初是一种基于数学的脚本语言,前身为S语言.但是论数学,远不及专业的Matlab和SAS:论脚本功能,又远不及Python和Perl.但是,随着R语言的发展,在功能强大的IDE,RStudio和R本身开源的双重帮助下,R

R语言快速入门--从最基本的功能讲起

最近因为一些特殊的原因,开始接触R语言.越学越发现R语言的强大,原来完成一件事情是如此的简单.R语言中提供的工具和方法极大的方便了对一些数据的分析和处理的工作.对于一个要立志从事数据分析或者数据挖掘的学生或者工程师来说,学习R语言,确实可以达到如虎添翼的效果. R语言有如下特点: 1. 有效的数据处理和保存机制: 2. 拥有一整套的数组和矩阵操作运算符: 3. 一系列连续而又完整的数据分析工具: 4. 图形统计可以直接对数据进行分析和显示,可用于多种图形设备: 5. R语言是一种相当完善.简洁和

在 SPSS Statistics 和 Modeler 中调用 R 语言的实现和应用

http://www.ibm.com/developerworks/cn/data/library/ba/ba-1401spss-r/index.html 登录 | 注册   IBM 技术主题 软件下载 社区 技术讲座 搜索 developerWorks 打印本页面 用电子邮件发送本页面 新浪微博 人人网 腾讯微博 搜狐微博 网易微博 Digg Facebook Twitter Delicious Linked In developerWorks 中国 技术主题 Information Mana

空间点过程分析的R语言实现+PART1(1~4.6)

研究WSN空间覆盖能力的论文或多或少会假设随机部署的节点位置是服从柏松点过程(Possion Point Process,PPP)的,刚接触到这个概念也是挺懵了,之前学过随机过程.排队论都是讲的一维上的Possion Process,而二维平面上的PPP如何实现呢?在许多论坛上搜索后,终于找到实现二维PPP的代码实现,原来有个大牛Adrian Baddeley集结了一帮人搞了一个R语言包spatstat专门研究Spatial point process.先给出二维平面上SPP生成代码: libr

R语言解读多元线性回归模型

转载:http://blog.fens.me/r-multi-linear-regression/ 前言 本文接上一篇R语言解读一元线性回归模型.在许多生活和工作的实际问题中,影响因变量的因素可能不止一个,比如对于知识水平越高的人,收入水平也越高,这样的一个结论.这其中可能包括了因为更好的家庭条件,所以有了更好的教育:因为在一线城市发展,所以有了更好的工作机会:所处的行业赶上了大的经济上行周期等.要想解读这些规律,是复杂的.多维度的,多元回归分析方法更适合解读生活的规律. 由于本文为非统计的专业