【问题标题】:Imbalanced Dataset - Binary Classification Python不平衡数据集 - 二进制分类 Python
【发布时间】:2018-09-13 03:03:49
【问题描述】:

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

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

我非常感谢您对此的任何帮助!谢谢

【问题讨论】:

  • 具体编程题是什么?如果您的问题是关于统计的,您应该将其发布在 Cross Validated 上:stats.stackexchange.com

标签: python classification random-forest precision-recall


【解决方案1】:

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

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

【讨论】:

  • 我尝试使用 SVM,但运行时间很长。关于如何改进它的任何建议?下面是来自 sklearn.preprocessing 的代码 import Scaler from sklearn.cross_validation import StratifiedKFold from sklearn.grid_search import GridSearchCV scaler = Scaler() X = scaler.fit_transform(X) C_range = 10. ** np.arange(-3, 8) gamma_range = 10. ** np.arange(-5, 4) param_grid = dict(gamma=gamma_range, C=C_range) grid = GridSearchCV(SVC(), param_grid=param_grid, cv=StratifiedKFold(y=Y, k=5 ), class_weight = 'balanced') grid.fit(X, Y)
【解决方案2】:

尝试对数据集进行分层抽样,这样您就可以获得测试和训练数据集都考虑在内的恒定比率。然后使用你已经使用过的类权重平衡。如果您想提高准确性,还有很多其他方法。

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

2)您可以通过使用概率阈值来提高准确性(如果在二进制分类中,如果其 >0.7 置信度则进行预测,否则不明智地进行预测,这种方法的缺点将是 NULL 值或主要是不作为算法进行预测是不够自信的,但对于商业模型来说,这是一种很好的方法,因为人们更喜欢在他们的模型中使用较少的 False Negative。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-09
    • 2017-08-16
    • 2015-01-28
    • 2023-03-12
    • 2019-11-05
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    相关资源
    最近更新 更多