当训练数据居中时,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 哇,我怎么没想到呢?当我将测试集居中时,它工作得很好。但是,我仍然没有真正理解这个问题...对于其他模型,例如 (逐步)线性回归,弹性网,我没有将测试集居中, (稀疏或正交)偏最小二乘法,PCR 或ICR,...它给出的结果似乎可以接受。但是,当然,当我在居中的测试集上进行预测时,这些模型的结果现在也发生了变化......我认为与测试集相比,输入特征的简单位置偏移不会产生如此大的影响跨度> 【参考方案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 和随机森林导致对测试集的持续预测的主要内容,如果未能解决你的问题,请参考以下文章
Python 中用 XGBoost 和 scikit-learn 进行随机梯度增强
数据挖掘算法(logistic回归,随机森林,GBDT和xgboost)