我有一个具有5000行的特征数据集,我希望对其进行二元分类。我有两个相关类别向量:
Y1 - 类相当平衡(0- 52%/ 1- 48%) Y2 - 类非常不平衡(0- 90%/ 1-10%)
然后,我将数据集分为训练集(4000个样本)和测试集(1000个样本)。
接下来,我编写了简单的代码,获得数据集X和类向量Y,并使用len = 2 X number of minority class创建一个平衡的数据集。
例如,在上述训练数据集中,使用90%/ 10%的类别向量,会有400个1和3200个0,因此会创建一个新的800个样本数据集,其中包括原始400个类别1的样本和400个随机选择的类别0的样本,这将是平衡的。
因此,从4000个样本的不平衡训练集中,我获得了一个800个样本的平衡数据集,并用于训练学习算法。
然后,我在额外的1000个样本(测试集)上使用该模型。
我在两个类向量上都运行了平衡代码- 平衡和不平衡的(即使我不需要平衡类向量)。
当使用平衡类向量时,我得到了这个令人困惑的1,000个样本测试集矩阵:
使用不平衡的类向量时,我得到了这个令人困惑的矩阵,用于 1,000 个样本测试集:
Y1 - 类相当平衡(0- 52%/ 1- 48%) Y2 - 类非常不平衡(0- 90%/ 1-10%)
然后,我将数据集分为训练集(4000个样本)和测试集(1000个样本)。
接下来,我编写了简单的代码,获得数据集X和类向量Y,并使用len = 2 X number of minority class创建一个平衡的数据集。
例如,在上述训练数据集中,使用90%/ 10%的类别向量,会有400个1和3200个0,因此会创建一个新的800个样本数据集,其中包括原始400个类别1的样本和400个随机选择的类别0的样本,这将是平衡的。
因此,从4000个样本的不平衡训练集中,我获得了一个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的精度非常低。
我还使用了来自imbalanced-learn包中的几个算法,创建平衡数据集(如欠采样、使用聚类中心或使用SMOTE SVM进行过采样),但结果始终如一 - 类别1(少数类)的精度仍然非常低。
请问在这种情况下,您会怎么做?我的目标是尝试将不平衡类向量中类别1的精度提高到约0.6,就像平衡类向量中一样。