【问题标题】:Why my classifier is unable to learn postive classes?为什么我的分类器无法学习正类?
【发布时间】:2019-04-23 15:58:00
【问题描述】:

我目前正在执行分类,但我的分类器无法预测测试集上的正分类。

正负分布是 10:90。我使用分层抽样进行了 5 折交叉验证,结果似乎在所有折叠中都是连续的,而在测试中它预测所有类都是阳性的。

from xgboost.sklearn import XGBClassifier

scores =[]
clf1 = XGBClassifier() 
clf1.fit(X,y)
scores = cross_val_score(clf1, X, y, cv=skf.split(X, y), scoring='roc_auc')
print(scores.mean())
scores

同样的输出是

0.6286471235534742
array([0.62958638, 0.63038406, 0.6277138 , 0.63027538, 0.62527601])

我已将分类数据视为热编码。测试班分布为 14:86。它将所有类预测为负数。

我的训练数据集大小是 75002,44。

【问题讨论】:

    标签: python machine-learning


    【解决方案1】:

    使用 roc_auc 作为评分/评估函数的目的不是预测阈值为 0.5 的负类和正类,而是预测属于正类的概率等级。预测值的平均概率通常等于正类的个数与总数的比值,所以在正类比小、roc_auc小(0.6x比较小)的情况下,所有预测值都可能围绕平均概率分组(~0.10-0.15) 表明没有正类。如果您需要 roc_auc 不提供的功能,您应该更改评估功能。

    【讨论】:

    • 我也尝试过 f1,但没有任何改善
    • AUC 等于 0.6x 表明您的模型远非最优。这就是为什么改变评估功能没有改善的原因。您应该执行 XGBoost 超参数的特征工程和优化。
    猜你喜欢
    • 1970-01-01
    • 2016-09-10
    • 2012-03-14
    • 2021-06-17
    • 2020-07-20
    • 2020-05-04
    • 1970-01-01
    • 2017-12-22
    • 2015-02-24
    相关资源
    最近更新 更多