不平衡数据集下的二元分类问题

4
我有一个具有5000行的特征数据集,我希望对其进行二元分类。我有两个相关类别向量:
Y1 - 类相当平衡(0- 52%/ 1- 48%) Y2 - 类非常不平衡(0- 90%/ 1-10%)
然后,我将数据集分为训练集(4000个样本)和测试集(1000个样本)。
接下来,我编写了简单的代码,获得数据集X和类向量Y,并使用len = 2 X number of minority class创建一个平衡的数据集。
例如,在上述训练数据集中,使用90%/ 10%的类别向量,会有400个1和3200个0,因此会创建一个新的800个样本数据集,其中包括原始400个类别1的样本和400个随机选择的类别0的样本,这将是平衡的。
因此,从4000个样本的不平衡训练集中,我获得了一个800个样本的平衡数据集,并用于训练学习算法。
然后,我在额外的1000个样本(测试集)上使用该模型。
我在两个类向量上都运行了平衡代码- 平衡和不平衡的(即使我不需要平衡类向量)。
当使用平衡类向量时,我得到了这个令人困惑的1,000个样本测试集矩阵:
[339 126

288 246]

     precision    recall  f1-score   support

0.0       0.54      0.73      0.62       465
1.0       0.66      0.46      0.54       534
avg / total 0.61 0.59 0.58 999

使用不平衡的类向量时,我得到了这个令人困惑的矩阵,用于 1,000 个样本测试集:
[574 274

73 78]

     precision    recall  f1-score   support

0.0       0.89      0.68      0.77       848
1.0       0.22      0.52      0.31       151
avg / total 0.79 0.65 0.70 999

正如您所看到的,类别1的精度非常低。

我还使用了来自imbalanced-learn包中的几个算法,创建平衡数据集(如欠采样、使用聚类中心或使用SMOTE SVM进行过采样),但结果始终如一 - 类别1(少数类)的精度仍然非常低。

请问在这种情况下,您会怎么做?我的目标是尝试将不平衡类向量中类别1的精度提高到约0.6,就像平衡类向量中一样。


我遇到了类似的情况,你有找到任何解决办法吗? - Charlotte
1个回答

1
如果我是你,我会更加重视未被充分代表的类别。 XGBoost 提供了丰富的参数集,可以用来构建一个好的模型。 这篇文章 详细讨论了Python中的参数设置。特别注意 scale_pos_weight 参数。
除此之外,我还会考虑添加一个验证集来评估模型的准确性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接