【发布时间】:2017-10-25 15:50:14
【问题描述】:
我有一个包含一堆因子变量的数据框,这些变量需要转换为虚拟变量,以便与xgboost 包一起使用。我目前正在使用caret 中的dummyVars 函数,这非常好,但有点慢。有没有更快的方法来进行这种转换?
【问题讨论】:
标签: r sparse-matrix xgboost dummy-variable
我有一个包含一堆因子变量的数据框,这些变量需要转换为虚拟变量,以便与xgboost 包一起使用。我目前正在使用caret 中的dummyVars 函数,这非常好,但有点慢。有没有更快的方法来进行这种转换?
【问题讨论】:
标签: r sparse-matrix xgboost dummy-variable
在Matrix 包中,model.matrix 和sparse.model.matrix 都可以完成这项工作,而且我总是很快就能找到它们。例如
require(Matrix)
oat_data <- data.frame( num = c(1,2,4,8,16),
animal = c("cat","cat","dog","cat","horse"),
oats = c("likes","dislikes","dislikes","likes","dislikes"))
dense_mat <- model.matrix(~.-1,data=oat_data, verbose = F)
sparse_mat <- sparse.model.matrix(~.-1,data=oat_data, verbose = F)
dense_mat
num animalcat animaldog animalhorse oatslikes
1 1 1 0 0 1
2 2 1 0 0 0
3 4 0 1 0 0
4 8 1 0 0 1
5 16 0 0 1 0
sparse_mat
num animalcat animaldog animalhorse oatslikes
1 1 1 . . 1
2 2 1 . . .
3 4 . 1 . .
4 8 1 . . 1
5 16 . . 1 .
即使有数百个包含许多因素的变量也非常快。
【讨论】: