当训练数据居中时,XGBoost 和随机森林导致对测试集的持续预测

Posted

技术标签:

【中文标题】当训练数据居中时,XGBoost 和随机森林导致对测试集的持续预测【英文标题】:XGBoost and Random Forest lead to constant predictions on test set when training data are centered 【发布时间】:2017-10-21 02:40:05 【问题描述】:

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

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

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

我的问题是: 为什么仅将训练数据居中会导致两种模型都出现这种奇怪的结果?

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

【问题讨论】:

您是否也使用与训练集相同的居中参数来居中测试集变量? @MarcoSandri 哇,我怎么没想到呢?当我将测试集居中时,它工作得很好。但是,我仍然没有真正理解这个问题...对于其他模型,例如 (逐步)线性回归弹性网,我没有将测试集居中, (稀疏或正交)偏最小二乘法PCRICR,...它给出的结果似乎可以接受。但是,当然,当我在居中的测试集上进行预测时,这些模型的结果现在也发生了变化......我认为与测试集相比,输入特征的简单位置偏移不会产生如此大的影响跨度> 【参考方案1】:

通过改变训练与测试来思考你在做什么。

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

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

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

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

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

【讨论】:

以上是关于当训练数据居中时,XGBoost 和随机森林导致对测试集的持续预测的主要内容,如果未能解决你的问题,请参考以下文章

随机森林、GBDT、Xgboost

Python 中用 XGBoost 和 scikit-learn 进行随机梯度增强

XGBoost 和随机森林在表格数据上优于深度学习?

数据挖掘算法(logistic回归,随机森林,GBDT和xgboost)

xgboost原理,怎么防止过拟合。随机森林,GBDT,Xgoost的区别,bagging和boosting

xgboost 包和随机森林回归