获取预测模型

预测任务是建立一个模型来找到一个数值变量和一组解释变量的关系。

注意:

  • R中的线性回归不能使用有缺失值的数据集,因而在使用线性回归之前,需要对对数据集中的缺失值进行填充。
  • 回归树模型可以很自然地处理带有缺失值的数据集,因此如果没有很好的办法能够填充缺失值的时候,采用回归树模型是一种很好的办法。

多元线性回归

多元线性回归模型给出了一个有关目标变量和一组解释变量关系的线性函数。

首先需要处理数据集中的缺失值。

library(DMwR)
data(algae)

algae <- algae[-manyNAs(algae), ]
clean.algae <- knnImputation(algae, k = 10)

对处理完数据缺失值后的数据集应用线性计算函数。

lm.a1 <- lm(a1 ~ ., data = clean.algae[, 1:12])

summary(lm.a1)    # 查看数据集线性特性

我们可以通过查看数据集的线性特性,来判断当前数据集后续应该如何处理。如果计算出的置信水平很高,那么就说明当前计算出的线性模型是可以使用的。如果计算出的置信水平很低,而且经过不断的消元后,仍然无法得到预期置信水平的数据集的话,那么就应该考虑更换数学模型来完成后续的预测。

置信水平:指总体参数值落在样本统计值某一区内的概率。

置信区间:指在某一置信水平下,样本统计值与总体参数值间误差范围。通常情况下,置信水平越高,置信区间越宽。

示例:

  1. 某人有95%的可能性(置信水平)有50%~60%的概率(置信区间)获选美国总统。
  2. 某件事情50%~60%概率(置信区间)发生的可信性为90%(置信水平)。
  3. 有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)
  • Pr - 针对参数F的置信水平,用以标明当前数据属性对“拟合误差”的贡献,越小越好。

根据精简数据线性特性概览,可以看到season对减少模型拟合误差的贡献最小(Pr = 0.965)。我们可以使用update()函数对数据集的数据进行微调,将season从数据集中摘除。

lm2.a1 <- update(lm.a1, . ~ . - season)

summary(lm2.a1)

在得到新的精简数据集之后,我们可以尝试对新旧数据集进行比较,通过对新旧数据集“不同的可能性”来判断是否需要进一步消元。

anova(lm.a1, lm2.a1)
  • Sum of Sq - 误差平方和
  • Pr - 显著性值,1-Pr为显著性概率

新旧模型差异的显著性概率为30%,说明两者的差距并不显著。

我们可以使用step()函数来快速的完成线性消元的过程。

final.lm <- step(lm.a1)
  1. 消除Df较大的值
  2. 消除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

按照从左到右的顺序来观察生成的回归树:

  • 整棵树共有198个观测实例
  • 相对平均值的偏差为90401.290,不同值与平均值之差的平方和
  • 平均值为16.996460

我们可以使用prettyTree()函数来美化回归树的输出结果

prettyTree(rt.a1)

注意:

  • 预测模型的过度拟合会导致陷入原始数据集的“虚假关系”当中
  • R中裁剪树枝的方法,使用生成树函数的限制条件参数
    • 偏差的减少小于某一个给定界限值时,cp
    • 当节点中的样本数量小于某个给定值时,minsplit
    • 当树的深度大于一个给定的界限值时,maxdepth

查看回归树的基本参数

printcp(rt.a1)
  • CP - 临界参数
  • nsplit - 测试次数
  • rel error - 相对误差值
  • xerror - 预测相对误差/估计误差,用于交叉验证
  • xstd - 标准误差
  • xerror ± xstd - 平均相对误差,使用随机抽样计算,‘和’越小越好

我们可以根据“误差越小越好”的原则,来选择想要使用的CP值。

rt2.a1 <- prune(rt.a1, cp = 0.08)
rt2.a1

转载于:https://my.oschina.net/skyler/blog/737431

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐