Xgboost - 如果整数只有 0 和 1,我们是否必须将整数转换为因子
Xgboost - Do we have to convert integers to factors if they are only 0 & 1
我在数据框中有很多列,它们是标志“0”和“1”。当我导入数据框时,它们属于 class "integer"。
0 表示不存在,1 表示在所有列中存在。
我需要将它们转换为因子吗?[因子将成为级别 1 和 2,而目前它们几乎类似于 0 和 1,尽管是整数]
我计划稍后使用 xgboost 构建预测模型。
Xgboost 仅适用于数字列,因此如果我将列转换为因子,那么我将需要对它们进行单热编码以将它们转换为数字。
(附带问题:如果我们进行一次热编码以消除共线性,是否总是需要删除一列?)
简短回答:视情况而定。是的,只是为了更好的变量解释。否 0/1 变量整数和因子都相同。
如果你问我个人的意见,那么我更倾向于是;因为您更有可能拥有一些分类变量,这些变量要么具有字符串值,要么具有 2 个以上级别或 2 个除 0 和 1 以外的整数级别。在所有上述情况下,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 中完成此操作。
错误指出 xgb.DMatrix
采用数值,其中数据是整数。
将数据转换为数值使用
train[] <- lapply(train, as.numeric)
然后使用
xgb.DMatrix(data=data.matrix(train))
我在数据框中有很多列,它们是标志“0”和“1”。当我导入数据框时,它们属于 class "integer"。
0 表示不存在,1 表示在所有列中存在。
我需要将它们转换为因子吗?[因子将成为级别 1 和 2,而目前它们几乎类似于 0 和 1,尽管是整数]
我计划稍后使用 xgboost 构建预测模型。 Xgboost 仅适用于数字列,因此如果我将列转换为因子,那么我将需要对它们进行单热编码以将它们转换为数字。
(附带问题:如果我们进行一次热编码以消除共线性,是否总是需要删除一列?)
简短回答:视情况而定。是的,只是为了更好的变量解释。否 0/1 变量整数和因子都相同。
如果你问我个人的意见,那么我更倾向于是;因为您更有可能拥有一些分类变量,这些变量要么具有字符串值,要么具有 2 个以上级别或 2 个除 0 和 1 以外的整数级别。在所有上述情况下,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 中完成此操作。
错误指出 xgb.DMatrix
采用数值,其中数据是整数。
将数据转换为数值使用
train[] <- lapply(train, as.numeric)
然后使用
xgb.DMatrix(data=data.matrix(train))