你能修复 scikit learn 分类器中的假阴性率吗
Posted
技术标签:
【中文标题】你能修复 scikit learn 分类器中的假阴性率吗【英文标题】:Can you fix the false negative rate in a classifier in scikit learn 【发布时间】:2015-12-14 18:08:30 【问题描述】:我在 scikit learn 中使用 Random Forest classifer 来处理两个类的不平衡数据集。我更担心假阴性而不是假阳性。是否可以固定假阴性率(例如 1%)并要求 scikit 以某种方式优化假阳性率?
如果这个分类器不支持它,是否还有另一个分类器支持?
【问题讨论】:
你或许可以使用分类器的predict_proba
方法来设置你自己的辨别阈值。
【参考方案1】:
我发现这篇关于类不平衡问题的文章。
http://www.chioka.in/class-imbalance-problem/
基本上已经讨论了以下几种可能的解决方案来总结:
基于成本函数的方法 基于抽样的方法 SMOTE(合成少数过采样技术) 最近的方法:RUSBoost、SMOTEBagging 和 Underbagging希望对你有帮助。
【讨论】:
【参考方案2】:随机森林已经是一个袋装分类器,因此应该已经给出了一些好的结果。
获得所需的假阳性或假阴性精度的一种典型方法是使用 ROC 曲线对其进行分析 http://scikit-learn.org/stable/auto_examples/plot_roc.html 例如,修改某些参数以实现所需的 FP 速率。
不确定是否可以使用参数调整随机森林分类器的 FP 率。您可以根据您的应用查看其他分类器。
【讨论】:
【参考方案3】:相信使用class_weight
参数可以部分解决sklearn中类不平衡的问题。
这个参数或者是一个字典,每个类都被分配一个统一的权重,或者是一个告诉sklearn如何构建这个字典的字符串。例如,将此参数设置为“自动”,将按与其频率的倒数成比例的比例加权每个类别。
通过以较高的数量对较少存在的类进行加权,您最终可以获得“更好”的结果。
SVM 或 逻辑回归 等分类器也提供此 class_weight
参数。
ThisStack Overflow 的回答给出了一些关于如何处理类不平衡的其他想法,比如欠采样和过采样。
【讨论】:
RandomForestClassifier 在 master 中也有 class_weight(并且会在一周左右的发布版本中拥有它)。 @AndreasMueller 谢谢。如果我真的只关心一个固定的假阴性权重,那么将假阳性权重指定为损失函数并尝试使用支持用户定义的损失函数的分类器之一进行优化是否有意义? @AndreasMueller 另一件事。 0.16.1 文档声称 RandomForestClassifier 具有 class_weight 。这目前不可用吗? 它应该可以工作。没有具有用户定义损失函数的模型。不过,您可以根据用户定义的记分器选择超参数。以上是关于你能修复 scikit learn 分类器中的假阴性率吗的主要内容,如果未能解决你的问题,请参考以下文章
使用 Scikit-Learn API 时如何调整 XGBoost 分类器中的概率阈值
如何从 scikits.learn 分类器中提取信息然后在 C 代码中使用