我有一个二进制分类任务,并使用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/