自定义错误度量标准不会更改预测XGBoost R.

问题描述 投票:0回答:1

我创建了一个自定义错误指标,在我运行XGBoost xgb.train时打印,但实际上对输出没有任何影响。据我所知,它只是打印轮次的自定义错误指标,但不使用它来确定准确性。

我认为这是因为预测输出与我使用默认误差度量时完全相同。我也尝试将错误输出硬编码为静态1,以便输出应该是随机的,但结果完全相同。

我是否需要为自定义错误指标创建自定义目标函数?

谢谢!

我的代码:

# xgboost fitting with arbitrary parameters
xgb_params_1 = list(
  objective = "reg:linear",                                               
  eta = 0.2,                                                       
  max.depth = 6,                                                      
  booster =  "gbtree"   
)


evalerror <- function(preds, dtrain) {
  labels <- getinfo(dtrain, "label")


  score <- as.numeric((sum(preds[1:1000]) - sum(labels[1:1000] )) / sum(labels[1:1000]) ) 

  return(list(metric="custom_error",value=1))

}


myWatch <- list(val=dvalid,train=dtrain)
# fit the model with the arbitrary parameters specified above
xgb_1 = xgb.train(data = dtrain,
                params = xgb_params_1,
                nrounds = 150,                                            
                nthread = 6,
                verbose = T,                                         
                print_every_n = 50,
                watchlist = myWatch,
                early_stop_round = 1000,                                                    
                eval_metric = evalerror,
                disable_default_eval_metric = 1

)

# Perform a prediction
pred <- predict(xgb_1, dvalid)
results <- cbind(as.data.table(pred), as.data.table(data[year > trainEndDate,"total_installs"]))


#Compute test RMSE
sqrt(mean((results$pred - results$total_installs)**2))

印刷错误指标:

enter image description here

python r xgboost
1个回答
1
投票

自定义eval_metric仅用于评估目的。它会在每一轮(使用手表时)显示,并且调整增强轮的数量很有用,您可以在进行交叉验证时使用它来调整参数以最大化/最小化您的指标。我特别使用它来调整我的学习率,使模型以更少的轮数更快地收敛。

自定义目标函数是一种完全不同的野兽,它与评估指标不同。它更像是一种类型的模型,如分类,回归等。它驱动模型的收敛。如果你仍然想要它是xgboost regression objective的一个例子。

© www.soinside.com 2019 - 2024. All rights reserved.