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

正负分布为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。

最佳答案

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

关于python - 为什么我的分类器无法学习阳性类(class)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55803169/

10-15 01:19