【问题标题】:xgboost Random Forest with sparse matrix data and multinomial Y具有稀疏矩阵数据和多项式 Y 的 xgboost 随机森林
【发布时间】:2016-03-26 18:11:12
【问题描述】:

我不确定xgboost 的许多不错的功能是否可以按我需要的方式组合(?),但我想要做的是在多类因变量。

我知道xgboost 可以做任何一件事情:

bst <- xgboost(data = train$data, label = train$label, max.depth = 4, num_parallel_tree = 1000, subsample = 0.5, colsample_bytree =0.5, nround = 1, objective = "binary:logistic")

bst <- xgboost(data = sparse_matrix, label = output_vector, max.depth = 4, eta = 1, nthread = 2, nround = 10,objective = "binary:logistic")

  • Multinomial(多类)因变量模型通过multi:softmaxmulti:softprob

xgboost(data = data, label = multinomial_vector, max.depth = 4, eta = 1, nthread = 2, nround = 10,objective = "multi:softmax")

但是,当我尝试一次完成所有这些操作时,遇到了一个关于不合格 length 的错误:

sparse_matrix     <- sparse.model.matrix(TripType~.-1, data = train)
Y                 <- train$TripType
bst               <- xgboost(data = sparse_matrix, label = Y, max.depth = 4, num_parallel_tree = 100, subsample = 0.5, colsample_bytree =0.5, nround = 1, objective = "multi:softmax")
Error in xgb.setinfo(dmat, names(p), p[[1]]) : 
  The length of labels must equal to the number of rows in the input data
length(Y)
[1] 647054
length(sparse_matrix)
[1] 66210988200
nrow(sparse_matrix)
[1] 642925

我得到的长度错误是将我的单个多类依赖向量的长度(我们称之为 n)与稀疏矩阵索引的长度进行比较,我认为这是 j * n 表示 j 个预测变量。

这里的具体用例是 Kaggle.com Walmart 竞赛(数据是公开的,但默认情况下非常大——大约 650,000 行和数千个候选特征)。我一直在通过 H2O 在其上运行多项式 RF 模型,但听起来很多其他人一直在使用 xgboost,所以我想知道这是否可能。

如果不可能,那么我想知道是否可以/应该分别估计因变量的每个级别并尝试得出结果?

【问题讨论】:

    标签: r sparse-matrix random-forest xgboost


    【解决方案1】:

    这是正在发生的事情:

    当你这样做时:

    sparse_matrix &lt;- sparse.model.matrix(TripType~.-1, data = train)

    您正在丢失数据中的行

    sparse.model.matrix 默认不能处理 NA,当它看到是 1 时,它会丢弃该行

    恰好有 4129 行在原始数据中包含 NA。

    这是这两个数字的区别:

    length(Y)
    [1] 647054
    
    nrow(sparse_matrix)
    [1] 642925
    

    这在前面的例子中起作用的原因如下

    二项式:

    它正在回收 Y 向量并完成缺失的标签。 (这很糟糕)

    在随机森林的情况下:

    (我认为)这是因为我的随机森林从不使用先前树的预测,所以这个错误是看不见的。 (这很糟糕)

    外卖:

    前面的例子都不能很好地训练

    sparse.model.matrix 丢弃 NA,您在训练数据中丢失了行,这是一个大问题,需要解决

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2018-11-14
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 2014-07-08
      • 2019-10-14
      • 2016-04-24
      • 2019-09-02
      • 1970-01-01
      相关资源
      最近更新 更多