如何处理虚拟功能

时间:2018-01-10 23:09:59

标签: r machine-learning prediction data-science mlr

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

1 个答案:

答案 0 :(得分: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