首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交叉验证与类不平衡

交叉验证与类不平衡
EN

Stack Overflow用户
提问于 2021-08-02 19:50:24
回答 1查看 102关注 0票数 0

我试图在二进制分类设置中训练XGBOOST,以1:5的比例对正负实例进行训练。我的数据与癌症检测类似,即FNs比FPs昂贵得多。经过相当多的阅读,我仍然对以下几点感到困惑:

首先,我有必要通过过度抽样来平衡班级吗?我的数据大小约为160,000,许多条目包含特定列的NaN。特别是关于XGBOOST,我知道调整scale_pos_weight是很常见的,但是文档(tuning.html)指出,这主要是为了整体的AUC性能。我关心的主要指标是回忆,但在一定程度上也是准确的。

第二,在超参数调优中,我应该尝试最大限度地利用什么度量?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-03 12:43:44

FNs比FPs贵得多。

您可以根据对假阴性和假阳性成本的估算来创建自己的目标函数。文档是这里,下面是您可以从中获得灵感的示例:

代码语言:javascript
复制
from sklearn.metrics import confusion_matrix

def your_objective(predt: np.ndarray, dtrain: xgb.DMatrix) -> Tuple[str, float]:
    y = (dtrain.get_label() > 0.5) * 1
    tn, fp, fn, tp = confusion_matrix(y, predt).ravel()

    your_gain = true_positive_cost * tp - false_positive_cost * fp
    max_gain = true_positive_cost * (fn + tp)

    result = your_gain / max_gain
    return 'your_objective', result

xgb.train(your_params,
          dtrain=dtrain,
          num_boost_round=10,
          obj='binary:hinge',
          feval=your_objective,
          evals=[(dtrain, 'dtrain'), (dtest, 'dtest')],
          evals_result=results)

您只需要定义true_positive_costfalse_positive_cost。是的,根据scale_pos_weight中类的比例,使用dtrain执行类的调整。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68627235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档