【问题标题】:XGB sparse matrix from a dataframe来自数据帧的 XGB 稀疏矩阵
【发布时间】:2018-02-13 08:53:48
【问题描述】:

阅读XGB vignette

我们正在使用火车数据。如上所述,数据和标签 存储在列表中。

在稀疏矩阵中,包含 0 的单元不存储在内存中。 因此,在主要由 0 组成的数据集中,内存大小会减少。它 拥有这样的数据集是很常见的。

之后,小插图也会告诉您如何使用密集矩阵。

我有一个从文本数据派生的数据框,因此它非常稀疏,因为大多数值为零。我一直在将数据帧传递给 XGB,它需要很长时间才能运行,但也许这是意料之中的。我正在对 1M 观察、92 个变量进行训练,并且正在使用带有 15 个处理器的托管 RStudio 64gb(当我在终端中监控时,我看到 XGB 也在使用所有可用的处理器)。

我的问题是,我是否必须对我的数据框进行某种转换以使其成为稀疏矩阵?

library(tidyverse)
library(caret)
library(xgboost)

## xgboost
# set up parameter search
xgb_grid = expand.grid(  #  stopped using differing permutations of parameters because training was taking so long
  nrounds = 150,
  eta = 0.3, # default 0.3; previously verified 0.3 was best model with 100k sample
  max_depth = 6, # default 6; previously verified 6 was best model with 100k sample
  gamma = 0, #default = 0
  colsample_bytree = 1, # default = 1
  min_child_weight = 1, # default = 1
  subsample = 1 # default = 1
)

# fit a xgboost model
print("begin xgb")
mod_xgb <- train(
  cluster ~.,
  data = select(training_data, -id),
  method = "xgbTree",
  trControl = train_control,
  na.action = na.pass,
  tuneGrid = xgb_grid,
  metric = "Kappa"
)

> str(training_data)
'data.frame':   1000000 obs. of  92 variables:
 $ violat          : num  0 0 0 0 0 0 0 0 0 0 ...
 $ found           : num  0 0 0 0 0 0 0 0 0 0 ...
 $ person          : num  0 0 0 0 0 0 0 0 0 0 ...
 $ theft           : num  0 0 0 1 0 0 0 0 0 0 ...
 $ theft_from      : num  0 0 0 0 0 0 0 0 0 0 ...

我问是因为我想知道我是否以某种方式将我的数据框 training_data 更改为 XGB 的稀疏矩阵,也许模型会训练得更快?会吗?

如何使 training_data 成为稀疏矩阵以传递给 XGBoost?

【问题讨论】:

    标签: r r-caret xgboost


    【解决方案1】:

    Matrix 包具有以下函数来创建稀疏矩阵sparse.model.matrix()。如果在创建稀疏矩阵之前从数据中删除 NA,以确保在输入 xgboost 函数时因变量 y 与稀疏矩阵的长度相同,这可能会有所帮助。

    我还倾向于记录训练数据中的因子水平,以便在对看不见的测试数据集进行预测时,我可以确保测试数据与训练数据具有相同的因子水平。这样可以确保测试数据矩阵与训练矩阵具有相同的维度。

    来自 mtcars 的示例:

    f<-mpg~hp+as.factor(cyl)
    trainMatrix<-sparse.model.matrix(f,mtcars)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 2016-08-03
      • 2016-02-01
      相关资源
      最近更新 更多