具有不平衡数据集问题的二进制分类

时间:2016-11-10 04:31:35

标签: machine-learning classification confusion-matrix precision-recall

我有一个包含5000行的要素数据集,我想在其上进行二进制分类。我有2个类向量:

  

Y1 - 课程相当平衡(0 - 52%/ 1- 48%)

     

Y2 - 班级非常不平衡(0 - 90%/ 1 - 10%)

我已将数据集拆分为训练集(4,000个样本)和测试集(1,000个样本)。

然后,我编写了简单的代码来获取数据集X和类向量Y,并使用len = 2 X number of minority class创建了一个平衡数据集。

例如,在上面的训练数据集中,使用90%/ 10%类向量,将有400个1和3,200个,因此它将创建一个新的800个样本数据集,其中包含原始的400个1级和400个样本随机选择的0级样本,将是平衡的。

因此,从4,000个样本不平衡训练集中,我获得了800个样本平衡数据集,并将其用于训练学习算法。

然后我使用在额外的1,000个样本(测试集)上创建的模型。

我在两个类向量上运行了平衡代码 - 平衡和不平衡的(即使我在平衡类向量中不需要它)。

当使用平衡类向量时,我得到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左右,就像在平衡类向量中一样。

1 个答案:

答案 0 :(得分:0)

在你的位置,我会按比例增加重量不足的课程。 XGBoost提供了一组丰富的参数,您可以使用这些参数来构建一个好的模型。 This article详细讨论了Python。具体检查scale_pos_weight参数。

最重要的是,我还会考虑添加验证集来评估模型的准确性。