r - XGBoost 和随机森林导致在训练数据集上持续预测当训练数据集居中时



我正在做组学数据分析,我有一个 269x600 的数据集,我将其分为训练集和测试集 (80-20)。我要预测的变量是马尿酸盐的浓度,有 4 个不同的值(0、75、150、300),但我正在对它进行回归。

我在中心训练集上使用caret基础设施运行随机森林和 XGBoost,在那里我进行了交叉验证以选择最佳超参数。 问题是,当我使用选定的模型预测测试集时,我获得了(几乎)恒定的预测。也就是说,整个测试集的值约为 269。

但是,当我在非中心训练集上运行相同的模型时,预测非常好,甚至优于我之前的所有模型。

因此,我的问题是:为什么只将训练数据居中的事实会导致两个模型的奇怪结果?

我知道这些模型不需要这样的预处理才能工作,但我不明白为什么如果我们预处理它不起作用,为什么当我们只集中数据时结果会变化那么大......

通过移动火车与测试来考虑你在做什么。

您可能会确保测试集中的每个样本都超出训练数据的范围。

因此,与训练数据相比,测试数据中的每个特征实际上都是相同的(非常高或非常低),并且最终将位于训练模型的相同终端节点中。

因此,它们都将产生相同的预测

这证明了树模型不能很好地推断

require(xgboost)
X <- matrix(rnorm(10000, mean = 10),nrow = 100)
y <- sample(c(0,1) , 100, replace = T)
bst1 <- xgboost(data = X, label = y, nrounds = 20)
# gonna scale test and not train
# test predictions are the same
p <- predict(  bst1, newdata = scale(X))
> p
[1] 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985
[9] 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985
[17] 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985
[25] 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985
[33] 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985
[41] 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985
[49] 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985
[57] 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985
[65] 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985
[73] 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985
[81] 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985
[89] 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985 0.3643985
[97] 0.3643985 0.3643985 0.3643985 0.3643985

最新更新