gpt4 book ai didi

python - 如何根据 ROC 结果设置 sklearn 分类器的阈值?

转载 作者:太空狗 更新时间:2023-10-29 17:17:50 25 4
gpt4 key购买 nike

我使用 scikit-learn 训练了一个 ExtraTreesClassifier(gini 指数),它非常适合我的需要。准确性不太好,但使用 10 折交叉验证,AUC 为 0.95。我想在我的工作中使用这个分类器。我是 ML 的新手,所以如果我问你一些概念上的错误,请原谅我。

我绘制了一些 ROC 曲线,据此,我似乎有一个特定的阈值,我的分类器开始表现良好。我想在拟合分类器上设置这个值,所以每次我调用预测时,分类器都会使用该阈值,我可以相信 FP 和 TP 率。

我也看到了这篇文章 ( scikit .predict() default threshold ),其中指出阈值不是分类器的通用概念。但由于 ExtraTreesClassifier 具有方法 predict_proba,并且 ROC 曲线也与阈值定义相关,在我看来我应该可以指定它。

我没有找到任何参数,也没有找到任何用于执行此操作的类/接口(interface)。如何使用 scikit-learn 为训练有素的 ExtraTreesClassifier(或任何其他分类器)设置阈值?

非常感谢,大肠杆菌

最佳答案

这是我所做的:

model = SomeSklearnModel()
model.fit(X_train, y_train)
predict = model.predict(X_test)
predict_probabilities = model.predict_proba(X_test)
fpr, tpr, _ = roc_curve(y_test, predict_probabilities)

然而,令我恼火的是,predict 选择了一个对应于 0.4% true positives(false positives 为零)的阈值。 ROC 曲线显示了一个阈值,我更喜欢我的问题,其中真阳性约为 20%(假阳性约为 4%)。然后我扫描 predict_probabilities 以找到与我最喜欢的 ROC 点对应的概率值。在我的例子中,这个概率是 0.21。然后我创建自己的预测数组:

predict_mine = np.where(rf_predict_probabilities > 0.21, 1, 0)

然后就可以了:

confusion_matrix(y_test, predict_mine)

返回我想要的:

array([[6927,  309],
[ 621, 121]])

关于python - 如何根据 ROC 结果设置 sklearn 分类器的阈值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41864083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com