为什么RMSE值在较小的树上增加(RPART)

时间:2018-11-21 16:34:33

标签: r machine-learning regression cart rpart

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

上下文:我正在学习rpart算法。我有一些数据,将其分为三个部分(培训,验证,测试)。我正在使用this Kaggle dataset.

我适合模型:

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

有了这个基础树:

enter image description here

然后,我根据测试数据计算出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)

我画了它:

enter image description here

然后,我根据测试数据在这棵较小的树上再次计算了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

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

1 个答案:

答案 0 :(得分:2)

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