(1)xgboost中自定义目标函数的参数传入顺序
自定义的xgboost目标函数传入的第一个参数是预测值,第二个参数是真实值,这个顺序与gridSearchCV函数的scorning参数对应自定义目标函数正好相反,需要注意。
(2)示例及用法
举几个xgboost中自定义目标函数:
def customedscore(preds, dtrain):
label = dtrain.get_label()
pred = [int(i>=0.5) for i in preds]
confusion_matrixs = confusion_matrix(label, pred)
recall =float(confusion_matrixs[0][0]) / float(confusion_matrixs[0][1]+confusion_matrixs[0][0])
precision = float(confusion_matrixs[0][0]) / float(confusion_matrixs[1][0]+confusion_matrixs[0][0])
F = 5*precision* recall/(2*precision+3*recall)*100
return 'FSCORE',float(F)
def xg_eval_mae(yhat, dtrain):
y = dtrain.get_label()
return 'mae', mean_absolute_error(np.exp(y), np.exp(yhat))
使用方法:在xgb.train和xgb.cv中将自定义的目标函数赋值给feval参数即可。
model = xgb.train(params, trainsetall, num_round,verbose_eval=10,
feval = customedscore,maximize=False)
bst_cv1 = xgb.cv(xgb_params, dtrain, num_boost_round=50, nfold=3, seed=0,
feval=xg_eval_mae, maximize=False, early_stopping_rounds=10)