我有一个包含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左右,就像在平衡类向量中一样。
答案 0 :(得分:0)
在你的位置,我会按比例增加重量不足的课程。 XGBoost提供了一组丰富的参数,您可以使用这些参数来构建一个好的模型。 This article详细讨论了Python。具体检查scale_pos_weight
参数。
最重要的是,我还会考虑添加验证集来评估模型的准确性。