Machine learning 具有不平衡数据集问题的二元分类
我有一个5000行的特征数据集,我想在上面进行二元分类。我有两个类向量: Y1-课程相当均衡(0-52%/1-48%) Y2-课程非常不平衡(0-90%/1-10%) 我已经将数据集拆分为一个培训集(4000个示例)和一个测试集(1000个示例) 然后,我编写了简单的代码来获取数据集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个随机选择的样
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
参数
此外,我还将考虑添加一个验证集来评估模型的准确性。
我遇到了类似的情况,你找到了解决方案吗?