Machine learning 具有不平衡数据集问题的二元分类

Machine learning 具有不平衡数据集问题的二元分类,machine-learning,classification,confusion-matrix,precision-recall,Machine Learning,Classification,Confusion Matrix,Precision Recall,我有一个5000行的特征数据集,我想在上面进行二元分类。我有两个类向量: Y1-课程相当均衡(0-52%/1-48%) Y2-课程非常不平衡(0-90%/1-10%) 我已经将数据集拆分为一个培训集(4000个示例)和一个测试集(1000个示例) 然后,我编写了简单的代码来获取数据集X和类向量Y,并创建了一个平衡的数据集,其中len=2X少数类的数量 例如,在上面的训练数据集中,使用90%/10%类向量,将有400个1和3200个0,因此它将使用类1的原始400个样本和类0的400个随机选择的样

我有一个5000行的特征数据集,我想在上面进行二元分类。我有两个类向量:

Y1-课程相当均衡(0-52%/1-48%)

Y2-课程非常不平衡(0-90%/1-10%)

我已经将数据集拆分为一个培训集(4000个示例)和一个测试集(1000个示例)

然后,我编写了简单的代码来获取数据集
X
和类向量
Y
,并创建了一个平衡的数据集,其中
len=2
X
少数类的数量

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

因此,从4000个样本的不平衡训练集中,我得到了800个样本的平衡数据集,并用它来训练学习算法

然后,我使用在额外1000个样本(测试集)上创建的模型

我在两个类向量上运行了平衡代码——平衡类向量和非平衡类向量(尽管我在平衡类向量中不需要它)

当使用平衡类向量时,我得到1000个样本测试集的混淆矩阵:

[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
[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
当使用不平衡类向量时,我得到1000个样本测试集的混淆矩阵:

[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
[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左右,就像在平衡类向量中一样。

在你的位置上,我会按比例将更大的权重放在代表性不足的类上。提供一组丰富的参数,您可以使用这些参数构建良好的模型。针对Python详细讨论了它们。特别检查
scale\u pos\u weight
参数


此外,我还将考虑添加一个验证集来评估模型的准确性。

我遇到了类似的情况,你找到了解决方案吗?