预测任务是创建一个模型来找到一个数值变量和一组解释变量的关系。tcp
注意:函数
多元线性回归模型给出了一个有关目标变量和一组解释变量关系的线性函数。测试
首先须要处理数据集中的缺失值。code
library(DMwR) data(algae) algae <- algae[-manyNAs(algae), ] clean.algae <- knnImputation(algae, k = 10)
对处理完数据缺失值后的数据集应用线性计算函数。ip
lm.a1 <- lm(a1 ~ ., data = clean.algae[, 1:12]) summary(lm.a1) # 查看数据集线性特性
咱们能够经过查看数据集的线性特性,来判断当前数据集后续应该如何处理。若是计算出的置信水平很高,那么就说明当前计算出的线性模型是可使用的。若是计算出的置信水平很低,并且通过不断的消元后,仍然没法获得预期置信水平的数据集的话,那么就应该考虑更换数学模型来完成后续的预测。数学
置信水平:指整体参数值落在样本统计值某一区内的几率。it
置信区间:指在某一置信水平下,样本统计值与整体参数值间偏差范围。一般状况下,置信水平越高,置信区间越宽。io
示例:class
- 某人有95%的可能性(置信水平)有50%~60%的几率(置信区间)获选美国总统。
- 某件事情50%~60%几率(置信区间)发生的可信性为90%(置信水平)。
- 有80%的几率(置信水平),10%~30%(置信区间)的情侣在结婚后离婚。
注:样本值越多,置信区间越窄。在样本值恒定的状况下,置信水平越高,置信区间越宽。变量
Residuals - 残差,应该是均值为0且服从正态分布。(应尽量的小)
Estimate - 估计值
Std. Error - 标准差。(越小越好)
t value - t值,定义为估计值与其标准差的比。(|t|值越大越好)
Pr(>|t|) - {1 - Pr}表示置信水平(若是Pr为0.0001,则置信水平为99.99%。若是置信水平低于80%,即pr>0.1,则检验结果无心义)
Residual standard error - 残差标准差
Multiple R-squared - 多元R^2,代表模型与数据的吻合度,越趋近于1,则吻合度越高。
Adjusted R-squared - 调整R^2,代表模型与数据的吻合度,越趋近于1,则吻合度越高。
F-statistic - F统计值
p-value - {1 - p}表示拒绝原假设的置信水平(p值为0.0001表示99.99%原假设是错误的),若是p值过大(通常指p > 0.1)则单个系数的t检验没有意义。(p值越小越好)
咱们可使用anova()
函数来精简数据集线性特性的概览,从而找到须要被“消元”的数据属性。这个函数提供一个模型拟合的方差序贯分析。随着公式中项数的增长,模型的残差平方和减小对创建的模型进行方差分析。
anova(lm.a1)
根据精简数据线性特性概览,能够看到season
对减小模型拟合偏差的贡献最小(Pr = 0.965)。咱们可使用update()
函数对数据集的数据进行微调,将season
从数据集中摘除。
lm2.a1 <- update(lm.a1, . ~ . - season) summary(lm2.a1)
在获得新的精简数据集以后,咱们能够尝试对新旧数据集进行比较,经过对新旧数据集“不一样的可能性”来判断是否须要进一步消元。
anova(lm.a1, lm2.a1)
1-Pr
为显著性几率新旧模型差别的显著性几率为30%,说明二者的差距并不显著。
咱们可使用step()
函数来快速的完成线性消元的过程。
final.lm <- step(lm.a1)
Df
较大的值Sum of Sq
较小的值(本例中,消除了小于600的属性)summary(final.lm)
咱们能够看到Adjusted R-squared值(调整R^2)的值仍然达不到预期(越接近1,模型与数据越吻合),说明当前数据集不适合使用多元线性模型。
咱们可使用R的添加包rpart
来快速计算一个数据集的“回归树”。
若是咱们想创建一个回归树来预测结果,只要从根节点开始根据检验的结果,追踪某个分支,直到叶节点。叶节点目标变量的平均值就是树的预测值。
library(DMwR) library(rpart) data(algae) algae <- algae[-manyNAs(algae), ] rt.a1 <- rpart(a1 ~ ., data = algae[ , 1:12]) rt.a1
按照从左到右的顺序来观察生成的回归树:
咱们可使用prettyTree()
函数来美化回归树的输出结果
prettyTree(rt.a1)
注意:
查看回归树的基本参数
printcp(rt.a1)
咱们能够根据“偏差越小越好”的原则,来选择想要使用的CP值。
rt2.a1 <- prune(rt.a1, cp = 0.08) rt2.a1