首页 > 解决方案 > 为什么 RMSE 值在较小的树上增加(RPART)

问题描述

目标:我想了解为什么RMSE在一棵较小的树上会增加。

背景:我正在学习rpart算法。我有一些数据,我把它分成三个部分(训练、验证、测试)。我正在使用这个 Kaggle 数据集。

我适合模型:

homes_model <- rpart(formula = SalePrice ~ ., 
                     data = homes_train, 
                     method = "anova")

使用此基础树:

在此处输入图像描述

然后,我计算了测试数据的 RMSE:

pred_base <- predict(object=homes_model,
                newdata = homes_test)

library(Metrics)
rmse_base <- rmse(actual=homes_test$SalePrice, #Actual values
     predicted = pred_base )

rmse_base第一棵树的 是:46894

然后,我看着cptable按照最低xerror+xstd规则挑选最好的树。

    CP nsplit rel error xerror  xstd
1  0.446      0      1.00   1.00 0.096
2  0.114      1      0.55   0.56 0.054
3  0.078      2      0.44   0.48 0.055
4  0.035      3      0.36   0.41 0.037
5  0.021      4      0.33   0.40 0.046
6  0.018      5      0.31   0.41 0.047
7  0.017      6      0.29   0.39 0.045
8  0.017      7      0.27   0.39 0.045
9  0.013      8      0.25   0.37 0.043
10 0.010      9      0.24   0.35 0.043

我选择了有 7 个分裂的树:

opt_index <- 7
cp_opt <- homes_model$cptable[opt_index, "CP"]

# Prune the model (to optimized cp value)
homes_model_opt <- prune(tree = homes_model, 
                         cp = cp_opt)

我绘制了它:

在此处输入图像描述

然后我RMSE在测试数据的这个较小的树上再次计算:

#Computing predicted values 
pred_opt <- predict(object=homes_model_opt,
                newdata = homes_test)

#Compute RMSE
rmse_opt <- rmse(actual=homes_test$SalePrice, #Actual values
     predicted = pred_opt) #Predicted values

它从 上升4689449964。为什么?较小的树不应该更好地适应看不见的数据吗?

标签: rmachine-learningregressioncartrpart

解决方案


在足够大以表示数据变化的树与不至于过拟合的树之间始终存在平衡。更大的树有时会产生更好的结果的原因是它们更精细地划分数据,因此代表细微差别。较小的树有时会产生更好的结果的原因是过度拟合的问题较少。但是如果最小的树总是最好的,那为什么不只使用一个节点呢?仅使用根节点会使用平均值来估计值 - 不太可能真的准确。必须平衡这两种相互冲突的力量,才能获得最好的结果。


推荐阅读