我正在尝试对不平衡类别(1%和99%零)的分类数据实施xgboost
。
我使用binary:logistic
作为分类的目标函数。
根据我对xgboost
的了解 - 当增强开始构建树时,目标函数在所有树组合时最终迭代地实现最佳性能。
由于班级不平衡导致我的数据,我面临Accuracy Paradox的问题。在模型的最后,我可以实现很棒accuracy
但差 precision
和recall
我想要一个自定义目标函数,可以优化模型并返回最佳f-score
的最终xgboost模型。或者我可以使用任何其他能够以最佳f-score
返回的目标函数吗?
F-Score =(2 * Precision * Recall)/(Precision + Recall)
答案 0 :(得分:4)
我不是这方面的专家,但我认为这个评估指标应该起到作用:
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))
}
<强> 参考文献: 强>