原创文章,始发自本人个人博客站点 www.jasongj.com
转载请务必在文章头部以超链形式注明出处http://www.jasongj.com/2015/03/27/ml1_linear_regression/
写在前面的话 按照正常的顺序,本文应该先讲一些线性回归的基本概念,比如什么叫线性回归,线性回规的常用解法等。但既然本文名为《从一个R语言案例学会线性回归》,那就更重视如何使用R语言去解决线性回归问题,因此本文会先讲案例。
线性回归简介
如下图所示,如果把自变量(也叫independent variable)和因变量(也叫dependent variable)画在二维坐标上,则每条记录对应一个点。线性回规最常见的应用场景则是用一条直线去拟和已知的点,并对给定的x值预测其y值。而我们要做的就是找出一条合适的曲线,也就是找出合适的斜率及纵截矩。
SSE & RMSE
上图中的SSE指sum of squared error,也即预测值与实际值之差的平方和,可由此判断该模型的误差。但使用SSE表征模型的误差有些弊端,比如它依赖于点的个数,且不好定其单位。所以我们有另外一个值去称量模型的误差。RMSE(Root-Mean-Square Error)。RMSE=√SSEN
由N将其标准化,并且其单位与变量单位相同。
R2
在选择用于预测的直线时,我们可以使用已知记录的y值的平均值作为直线,如上图红线所示,这条线我们称之为baseline model。SST(total sum of squares)指是的baseline的SSE。用SSE表征模型好坏也有不便之处,比如给定SSE=10,我们并不知道这个模型是好还是好,因此我们引入另一个变量,R2,定义如下:R2=1−SSESST
R2用来表明我们所选的模型在baseline model的基础之上提升了多少(对于任意给定数据集,我们都可以用baseline作为模型,而事实上,我们总希望我们最后选出的模型在baseline基础之上有所提升),并且这个值的范围是[0,1]。R2=0意味着它并未在baseline model的基础之上有所提升,而R2=1(此时SSE=0)意味着一个一个非常完美的模型。
Adjusted R2
在多元回归模型中,选用的feature越多,我们所能得到的R2越大。所以R2不能用于帮助我们在feature特别多时,选择合适的feature用于建模。因此又有了Adjusted R2,它会补偿由feature增多/减少而引起的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,最后取使得Adjusted R2最大的feature作为第一轮的feature,并记下这个最大Adjusted R2
- 在其它未被使用的feature中选一个出来,与上轮作组合,并分别算出使其Adjusted R2。若所有组合的Adjusted R2都比上一轮小,则结束,以上一轮feature组合作为最组的model。否则选出使得Adjusted R2最大的feature与上一轮的feature结合,作为本轮feature,并记下这个最大Adjusted R2。
- 循环步骤2直到结束
后向选择
- 首先把所有feature作为第一个模型,并算出其Adjusted R2。
- 在上一轮的feature组合中,分别去掉每个feature,并算出其Adjusted R2,如果去掉任一一个feature都不能使得Adjusted R2比上一轮大,则结束,取上一轮的feature组合为最终的model。否则取使得Adjusted R2最大的组合作为本轮的结果,并记下对应的Adjusted R2。
- 循环步骤2直到结束
结合实例选择模型
初始选择所有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如下
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如下
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的仿射函数。
线性回归是回归分析中第一种经过严格研究并在实际应用中广泛使用的类型。这是因为线性依赖于其未知参数的模型比非线性依赖于其位置参数的模型更容易拟合,而且产生的估计的统计特性也更容易确定。
上面这段定义来自于维基百科。
线性回归假设特征和结果满足线性关系。我们用X1,X2..Xn 去描述feature里面的分量,比如x1=房间的面积,x2=房间的朝向,等等,我们可以做出一个估计函数:h(x)=hθ(x)=θ0+θ1x1+θ2x2
θ在这儿称为参数(coefficient),在这的意思是调整feature中每个分量的影响力,就是到底是房屋的面积更重要还是房屋的地段更重要。如果我们令x0=1,就可以用向量的方式来表示了: hθ(x)=θTX
我们的程序也需要一个机制去评估我们θ是否比较好,所以说需要对我们做出的h函数进行评估,一般这个函数称为损失函数(loss function)或者错误函数(error function),也有叫代价函数(cost function)的。在本文中,我们称这个函数为J函数。
在这里,我们可以认为J函数如下: J(0)=12mm∑i=1(h0x(i)−y(i))2
这个错误估计函数是去对x(i)的估计值与真实值y(i)差的平方和作为错误估计函数,前面乘上的1/2m是为了在求导的时候,这个系数就不见了。至于为何选择平方和作为错误估计函数,就得从概率分布的角度来解释了。
如何调整θ以使得J(θ)取得最小值有很多方法,本文会重点介绍梯度下降法和正规方程法。
梯度下降
在选定线性回归模型后,只需要确定参数θ,就可以将模型用来预测。然而θ需要使得J(θ)最小。因此问题归结为求极小值问题。
梯度下降法流程如下:
1. 首先对θ赋值,这个值可以是随机的,也可以让θ为一个全零向量。
2. 改变θ的值,使得J(θ)按梯度下降的方向进行调整。
梯度方向由J(θ)对θ的偏导数确定,由于求的是极小值,因此梯度方向是偏导数的反方向。更新公式为为:0j=0j−α1mm∑i=1(hθ(x(i))−y(i))xij
这种方法需要对全部的训练数据求得误差后再对θ进行更新。(α为学习速度)
正规方程(Normal Equation)
Xθ=y
=>
XTXθ=XTy
=>
θ=(XTX)−1XTy
利用以上公式可直接算出θ
看到这里,读者可能注意到了,正规方程法,不需要像梯度下降那样迭代多次,更关键的是从编程的角度更直接,那为什么不直接用正规,还要保留梯度下降呢?想必学过线性代数的朋友一眼能看出来,正规方程需要求(XTX)的逆,这就要求(XTX)是可逆的。同时,如果feature数比较多,比如共有100个feature,那么(XTX)的维度会非常高,求其逆会非常耗时。
欢迎关注微信公众号 【大数据架构】
相关推荐
线性回归是机器学习中最基础且应用广泛的算法之一,用于分析两个或两个以上变量间相互依赖的定量关系。它通过一个或多个自变量来预测因变量的值。在给定的案例中,线性回归被应用于根据员工的工龄预测其薪水,这是一...
线性回归是一种统计学上的连续变量预测模型,它假设因变量(目标变量)与一个或多个自变量之间存在线性关系。在这个实例中,我们将自变量设定为可能影响股票价格的因素,如历史股价、交易量、宏观经济指标等,因变量...
本资源适用于多元线性回归的Python代码实现,是小编的机器学习——线性回归介绍及案例实战的数据集
【线性回归】是统计学和机器学习领域中一种基本且重要的预测模型,它用于建立因变量(目标变量)和一个或多个自变量(特征变量)之间的线性关系。线性回归模型假设因变量和自变量之间存在线性关系,即因变量可以表示...
1. **线性回归模型**:线性回归模型假设目标变量和输入特征之间存在线性关系,即误差项(e)是一个均值为0的随机变量,且服从正态分布。线性回归模型可以通过最小二乘法或梯度下降法进行训练,目标是最小化预测值与...
线性学习预测网店销售额的数据集
本资源适用于小编的文章《机器学习——线性回归介绍及案例实战》中用到的数据表,适合学习Python、机器学习、数据分析等内容的小伙伴学习。
在本案例中,逻辑回归可能不太适用,因为蒸汽量是一个连续的数值,而非离散的类别。然而,如果蒸汽量被离散化为几个等级,例如低、中、高,那么逻辑回归可以用来预测蒸汽等级的概率。 为了评估这三种模型的性能,...
线性回归是一种基础的统计和机器学习方法,用于预测连续数值型变量。它通过拟合一条直线(一维)或超平面(多维)来最大化数据点与这条直线的关联程度。这里有两个关键概念:**最小二乘法**和**梯度下降法**。最小...
在本项目中,我们探索了如何使用Rust编程语言实现两个经典的机器学习算法:k-means聚类算法和线性回归。Rust以其强大的类型系统、内存安全特性和高性能著称,使其成为开发高效计算密集型算法的理想选择,如机器学习...
在这个具体的案例中,“实战(Python)利用线性回归来预测鲍鱼年龄”是一个实例,它展示了如何应用统计学中的线性回归方法解决实际问题。线性回归是一种简单但强大的预测模型,它假设目标变量(这里是鲍鱼的年龄)与...
机器学习线性回归 实例数据集——广告投入与销售额
在本文中,我们将深入探讨"Python机器学习案例"这一主题,包括Logistic回归、K-均值聚类和随机森林等重要算法的应用。这些技术在数据科学领域具有广泛的应用,帮助我们从数据中发现模式、预测未来趋势以及进行决策。...
在机器学习中,逻辑回归的核心在于构建一个线性模型,即假设目标变量Y与特征X之间的关系为:P(Y=1|X)=1/(1+e^(-θTX)),其中P(Y=1|X)是患病的概率,θ是模型参数,T表示转置,X是特征向量。模型的目标是找到最佳的...
线性回归是一种基础且广泛应用的统计学方法,用于建立输入变量(自变量)与...这对于学习机器学习和深入理解线性回归模型的训练过程具有很大的帮助。同时,这也能为之后学习更复杂的优化算法和深度学习模型奠定基础。
在这个例子中,我们关注的是非线性回归和岭回归,这两种方法在数据挖掘、人工智能和机器学习领域中都有广泛应用。 首先,银行的案例是一个典型的回归分析问题,旨在理解不良贷款的成因。通过分析25家分行的2002年...
线性回归预测网店销售额的数据集
2. **导入相关库**:在Python中,我们通常会使用NumPy库处理数值计算,Pandas库处理数据,Matplotlib或Seaborn库用于可视化,而Scikit-learn库则提供了机器学习算法,包括线性回归模型。 3. **建立模型**:在Scikit...