0

如果这个问题早点出现,我很抱歉,但我没有发现这样的问题。我的预测模型有问题。我想建立 xgboost 和随机森林。我使用的包要求在 xgboost 构造中,应该创建虚拟变量。问题是我是否应该使用虚拟集来构建两者?(即使森林可以处理计算并且不需要假人)?为了测试模型并进行比较,我还应该将训练集中的分类变量更改为虚拟变量,对吧?换句话说,我的训练集和测试集对于每个模型都必须相同吗?非常感谢您的帮助!

4

1 回答 1

2

我猜你正在使用这个mlr包,因为你已经用 mlr 标记了你的问题。

无论如何,当您创建假人时,您必须确保您的训练集不包含未包含在测试集中的变量(这在您创建假人时很容易发生)。否则,当您尝试对测试集进行预测时,您将遇到麻烦(因为经过训练的模型假设测试集至少具有相同的变量)。

除了创建虚拟变量,您还可以将分类变量转换为整数(如果我没记错的话,这就是 xgboost 在内部所做的)。这就是为什么如果您使用 mlr 拟合 xgboost 模型,我们会强制创建假人(请参阅https://github.com/mlr-org/mlr/issues/1561)。

如果您不想创建假人,您也可以这样做:

library(mlr)
lrn = makeLearner("regr.xgboost")
train(lrn, bh.task) # this gives you an error

lrn$properties = c(lrn$properties, "factors")
train(lrn, bh.task) # this works as xgboost supports factors
于 2018-01-11T13:00:47.807 回答