{caret}xgbTree模型在包含权重时未运行,没有权重时运行良好

{caret}xgbTree模型在包含权重时未运行,没有权重时运行良好,r,xgboost,r-caret,R,Xgboost,R Caret,我有一个数据集,我可以用它构建一个没有权重的xgbTree模型,但是一旦我包含了权重——即使权重都是1——模型就不会收敛。我明白了 有点不对劲;缺少所有RMSE度量值:错误,当我打印警告时,我在nominalTrainWorkflow(x=x,y=y,wts=weights,info=trainInfo,…)中得到:在重新采样的性能度量中缺少值。作为最后一条消息 对于包含该信息的RData文件,该文件太大,无法打印,较小的样本并不总是重现该错误 它包含3个对象:input\u x、input\u

我有一个数据集,我可以用它构建一个没有权重的xgbTree模型,但是一旦我包含了权重——即使权重都是1——模型就不会收敛。我明白了 有点不对劲;缺少所有RMSE度量值:错误,当我打印警告时,我在nominalTrainWorkflow(x=x,y=y,wts=weights,info=trainInfo,…)中得到
:在重新采样的性能度量中缺少值。
作为最后一条消息

对于包含该信息的RData文件,该文件太大,无法打印,较小的样本并不总是重现该错误

它包含3个对象:
input\u x
input\u y
wts
——最后一个对象只是1的向量,但它最终应该能够接受间隔(0,1)上的数字,理想情况下。我使用的代码如下所示。请注意产生错误的weight参数旁边的注释

nrounds<-1000

tune_grid <- expand.grid(
  nrounds = seq(from = 200, to = nrounds, by = 50),
  eta = c(0.025, 0.05, 0.1, 0.3),
  max_depth = c(2, 3, 4, 5),
  gamma = 0,
  colsample_bytree = 1,
  min_child_weight = 1,
  subsample = 1
)

tune_control <- caret::trainControl(
  method = "cv", 
  number = 3, 
  verboseIter = FALSE, 
  allowParallel = TRUE 
)

xgb_tune <- caret::train(
    x = input_x,
    y = input_y,
    weights = wts, # If I remove this line, the code works fine. When included, even if just 1s, it throws an error.
    trControl = tune_control,
    tuneGrid = tune_grid,
    method = "xgbTree",
    verbose = TRUE
  )
nrounds根据权重参数称为
wts

行:

运行

xgb_tune <- caret::train(
    x = input_x,
    y = input_y,
    wts = wts,
    trControl = tune_control,
    tuneGrid = tune_grid,
    method = "xgbTree",
    verbose = TRUE
  )

xgb\u tune查看下面的解决方案是否适用于您。我运行了几圈您的代码,一切正常。没有在整个范围内尝试。可能还与并行有关
xgb_tune <- caret::train(
    x = input_x,
    y = input_y,
    wts = wts,
    trControl = tune_control,
    tuneGrid = tune_grid,
    method = "xgbTree",
    verbose = TRUE
  )