r - 自定义目标函数来优化 Fscore - XGBOOST

标签 r xgboost

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

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

据我所知xgboost - 当 boosting 开始构建树时,目标函数被迭代优化,当所有树组合在一起时,最终实现最佳性能。

在我的数据中,由于类不平衡,我面临着 Accuracy Paradox 的问题。 .在模型的最后,我能够取得巨大的成就 accuracy但是 可怜的 precisionrecall
我想要一个自定义目标函数,它可以优化模型并返回具有最佳 f-score 的最终 xgboost 模型。 .或者我可以使用任何其他可以返回最佳的目标函数f-score ?

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

最佳答案

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

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

关于r - 自定义目标函数来优化 Fscore - XGBOOST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43650582/

相关文章:

r - 如何为ggplot制作eventReactive或observeEvent?

python - 我对使用 Xgboost 的 hyperopt 包的 fmin() 函数有很大的兴趣

python - xgboost.XGBClassifier 中可用的目标函数有哪些不同选项?

python - 如何绘制 XGBoost 评估指标?

r - Windows 上的 H2O XGBoost : Error: java. lang.UnsatisfiedLinkError : ml. dmlc.xgboost4j.java.XGBoostJNI.XGDMatrixCreateFromCSREx([J[I[FI[J]I

r - 如何在超过 2^31 个观察值中使用 biglm

r - R 中的模式按组

r - 在向量中某个符号最后一次出现后提取字符

r - 如何从数据创建 r 矩阵或表

python - XGBoost 对列表与数组的预测略有不同,哪个是正确的?