为什么 RMSE 值在较小的树上增加 (RPART)
Why do RMSE values increase on a smaller tree (RPART)
目标: 我想了解为什么 RMSE
在较小的树上增加。
CONTEXT: 我正在学习 rpart
算法。我有一些数据,我把它分成三个部分(训练、验证、测试)。我正在使用 this Kaggle dataset.
我适合的模特:
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
它从 46894
上升到 49964
。为什么?较小的树不应该更好地适应看不见的数据吗?
树大到足以表示数据的变化,树又不会大到过度拟合,两者之间始终存在平衡。更大的树有时会产生更好的结果的原因是它们可以更精细地划分数据,从而代表细微差别。较小的树有时会产生更好结果的原因是过度拟合的问题较少。但如果最小的树总是最好的,那为什么不只使用一个节点呢?仅使用根节点将使用平均值来估计值——不太可能非常准确。必须平衡这两种相互冲突的力量才能获得最佳结果。
目标: 我想了解为什么 RMSE
在较小的树上增加。
CONTEXT: 我正在学习 rpart
算法。我有一些数据,我把它分成三个部分(训练、验证、测试)。我正在使用 this Kaggle dataset.
我适合的模特:
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
它从 46894
上升到 49964
。为什么?较小的树不应该更好地适应看不见的数据吗?
树大到足以表示数据的变化,树又不会大到过度拟合,两者之间始终存在平衡。更大的树有时会产生更好的结果的原因是它们可以更精细地划分数据,从而代表细微差别。较小的树有时会产生更好结果的原因是过度拟合的问题较少。但如果最小的树总是最好的,那为什么不只使用一个节点呢?仅使用根节点将使用平均值来估计值——不太可能非常准确。必须平衡这两种相互冲突的力量才能获得最佳结果。