使用稀疏矩阵数据和多项式Y的xgboost随机森林

4
我不确定是否可以将xgboost的多个特性以我所需的方式结合起来运行一个有稀疏数据预测器的随机森林,用于多分类因变量。我知道xgboost可以通过调整参数做到以下任意一项:
1. 随机森林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") 2. 稀疏矩阵预测器

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")

然而,当我尝试同时执行它们时,遇到了关于不符合长度的错误:

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个预测变量,稀疏矩阵索引的长度应该是j* n

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

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

1个回答

6
这是正在发生的事情:
当您执行以下操作时: 您会从数据中丢失行
默认情况下,sparse.model.matrix无法处理NA值,一旦它遇到一个NA值,它就会删除该行。
恰好有4129行原始数据中包含NA值。
这是这两个数字之间的差异:
length(Y)
[1] 647054

nrow(sparse_matrix)
[1] 642925

这种方法在之前的例子中能够成功,原因如下:

在二项式情况下:

它会循环利用 Y 向量并完成缺失的标签。(这是不好的)

在随机森林情况下:

(我认为)这是因为随机森林从不使用先前树的预测结果,所以这个错误被忽略了。(这是不好的)

要点:

之前的例子都不能很好地进行训练。

sparse.model.matrix 会删除 NA 值,导致您在训练数据中失去了行,这是一个大问题,需要解决。

祝好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接