具有稀疏矩阵数据和多项式 Y 的 xgboost 随机森林
xgboost Random Forest with sparse matrix data and multinomial Y
我不确定 xgboost
的许多不错的功能是否可以按照我需要的方式组合 (?),但我想做的是 运行具有多 class 因变量上的稀疏数据预测变量的随机森林。
我知道 xgboost
可以做其中任何一件事情:
- Random Forest 通过调整
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 (multiclass) 因变量模型通过
multi:softmax
或 multi: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
我得到的长度错误是将我的单个多 class 相关向量(我们称之为 n)的长度与稀疏向量的长度进行比较矩阵索引,我认为是 j * n 对于 j 预测变量。
这里的具体用例是 Kaggle.com 沃尔玛竞争(数据是 public,但默认情况下非常大——大约 650,000 行和数千个候选特征)。我已经通过 H2O 在其上 运行 宁多项射频模型,但听起来很多其他人一直在使用 xgboost
,所以我想知道这是否可能。
如果不可能,那么我想知道是否有人 could/should 分别估计因变量的每个水平并尝试得出结果?
这是正在发生的事情:
当你这样做时:
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
删除 NA,你正在丢失训练数据中的行,这是一个大问题,需要解决
祝你好运!
我不确定 xgboost
的许多不错的功能是否可以按照我需要的方式组合 (?),但我想做的是 运行具有多 class 因变量上的稀疏数据预测变量的随机森林。
我知道 xgboost
可以做其中任何一件事情:
- Random Forest 通过调整
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 (multiclass) 因变量模型通过
multi:softmax
或multi: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
我得到的长度错误是将我的单个多 class 相关向量(我们称之为 n)的长度与稀疏向量的长度进行比较矩阵索引,我认为是 j * n 对于 j 预测变量。
这里的具体用例是 Kaggle.com 沃尔玛竞争(数据是 public,但默认情况下非常大——大约 650,000 行和数千个候选特征)。我已经通过 H2O 在其上 运行 宁多项射频模型,但听起来很多其他人一直在使用 xgboost
,所以我想知道这是否可能。
如果不可能,那么我想知道是否有人 could/should 分别估计因变量的每个水平并尝试得出结果?
这是正在发生的事情:
当你这样做时:
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
删除 NA,你正在丢失训练数据中的行,这是一个大问题,需要解决
祝你好运!