4

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

Y1 - 课程非常平衡(0 - 52%/ 1- 48%)

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

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

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

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

所以从一个 4000 个样本的不平衡训练集中,我得到一个 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

当使用不平衡类向量时,我得到了 1000 个样本测试集的这个令人困惑的矩阵:

[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 类的精度非常低。

我还使用了包不平衡学习中的几种算法来创建平衡数据集(例如欠采样、使用聚类质心或使用 SMOTE SVM 过采样),但结果始终相同 - 1 类的精度(少数族裔)保持在非常低的水平。

你能告诉我在这种情况下你会怎么做吗?我的目标是尝试将不平衡类向量中 1 类的精度提高到 0.6 左右,就像在平衡类向量中一样。

4

1 回答 1

1

在你的位置上,我会按比例加大对代表性不足的班级的重视。XGBoost提供了一组丰富的参数,您可以使用它们来构建一个好的模型。本文针对 Python 详细讨论了它们。具体检查scale_pos_weight参数。

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

于 2016-11-12T08:08:47.233 回答