似乎网格调整xgboost模型的预期方法是使用插入包,如下所示:https://stats.stackexchange.com/questions/171043/how-to-tune-hyperparameters-of-xgboost-trees
但是,我很难理解丢失数据的情况。在不使用插入符号的情况下创建模型时,我将缺失设置为NA。
dtrain = xgb.DMatrix(data = data.matrix(train$data),label = train$label,missing = NA)
这允许我像这样创建模型:
bst = xgboost(data = dtrain,depth = 4,eta =.3,nthread = 2,
nround = 43, print.every.n = 5,
objective = "binary:logistic",eval_metric = "auc",verbose = TRUE
)
这非常好用,但是,插入符没有采用这种对象。
这就是我正在尝试的:
xgbtrain = train(x = train$data,y = as.factor(make.names(train$label)),
trControl = trControl, tuneGrid = my_grid,method = "xgbTree")
但是对于每次迭代它都告诉我:
Error in xgb.DMatrix(as.matrix(x), label = y) : can not open file "NA"
当我没有将我的遗失设置为NA时,这是我在常规xgb.boost中获得的相同错误消息。 xgb.DMatrix不是我可以从中获取数据的子表对象,也不可能将其转换为数据帧。我该如何解决这个问题?
修改
想出来。最后,它与丢失的数据无关,而是与数据集中的因素有关。我没有使用xgboost的函数转换为稀疏矩阵,而是使用了常规的model.matrix(),并且能够成功地将新矩阵插入到插入符号的列车功能中。