正确训练模型

R 中的监督学习:回归

Nina Zumel and John Mount

Win-Vector, LLC

模型在训练集上可能远好于在未来数据上的表现。

  • 训练集 $R^2$:0.9;测试集 $R^2$:0.15 —— 过拟合
R 中的监督学习:回归

训练/测试拆分

当数据充足时的推荐方法

R 中的监督学习:回归

示例:建模女性失业率

  • 用 66 行训练,用 30 行测试
R 中的监督学习:回归

模型表现:训练 vs 测试

  • 训练:RMSE 0.71,$R^2$ 0.8
  • 测试:RMSE 0.93,$R^2$ 0.75
R 中的监督学习:回归

交叉验证

当数据不足以留出测试集时优先使用

R 中的监督学习:回归

交叉验证

R 中的监督学习:回归

交叉验证

R 中的监督学习:回归

交叉验证

R 中的监督学习:回归

创建交叉验证计划

library(vtreat)
splitPlan <- kWayCrossValidation(nRows, nSplits, NULL, NULL)
  • nRows:训练数据的行数
  • nSplits:交叉验证的折数(分区数)
    • 例如,nfolds = 3 表示三折交叉验证
  • 其余 2 个参数此处无需设置
R 中的监督学习:回归

创建交叉验证计划

library(vtreat)
splitPlan <- kWayCrossValidation(10, 3, NULL, NULL)

第一折(A 与 B 训练,C 测试)

splitPlan[[1]]
$train
1  2  4  5  7  9 10
$app
3 6 8

在 A 与 B 上训练,在 C 上测试,依此类推…

split <- splitPlan[[1]]
model <- lm(fmla, data = df[split$train,])
df$pred.cv[split$app] <- predict(model, newdata = df[split$app,])
R 中的监督学习:回归

最终模型

R 中的监督学习:回归

示例:失业率模型

指标 RMSE $R^2$
训练 0.7082675 0.8029275
测试 0.9349416 0.7451896
交叉验证 0.8175714 0.7635331
R 中的监督学习:回归

让我们练习吧!

R 中的监督学习:回归

Preparing Video For Download...