【问题标题】:How to handle with dummy features如何处理虚拟特征
【发布时间】:2018-06-20 05:21:52
【问题描述】:

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

【问题讨论】:

  • 您应该使用 R 中的函数来构建正确的矩阵形式。我很确定这包含在其他有答案的问题中。也许您只需要在model.matrixfactor 上进行更全面的搜索。
  • 有一个机器学习stackexchange论坛。那里可能有有用的问答,但我投票结束这个对 SO 来说太宽泛了。
  • @42- 先生访问了您的个人资料。你真是太棒了..
  • 同时检查library(caret)中的dummyVars函数。

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


【解决方案1】:

我猜你正在使用 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

【讨论】:

    猜你喜欢
    • 2017-07-30
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 2020-02-02
    • 2013-09-04
    • 2019-08-13
    • 2018-04-13
    • 2011-10-21
    相关资源
    最近更新 更多