zoukankan      html  css  js  c++  java
  • xgboost 自定义评价函数(metric)与目标函数

    比赛得分公式如下:

    其中,P为Precision , R为 Recall。

    GBDT训练基于验证集评价,此时会调用评价函数,XGBoost的best_iteration和best_score均是基于评价函数得出。

    评价函数:

    input: preds和dvalid,即为验证集和验证集上的预测值,

    return  string 类型的名称 和一个flaot类型的fevalerror值表示评价值的大小,其是以error的形式定义,即当此值越大是认为模型效果越差。

    1 from sklearn.metrics import confusion_matrix
    2 def customedscore(preds, dtrain):
    3     label = dtrain.get_label()
    4     pred = [int(i>=0.5) for i in preds]
    5     confusion_matrixs = confusion_matrix(label, pred)
    6     recall =float(confusion_matrixs[0][0]) / float(confusion_matrixs[0][1]+confusion_matrixs[0][0])
    7     precision = float(confusion_matrixs[0][0]) / float(confusion_matrixs[1][0]+confusion_matrixs[0][0])
    8     F = 5*precision* recall/(2*precision+3*recall)*100
    9     return 'FSCORE',float(F)

     应用:

     训练时要传入参数:feval = customedscore,

     1    params = { 'silent': 1,  'objective': 'binary:logistic' , 'gamma':0.1,
     2         'min_child_weight':5,
     3         'max_depth':5,
     4         'lambda':10,
     5         'subsample':0.7,
     6         'colsample_bytree':0.7,
     7         'colsample_bylevel':0.7,
     8         'eta': 0.01,
     9         'tree_method':'exact'}
    10     model = xgb.train(params, trainsetall, num_round,verbose_eval=10, feval = customedscore,maximize=False)

    自定义 目标函数,这个我没有具体使用

    1 # user define objective function, given prediction, return gradient and second order gradient
    2 # this is log likelihood loss
    3 def logregobj(preds, dtrain):
    4     labels = dtrain.get_label()
    5     preds = 1.0 / (1.0 + np.exp(-preds))
    6     grad = preds - labels
    7     hess = preds * (1.0-preds)
    8     return grad, hess
    # training with customized objective, we can also do step by step training
    # simply look at xgboost.py's implementation of train
    bst = xgb.train(param, dtrain, num_round, watchlist, logregobj, evalerror)

    参考:

    https://github.com/dmlc/xgboost/blob/master/demo/guide-python/custom_objective.py

    http://blog.csdn.net/lujiandong1/article/details/52791117

  • 相关阅读:
    HDU 2563 统计问题 (DFS + 打表)
    KendoUi中KendoDropDownList控件的使用——三级级联模块的实现
    POJ 1325 && ZOJ 1364--Machine Schedule【二分图 && 最小点覆盖数】
    crontab FAQ
    思科2960trunk vlan配置及路由IP配置
    hdoj-1593-find a way to escape【数学题】
    Java编程思想(四) —— 复用类
    在 Android 应用程序中使用 SQLite 数据库以及怎么用
    Swift Standard Library Reference.pdf
    VC、IE、ASP环境下打印、预备的完美解决方式
  • 原文地址:https://www.cnblogs.com/zle1992/p/6914577.html
Copyright © 2011-2022 走看看