机器学习(一) 从一个R语言案例学线性回归
来源:互联网 发布:网络被骗500 编辑:程序博客网 时间:2024/05/20 22:30
写在前面的话 按照正常的顺序,本文应该先讲一些线性回归的基本概念,比如什么叫线性回归,线性回规的常用解法等。但既然本文名为《从一个R语言案例学会线性回归》,那就更重视如何使用R语言去解决线性回归问题,因此本文会先讲案例。
线性回归简介
如下图所示,如果把自变量(也叫independent variable)和因变量(也叫dependent variable)画在二维坐标上,则每条记录对应一个点。线性回规最常见的应用场景则是用一条直线去拟和已知的点,并对给定的x值预测其y值。而我们要做的就是找出一条合适的曲线,也就是找出合适的斜率及纵截矩。
SSE & RMSE
上图中的SSE指sum of squared error,也即预测值与实际值之差的平方和,可由此判断该模型的误差。但使用SSE表征模型的误差有些弊端,比如它依赖于点的个数,且不好定其单位。所以我们有另外一个值去称量模型的误差。RMSE(Root-Mean-Square Error)。
由N将其标准化,并且其单位与变量单位相同。
R2
在选择用于预测的直线时,我们可以使用已知记录的y值的平均值作为直线,如上图红线所示,这条线我们称之为baseline model。SST(total sum of squares)指是的baseline的SSE。用SSE表征模型好坏也有不便之处,比如给定SSE=10,我们并不知道这个模型是好还是好,因此我们引入另一个变量,
Adjusted R2
在多元回归模型中,选用的feature越多,我们所能得到的
案例
许多研究表明,全球平均气温在过去几十年中有所升高,以此引起的海平面上升和极端天气频现将会影响无数人。本文所讲案例就试图研究全球平均气温与一些其它因素的关系。
读者可由此下载本文所使用的数据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为模型,分别算出其Adjusted
R2 ,最后取使得AdjustedR2 最大的feature作为第一轮的feature,并记下这个最大AdjustedR2 - 在其它未被使用的feature中选一个出来,与上轮作组合,并分别算出使其Adjusted
R2 。若所有组合的AdjustedR2 都比上一轮小,则结束,以上一轮feature组合作为最组的model。否则选出使得AdjustedR2 最大的feature与上一轮的feature结合,作为本轮feature,并记下这个最大AdjustedR2 。 - 循环步骤2直到结束
后向选择
- 首先把所有feature作为第一个模型,并算出其Adjusted
R2 。 - 在上一轮的feature组合中,分别去掉每个feature,并算出其Adjusted
R2 ,如果去掉任一一个feature都不能使得AdjustedR2 比上一轮大,则结束,取上一轮的feature组合为最终的model。否则取使得AdjustedR2 最大的组合作为本轮的结果,并记下对应的AdjustedR2 。 - 循环步骤2直到结束
结合实例选择模型
初始选择所有feature
选择所有feature作为第一个model1,并使用summary函数算出其Adjusted
model1 <- lm(Temp ~ MEI + CO2 + CH4 + N2O + CFC.11 + CFC.12 + TSI + Aerosols, temp)summary(model1)
逐一去掉feature
在model1中去掉任一个feature,并记下相应的Adjusted
本轮得到Temp ~ MEI + CO2 + N2O + CFC.11 + CFC.12 + TSI + Aerosols
从model2中任意去掉1个feature,并记下相应的Adjusted
| Feature | Adjusted
|—————————————-|
| 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 Temp ~ MEI + CO2 + N2O + CFC.11 + CFC.12 + TSI + Aerosols
由summary(model2)
可算出每个feature的coefficient如下 。
线性回归介绍
在线性回归中,数据使用线性预测函数来建模,并且未知的模型参数也是通过数据来估计。这些模型被叫做线性模型。最常用的线性回归建模是给定X值的y的条件均值是X的仿射函数。
线性回归是回归分析中第一种经过严格研究并在实际应用中广泛使用的类型。这是因为线性依赖于其未知参数的模型比非线性依赖于其位置参数的模型更容易拟合,而且产生的估计的统计特性也更容易确定。
上面这段定义来自于维基百科。
线性回归假设特征和结果满足线性关系。我们用
θ在这儿称为参数(coefficient),在这的意思是调整feature中每个分量的影响力,就是到底是房屋的面积更重要还是房屋的地段更重要。如果我们令
我们的程序也需要一个机制去评估我们θ是否比较好,所以说需要对我们做出的h函数进行评估,一般这个函数称为损失函数(loss function)或者错误函数(error function),也有叫代价函数(cost function)的。在本文中,我们称这个函数为J函数。
在这里,我们可以认为J函数如下:
这个错误估计函数是去对
如何调整
梯度下降
在选定线性回归模型后,只需要确定参数
梯度下降法流程如下:
1. 首先对
2. 改变
梯度方向由
这种方法需要对全部的训练数据求得误差后再对
正规方程(Normal Equation)
=>
=>
利用以上公式可直接算出
看到这里,读者可能注意到了,正规方程法,不需要像梯度下降那样迭代多次,更关键的是从编程的角度更直接,那为什么不直接用正规,还要保留梯度下降呢?想必学过线性代数的朋友一眼能看出来,正规方程需要求
的维度会非常高,求其逆会非常耗时。
欢迎关注微信公众号 【大数据架构】
- 机器学习(一) 从一个R语言案例学线性回归
- 机器学习(一) 从一个R语言案例学线性回归
- 从一个R语言案例学线性回归
- 机器学习--线性回归R语言
- R语言学习-线性回归
- 机器学习基础(一)线性回归
- 机器学习(一)线性回归
- 机器学习(一):线性回归
- 机器学习(一)线性回归
- 机器学习(一):线性回归_python
- 机器学习算法(一)线性回归
- 机器学习(一) 线性回归
- 机器学习(一)线性回归
- 《机器学习》学习笔记(一):线性回归、逻辑回归
- 机器学习-5 线性回归 with R
- 机器学习(一)线性回归、逻辑回归
- 机器学习笔记(一) 线性回归和logistic回归
- R语言学习之简单线性回归
- java 性能问题解决方向参考
- STM32F100X RCC_APB2Periph_AFIO--复用IO时钟的使用
- 数据库索引
- hdu 4405 概率dp求期望
- c语言杭电2017字符串统计
- 机器学习(一) 从一个R语言案例学线性回归
- 什么是事务,事务有哪些特征
- Python2.7+pydev+eclipse环境配置
- 笔记:背景建模
- I/O重定向的原理和实现
- 关于jsp页面是放在webroot目录下和web-inf下优缺点
- Failed to instantiate the default view controller for UIMainStoryboardFile
- Covert sorted array to binary search tree ---LeetCode
- 可怕的阶乘