回归分析是统计学的核心算法,是机器学习最基本算法,也是数学建模最常用的算法之一。
简单来说,回归分析就是用一个或多个自变量来预测因变量的方法,具体是通过多组自变量和因变量的样本数据,拟合出最佳的函数关系。
本篇由前入深将线性回归的原理讲清楚,并用案例演示实际操作。
一、最小二乘法
例1,现有10期的广告费用与销售额的数据:
先画散点图观察一下:
cost<-c(30,40,40,50,60,70,70,70,80,90)
sale<-c(143.5,192.2,204.7,266,318.2,457,333.8,312.1,386.4,503.9)
dat<-as.data.frame(cbind(cost,sale))
plot(dat)
可见,这些散点大致在一条直线上,一元线性回归就是寻找一条直线,使得与这些散点拟合程度最好(越接近直线越好)。
比如画这样一条直线,方程可写为: (线性模型), 其中
是待定系数,目标是选取与样本点最接近的直线对应的
.
那么,怎么刻画这种“最接近”?
是与横轴
对应的直线上的点的纵坐标(称为线性模型预测值),它与样本点
对应的真实值
之差,就是预测误差(红线长度):
适合描述散点到直线的“接近程度”。
但绝对值不容易计算,改用:
我们需要让所有散点总体上最接近该直线,故需要让总的预测误差
最小。
这就是“最小二乘法”,有着很直观的几何解释。
二、问题(1)求解
这是个求二元函数极小值问题。
根据微积分知识,二元函数极值是在一阶偏导等于0点处取到:
其中,
三、 提升:矩阵形式推导
将线性模型的全部预测值,用矩阵来写:
记
则矩阵表示为
于是,让预测误差最小的“最小二乘法”优化问题就表示为
同样 的极小值,在其一阶偏导
处取到,为了对
求导,引入矩阵微积分知识:
于是,令
注1:最小二乘法求解需要矩阵 满秩,否则只能采用梯度下降法求解.
注2:矩阵形式非常便于Matlab求解,同时也可以很容易地推广到多元线性回归:取
即可,对应 个自变量,
组样本,第
组样本为
,结果形式不变:
, 此时
.
注3:一些非线性回归也可以转化为线性回归来做:
例如,人口指数增长模型 ,做对数变换:
. 即将
的数据取对数作为因变量,再与自变量
数据做线性回归,得到回归系数
,再由
可得到
.
其它可变换为线性回归的函数形式:
四、最小二乘法的概率解释
真实数据中,一个 值可能对应多个
值,因为实际
值可能受多种因素的影响,故可以假设任意一个
值对应的
的真实值是服从正态分布的随机变量。
那么,什么时候拟合效果最好,当然是预测值 取值概率最大的时候,即最大似然原理。
记
其中,
为真实值,
为预测误差(即不能被线性模型刻画的部分)。
该假设由中心极限定理可以保证,顺便说一句,理想的误差都得服从 均值,等方差的正态分布,否则说明建立的模型不充分,误差中还有趋势没有被提取出来。
这就意味着,在给定 和参数
情况下,因变量
也服从正态分布,即
为了便于最大化似然函数,先取对数:
于是最大化对数似然函数,就相当于最小化:
这就从概率学角度完美地解释了最小二乘法的合理性。
五、模型检验
1. 拟合优度检验
值越大说明模型拟合效果越好。通常可以认为当
0.9″ loading=”lazy”> 时,所得到的回归直线拟合得很好,而当
时,所得到的回归直线很难说明变量之间的依赖关系。
2. 回归方程参数的检验
回归方程反应了因变量 随自变量
变化而变化的规律,若
,则
不随
变化,此时回归方程无意义。所以,要做如下假设检验:
若 为真,则回归平方和
与残差平方和
都是
的无偏估计,因而采用
统计量:
3. 用回归方程做预测
六、回到案例——例1
1. 做一元线性回归
lreg<-lm(sale~cost,data=dat)
summary(lreg)
结果说明:
(1) 回归方程为
sale= 5.58*cost – 23
(2) 回归系数显著不为0,其p值=5.94e-5 < 0.05
(3) 拟合优度R2=0.88,说明拟合效果很好
2. 回归系数的置信区间
confint(lreg,parm="cost",level=0.95)
3. 回归诊断
par(mfrow=c(2,2))
plot(lreg) #绘制回归诊断图
图1是残差拟合,越没有趋势越好,有趋势说明可能需要二次项;
图2是残差正态性检验,越落在虚线上越好(理想的残差服从0附件的正态分布,否则说明模型不够充分还有趋势没有提取出来);
图3检验残差是否等方差;
图4检验离群点,第6个样本点偏离较远,应该剔除掉重新做回归。
4. 剔除离群点,重新做一元线性回归
dat2<-dat[-6,]
lreg2<-lm(sale~cost,data=dat2)
summary(lreg2)
新回归模型拟合优度R2=0.946有了明显改进。新回归方程为:
sale = 5.28*cost – 15.15
plot(dat2)
abline(lreg2)
points(dat[6,],pch=8,col="red")
5. 用回归模型做预测
x<-data.frame(cost=c(100,110,120))
predict(lreg2,x,interval="prediction",level=0.95)
注意:做预测的自变量数据需要存为数据框格式。
参考文献:
- 《R语言实战》,Robort I. Kabacoff
- 矩阵简介与最小二乘法, 耿修瑞,中国科学院电子学研究所
- 最小二乘法解的矩阵形式推导
- 最小二乘法的极大似然解释
- 《数学建模与数学实验》,吴刚,张敬信等,中国商业出版社
版权所有,转载请注明
今天的文章【预测算法】01. 线性回归原理及R语言实现分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/15453.html