具有可调精度与召回率的分类器

机器算法验证 分类 精确召回
2022-03-11 03:31:51

我正在研究一个二元分类问题,其中没有误报更为重要;相当多的假阴性是可以的。例如,我在 sklearn 中使用了一堆分类器,但我认为它们都没有能力显式调整精确召回权衡(它们确实产生了很好的结果,但不可调整)。

哪些分类器具有可调节的精度/召回率?有什么方法可以影响标准分类器的精度/召回率权衡,例如随机森林或 AdaBoost?

3个回答

几乎所有 scikit-learn 的分类器都可以给出决策值(通过decision_functionpredict_proba)。

根据决策值,可以直接计算精确召回和/或 ROC 曲线。scikit-learn 在其metrics子模块中提供了这些功能。

一个最小的例子,假设你有data并且labels有适当的内容:

import sklearn.svm
import sklearn.metrics
from matplotlib import pyplot as plt

clf = sklearn.svm.LinearSVC().fit(data, labels)
decision_values = clf.decision_function(data)

precision, recall, thresholds = sklearn.metrics.precision_recall_curve(labels, decision_values)

plt.plot(recall, precision)
plt.show()

在遇到这个问题之前,我刚刚为自己解决了这个问题,所以我决定分享我的解决方案。

它使用与 Marc Claesen 提出的相同方法,但回答了关于如何调整分类器以在精度轴上移动更高的实际问题,以权衡召回。

X_test 是数据,y_test 是真实标签。分类器应该已经安装好了。

y_score = clf.decision_function(X_test)

prcsn,rcl,thrshld=precision_recall_curve(y_test,y_score)

min_prcsn=0.25 # here is your precision lower bound e.g. 25%
min_thrshld=min([thrshld[i] for i in range(len(thrshld)) if prcsn[i]>min_prcsn])

这就是你如何使用新学习的最小阈值来调整你的预测(否则你只会调用 predict(X_test))

y_pred_adjusted=[1 if y_s>min_thrshld else 0 for y_s in y_score]

很高兴听到您对此调整配方的反馈。

这是功能

http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier.predict_proba

产生类别概率。然后使用各种指标来调整阈值 P,您可以按照伪代码在决策中使用它

如果 p(y)>P,则 y=1 否则 y=0 endif