机器学习:原理与实战简明教程 02-回归(一)
内容纲要
欢迎转载,注明出处:机器学习:原理与实战简明教程 02-回归(一)
什么是回归问题:简单的说,就是研究y和x之间关系的问题
前提知识:
1)R语言基础
2)gglot2包
1)R语言基础
2)gglot2包
回归包括:
1)线性回归:一元,多元
2)广义线性回归:逻辑回归,其他
3)非线性回归
1)线性回归:一元,多元
2)广义线性回归:逻辑回归,其他
3)非线性回归
回归要做的事情:
1)确定回归方程:初始方程
1)确定回归方程:初始方程
2)分析多重共线性问题,去掉或添加变量(线性或者非线性)
3)预测和控制
4)参数可信度分析,预测可信度分析,去掉奇异点
3)预测和控制
4)参数可信度分析,预测可信度分析,去掉奇异点
来个简单实例,看看看看一元线性回归的处理步骤:
例子:
已知:
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)
求一元线性回归模型,并且对结果进行分析?
例子:
已知:
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)
求一元线性回归模型,并且对结果进行分析?
步骤:
1)画图,如果可以的话:
1)画图,如果可以的话:
plot(x,y)
得到散点图:
2)分析:可能是一元线性关系
3)初步建模:
lm.sol<-lm(y ~ 1+x)#表示y=a+bx
4)分析结果:
summary(lm.sol)
> summary(lm.sol)
Call:
lm(formula = y ~ 1 + x)#最后模型表示y=a+bx
Residuals:#残差的五点分布,就是箱线图的那五个点,最小值,下四分位,均值,上四分位,最大值
Min 1Q Median 3Q Max
-2.0431 -0.7056 0.1694 0.6633 2.2653
Coefficients:#参数系数分析
Estimate Std. Error t value Pr(>|t|)
(Intercept) 28.493 1.580 18.04 5.88e-09 ***#a分析,星越多越好,p值越小越好
x 130.835 9.683 13.51 9.50e-08 ***#b分析
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.319 on 10 degrees of freedom#整体的残差分析,越小越好
Multiple R-squared: 0.9481, Adjusted R-squared: 0.9429 #相关系数分析,越大越好
F-statistic: 182.6 on 1 and 10 DF, p-value: 9.505e-08#整体模型的F统计分析,p越小越好
Estimate Std. Error t value Pr(>|t|)
(Intercept) 28.493 1.580 18.04 5.88e-09 ***#a分析,星越多越好,p值越小越好
x 130.835 9.683 13.51 9.50e-08 ***#b分析
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.319 on 10 degrees of freedom#整体的残差分析,越小越好
Multiple R-squared: 0.9481, Adjusted R-squared: 0.9429 #相关系数分析,越大越好
F-statistic: 182.6 on 1 and 10 DF, p-value: 9.505e-08#整体模型的F统计分析,p越小越好
5)对模型参数进行区间估计:
beta.int(lm.sol)
tip:可以用attributes(lm.sol)看有啥可以用的属性
---
beta.int<-function(fm,alpha=0.05){
A<-summary(fm)$coefficients#取出系数
df<-fm$df.residual#取出残差
left<-A[,1]-A[,2]*qt(1-alpha/2, df)#计算分布,df是自由度,注意公式和r软件的不太一样,公式是alpha/2,r是1-alpha/2
right<-A[,1]+A[,2]*qt(1-alpha/2, df)
rowname<-dimnames(A)[[1]]#获得系数名称
colname<-c("Estimate", "Left", "Right")#设置列名,即预测的系数值,在置信度范围内的系数最小和最大值
matrix(c(A[,1], left, right), ncol=3,
dimnames = list(rowname, colname )) #返回结果
}
---
> beta.int(lm.sol)
Estimate Left Right
(Intercept) 28.49282 24.97279 32.01285
x 130.83483 109.25892 152.41074
---
beta.int<-function(fm,alpha=0.05){
A<-summary(fm)$coefficients#取出系数
df<-fm$df.residual#取出残差
left<-A[,1]-A[,2]*qt(1-alpha/2, df)#计算分布,df是自由度,注意公式和r软件的不太一样,公式是alpha/2,r是1-alpha/2
right<-A[,1]+A[,2]*qt(1-alpha/2, df)
rowname<-dimnames(A)[[1]]#获得系数名称
colname<-c("Estimate", "Left", "Right")#设置列名,即预测的系数值,在置信度范围内的系数最小和最大值
matrix(c(A[,1], left, right), ncol=3,
dimnames = list(rowname, colname )) #返回结果
}
---
> beta.int(lm.sol)
Estimate Left Right
(Intercept) 28.49282 24.97279 32.01285
x 130.83483 109.25892 152.41074
6)用模型进行预测,并求预测的区间
new<-data.frame(x=0.16)
lm.pred<-predict(lm.sol,new,interval = "prediction",level = 0.95)
lm.pred
> lm.pred
fit lwr upr
1 49.42639 46.36621 52.48657#标准预测结果,最小最大可能预测结果
new<-data.frame(x=0.16)
lm.pred<-predict(lm.sol,new,interval = "prediction",level = 0.95)
lm.pred
> lm.pred
fit lwr upr
1 49.42639 46.36621 52.48657#标准预测结果,最小最大可能预测结果
至此,一个简单的一元线性回归模型解决实际问题的步骤就完成了。接下来我们再看更复杂的例子。
留言