我不确定xgboost
是否有许多不错的功能可以按照我需要的方式组合(?),但我要做的是运行具有稀疏数据预测器的随机森林在多类因变量上。
我知道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")
multi:softmax
或multi: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
,所以我想知道这是否可行。
如果不可能,那么我想知道是否可以/应该分别估计因变量的每个级别并尝试得出结果?
答案 0 :(得分:5)
以下是发生的事情:
执行此操作时:
sparse_matrix <- sparse.model.matrix(TripType~.-1, data = train)
您正在丢失数据中的行
默认情况下, sparse.model.matrix
无法处理NA,当它看到一个时,它会丢弃行
正好恰好有4129行在原始数据中包含NA。
这是这两个数字之间的差异:
length(Y)
[1] 647054
nrow(sparse_matrix)
[1] 642925
这对前面的例子起作用的原因如下
在二项式案例中:
它正在回收Y矢量并完成缺失的标签。 (这是不好的)
在随机森林案例中:
(我认为)这是因为我随机森林从不使用以前树木的预测,所以这个错误是看不见的。 (这是不好的)
<强>外卖:强>
以前的两个例子都不会很好地训练
sparse.model.matrix
会丢弃您的训练数据中丢失的行数,这是一个很大的问题需要解决