我正在尝试使用随机森林 - 0-84K,1- 16K为不平衡数据集创建二元分类模型。我尝试过使用class_weights ='balanced',class_weights = {0:1,1:5},下采样和过采样,但这些似乎都不起作用。我的指标通常在以下范围内:
Accuracy = 66%
Precision = 23%
Recall = 44%
我真的很感激任何帮助!感谢
答案 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删除)?
如果你已经尝试过这些,那么可能首先要确定算法。