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

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

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

我拟合了模型:

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, #实际值     predicted = pred_base )

这个第一棵树的rmse_base是: 46894

然后,我查看了cptable,根据最低的xerror+xstd规则选择了最佳树。

    CP nsplit rel error xerror  xstd1  0.446      0      1.00   1.00 0.0962  0.114      1      0.55   0.56 0.0543  0.078      2      0.44   0.48 0.0554  0.035      3      0.36   0.41 0.0375  0.021      4      0.33   0.40 0.0466  0.018      5      0.31   0.41 0.0477  0.017      6      0.29   0.39 0.0458  0.017      7      0.27   0.39 0.0459  0.013      8      0.25   0.37 0.04310 0.010      9      0.24   0.35 0.043

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

opt_index <- 7cp_opt <- homes_model$cptable[opt_index, "CP"]# 修剪模型(到最优的cp值)homes_model_opt <- prune(tree = homes_model,                          cp = cp_opt)

我绘制了它:

enter image description here

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

#计算预测值 pred_opt <- predict(object=homes_model_opt,                newdata = homes_test)#计算RMSErmse_opt <- rmse(actual=homes_test$SalePrice, #实际值     predicted = pred_opt) #预测值

它从46894上升到了49964。为什么?较小的树不应该更好地拟合未见过的数据吗?


回答:

树的大小总是需要在足够大以表示数据变化和不至于过大以至于过拟合之间找到平衡。较大的树有时能产生更好的结果是因为它们能更细致地分割数据,从而反映出细微差别。较小的树有时能产生更好的结果是因为它们在过拟合上的问题较少。但如果最小的树总是最好的,那为什么不只用一个节点呢?只使用根节点会用平均值来估计,这不太可能真的准确。这两种相互冲突的力量必须平衡以获得最佳结果。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注