Xgboost - 我们是否必须将整数转换为因子,如果它们只是0& 1

时间:2017-02-19 10:30:14

标签: r xgboost one-hot-encoding

我在数据框中有很多列是标记" 0"和" 1"。他们属于班级"整数"当我导入数据帧时。

0表示缺席,1表示存在于所有列中。

我是否需要将它们转换为fators?[因素将使得1级和1级2目前它们几乎相似0& 1虽然是整数]

我计划稍后使用xgboost来构建预测模型。 Xgboost仅适用于数字列,因此如果我将列转换为因子,那么我需要对它们进行一次热编码以将它们转换为数字。

(旁边问题:如果我们进行一次热编码以消除共线性,我们是否总是需要删除一列?)

2 个答案:

答案 0 :(得分:0)

简短回答:取决于。是的,只是为了更好的变量解释。否0/1变量整数和因子都相同。

如果你问我的个人意见,那么我更倾向于是;因为你更可能还有一些分类变量,它们要么具有字符串值要么超过2个等级,要么除了0和1之外还有2个整数等级。在所有上述情况下,0/1变量整数和因子都不相同。只有0/1二进制级别的特定情况;整数变量和因子是相同的。因此,您可能希望在编码中保持一致性,甚至也希望将其用于0/1案例。

看自己:

a <- c(1,2,1,2,1,2,5)
c<-as.character(a)
b<-as.factor(c)
d<-as.integer(b)

这里我只是玩a向量,最后给了我:

> d
[1] 1 2 1 2 1 2 3

因此,如果您不想调试未来值的变化,请从开始使用as.factor()

侧面答案:是的。搜索model.matrix()contrasts.arg以便在R中完成此操作。

答案 1 :(得分:0)

错误指出xgb.DMatrix采用数值,其中数据是整数。

将数据转换为数字使用

train[] <- lapply(train, as.numeric)

然后使用

xgb.DMatrix(data=data.matrix(train))