我有一个包含 5000 行的要素数据集,我想对其进行二进制分类。我有 2 个类向量:
Y1 - 课程非常平衡(0 - 52%/ 1- 48%)
Y2 - 班级非常不平衡(0 - 90%/1 - 10%)
我已将数据集拆分为一个训练集(4,000 个样本)和一个测试集(1,000 个样本)。
然后,我编写了简单的代码来获取数据集X
和类向量,并使用XY
创建了一个平衡的数据集。len = 2
number 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 左右,就像在平衡类向量中一样。