我有一个二进制分类任务,并使用xgboost软件包来解决它。基本上,我只是使用增强树来做到这一点。但是我正在对Brier分数进行评估,因此我认为我将优化Brier损失函数(定义为在逻辑分类之上应用的brier分数),这使我可以如下定义Brier损失的梯度和粗麻布:

def brier(preds, dtrain):
   labels = dtrain.get_label()
   preds = 1.0 / (1.0 + np.exp(-preds))
   grad = 2*(preds-labels)*preds*(1-preds)
   hess = 2*(2*(labels+1)*preds-labels-3*preds*preds)*preds*(1-preds)
   return grad, hess

def evalerror(preds, dtrain):
   preds = 1.0 / (1.0 + np.exp(-preds))
   labels = dtrain.get_label()
   errors = (labels - preds)**2
   return 'brier-error', float(np.sum(errors)) / len(labels)

param = {'eta':0.01,
'max_depth': 6,  # the maximum depth of each tree
#'objective': 'binary:logistic',
'booster' : 'gbtree',
'eval_metric':['rmse', 'auc']}

bst = xgb.train(param,dtrain, num_boost_round=999,early_stopping_rounds=10,obj=brier, feval=evalerror,evals=[(dtrain,'train'),(dtest,'test')])


唯一的问题是,这样做会使我对测试集的预测得到负值,这表明xgboost模型的输出不是预期的逻辑概率。
有谁知道我在这里缺少什么,或者是否有更好的方法来优化石楠木得分?

任何帮助将非常感激!!

谢谢,

最佳答案

我认为您可能需要查看以下内容:https://arxiv.org/pdf/1610.02757.pdf

引用作者的话:“请注意,XGBoost不适用于确切的粗麻布,但不能用于其对角线近似。”

关于python - 如何在Brier分数上优化升压树以进行分类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52595782/

10-12 18:03