【问题标题】:Custom Objective Function to optimize Fscore - XGBOOST自定义目标函数以优化 Fscore - XGBOOST
【发布时间】:2017-09-24 19:46:16
【问题描述】:

我正在尝试在具有不平衡类(1% 的 1 和 99% 的零)的分类数据上实现 xgboost

我使用binary:logistic作为分类的目标函数。

根据我在xgboost 上的知识 - 随着 boosting 开始构建树,目标函数被迭代优化,最终在所有树组合时达到最佳性能。

在我的数据中,由于类不平衡,我面临Accuracy Paradox 的问题。在模型结束时,我能够达到出色的 accuracy precisionrecall

我想要一个自定义目标函数,它可以优化模型并返回具有最佳 f-score 的最终 xgboost 模型。或者我可以使用任何其他可以返回最佳f-score 的目标函数吗?

其中F-Score = (2 * Precision * Recall)/(Precision + Recall)

【问题讨论】:

    标签: r xgboost


    【解决方案1】:

    我不是这方面的专家,但我认为这个评估指标应该可以胜任:

    f1score_eval <- function(preds, dtrain) {
      labels <- getinfo(dtrain, "label")
    
      e_TP <- sum( (labels==1) & (preds >= 0.5) )
      e_FP <- sum( (labels==0) & (preds >= 0.5) )
      e_FN <- sum( (labels==1) & (preds < 0.5) )
      e_TN <- sum( (labels==0) & (preds < 0.5) )
    
      e_precision <- e_TP / (e_TP+e_FP)
      e_recall <- e_TP / (e_TP+e_FN)
    
      e_f1 <- 2*(e_precision*e_recall)/(e_precision+e_recall)
    
      return(list(metric = "f1-score", value = e_f1))
    }
    

    参考资料:

    https://github.com/dmlc/xgboost/issues/1152

    http://xgboost.readthedocs.io/en/latest/parameter.html

    【讨论】:

    • 我在这里不明白的是 preds 是什么?这是您传递给 eval_metric 的函数,对吗?那么如何从计算模型的位置访问预测值呢?
    • 问题是针对 OBJECTIVE 功能,而不是针对 EVALUATION 功能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    相关资源
    最近更新 更多