不平衡数据集 - 二进制分类Python

时间:2018-04-03 17:29:08

标签: python classification random-forest precision-recall

我正在尝试使用随机森林 - 0-84K,1- 16K为不平衡数据集创建二元分类模型。我尝试过使用class_weights ='balanced',class_weights = {0:1,1:5},下采样和过采样,但这些似乎都不起作用。我的指标通常在以下范围内:

Accuracy =      66%
Precision =     23%
Recall =        44%

我真的很感激任何帮助!感谢

2 个答案:

答案 0 :(得分:0)

有很多方法可以改善分类器的行为。如果您认为您的数据是平衡的(或者更确切地说,您的权重方法足够平衡它们),那么考虑扩展您的森林,无论是更深的树木还是更多的树木。

尝试其他方法,如SVM或ANN,看看他们如何比较。

答案 1 :(得分:0)

尝试对数据集进行分层抽样,以便您可以同时考虑测试和训练数据集中的常数比率。然后使用已经使用过的类权重平衡。如果你想提高准确度还有其他方法。

1)首先确保提供的数据集准确或经过验证。

2)你可以通过播放概率的阈值来提高准确度(如果在二进制分类中,如果其> 0.7自信然后进行预测,那么其他方面明智的做法,这种方法中的退回将是NULL值或者大部分都没有预测算法不够自信,但对于商业模式来说这是一个很好的方法,因为人们在他们的模型中更喜欢假阴性。

3)使用分层抽样来均衡划分训练和测试数据集,以便分配恒定的比率。而不是train_test_splitting:分层抽样将返回训练和测试的索引。你可以玩(cross_validation:不同的迭代)

4)对于混淆矩阵,看看每个类的精确分数,看看哪个类显示更多(我相信如果你应用阈值限制,它将解决这个问题。

5)尝试其他分类器,Logistic,SVM(线性或与其他内核):LinearSVC或SVC,NaiveBayes。正如在二进制分类的大多数情况下所看到的,Logistc和SVC似乎在其他算法之前执行。虽然先尝试这些方法。

6)确保检查拟合的最佳参数,例如选择超参数(使用具有几个学习速率或不同内核或类权重或其他参数的Gridsearch)。如果它的文本分类是你将CountVectorizer与TFIDF一起使用(你是否使用max_df和stop_words删除)?

如果你已经尝试过这些,那么可能首先要确定算法。

相关问题