我正在尝试使用 XGboost 实现自定义目标函数(在 R 中,但我也使用 python,所以关于 python 的任何反馈也很好)。
我创建了一个返回渐变和粗麻布的函数(它可以正常工作),但是当我尝试运行 xgb.train 时它不起作用。然后我决定以这个特定的顺序为每一轮打印预测、梯度和粗麻布。这是输出(只要我让它运行它就会不断重复):
[1] 0 0 0 0 0 0 0 0 0 0
[1] -0.034106908 -0.017049339 -0.034106908 -0.034106908 -0.034106908 -0.034106908 -0.034106908 -0.004256162 -0.034106908 -0.008520554
[1] 0.003836107 0.004272548 0.003836107 0.003836107 0.003836107 0.003836107 0.003836107 0.004408935 0.003836107 0.004381658
[0] 训练分数:0 验证分数:0
[1] 0 0 0 0 0 0 0 0 0 0
[1] -0.034106908 -0.017049339 -0.034106908 -0.034106908 -0.034106908 -0.034106908 -0.034106908 -0.004256162 -0.034106908 -0.008520554
[1] 0.003836107 0.004272548 0.003836107 0.003836107 0.003836107 0.003836107 0.003836107 0.004408935 0.003836107 0.004381658
[1] 训练分数:0 验证分数:0
我们可以看到,即使梯度和粗麻布看起来没问题,每一轮的预测都不会改变!!我不明白为什么会这样。如果有人遇到同样的问题或有想法,请分享。
我使用的代码如下,但我认为它不是很有帮助:
reg <- xgb.train(data = xgb.DMatrix(data.matrix(train[1:10,feature.names]),label=train$Response[1:10]),
nrounds = 1000,
obj = custom_obj,
feval = evalerror,
early.stop.round = 20,
maximize = TRUE,
watchlist = list(train = xgb.DMatrix(data.matrix(train[1:10,feature.names]),label=train$Response[1:10]),
val = xgb.DMatrix(data.matrix(cv[,feature.names]),label=cv$Response)),
param = list(eta = 0.5,
max_depth = 10,
colsample_bytree=0.7,
min_child_weight=50,
subsample=0.7,
base_score = 4))