最快的虚拟变量转换包/函数
Fastest dummy variable conversion package / function
我有一个包含一堆因子变量的数据框,这些因子变量需要转换为虚拟变量才能与 xgboost
包一起使用。我目前在 caret
中使用 dummyVars
函数,它非常好但有点慢。有没有更快的方法来进行这种转换?
从 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 .
即使有数百个具有许多因子的变量也非常快。
我有一个包含一堆因子变量的数据框,这些因子变量需要转换为虚拟变量才能与 xgboost
包一起使用。我目前在 caret
中使用 dummyVars
函数,它非常好但有点慢。有没有更快的方法来进行这种转换?
从 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 .
即使有数百个具有许多因子的变量也非常快。