我有一个5000行的特征数据集,我想对其进行二进制分类。我有两个类向量:
Y1 -这些类是相当均衡的(0 - 52%/ 1- 48%) Y2 -这些类非常不平衡(0 - 90%/1 - 10%)
我已经将数据集划分为一个训练集(4000个样本)和一个测试集(1000个样本)。
然后,我编写了简单的代码来获得dataset X
和类向量Y
,并使用len = 2
X number of minority class
创建了一个平衡的数据集。
例如,在上面的训练数据集中,使用90%/10%的类向量,将产生4001s和3200个样本,因此它将创建一个新的800个样本数据集,其中包含原来的400个1类样本和400个随机选择的0类样本,这将是平衡的。
因此,从一个4,000个样本不平衡训练集中,我得到了一个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级的精度很低。
我还使用了包不平衡-学习中的几种算法来创建一个平衡的数据集(比如欠采样、使用聚类质心,或者使用平滑支持向量机进行过采样),但是结果总是一样的--第一类(少数类)的精度仍然很低。
你能告诉我在这种情况下你会怎么做吗?我的目标是尝试将不平衡的类向量中的1级精度提高到0.6左右,就像在平衡类向量中的精度一样。
https://stackoverflow.com/questions/40520005
复制相似问题