python - 如何为没有概率的二元分类器(svm)绘制 ROC 并计算 AUC?
问题描述
我有一些 SVM 分类器(LinearSVC)为测试集中的每个样本输出最终分类,比如
1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1
等等。
“真相”标签也类似于
1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1
我想用一些参数运行该 svm,并为 roc 曲线生成点,并计算 auc。
我可以自己做到这一点,但我确信有人在我之前就这样的情况下做到了。
不幸的是,我能找到的一切都是分类器返回概率的情况,而不是硬估计,比如这里或这里
我认为这会工作,但from sklearn.metrics import plot_roc_curve
没有找到!
网上有什么适合我的吗?
谢谢
解决方案
您可以通过使用sklearn.svm.SVC
并将probability
参数设置为True
.
如您所见:
概率:布尔值,可选(默认=假)
是否启用概率估计。这必须在调用 fit 之前启用,这会减慢该方法,因为它在内部使用 5 折交叉验证,并且 predict_proba 可能与 predict 不一致。在用户指南中阅读更多信息。
举个例子(细节省略):
from sklearn.svm import SVC
from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score
.
.
.
model = SVC(kernel="linear", probability=True)
model.fit(X_train, y_train)
.
.
.
decision_scores = model.decision_function(X_test)
fpr, tpr, thres = roc_curve(y_test, decision_scores)
print('AUC: {:.3f}'.format(roc_auc_score(y_test, decision_scores)))
# roc curve
plt.plot(fpr, tpr, "b", label='Linear SVM')
plt.plot([0,1],[0,1], "k--", label='Random Guess')
plt.xlabel("false positive rate")
plt.ylabel("true positive rate")
plt.legend(loc="best")
plt.title("ROC curve")
plt.show()
你应该得到这样的东西:
请注意,这LinearSVC
比 快得多SVC(kernel="linear")
,尤其是在训练集非常大或特征很多的情况下。
推荐阅读
- javascript - 我的 Discord.js 机器人在尝试发送 DM 时出错
- python-3.x - 如何在 python 中解决“jupyter_client.kernelspec.NoSuchKernel: No such kernel named iqsharp”?
- postman - 将 FastAPI 规范导入 Postman 时出现问题
- pointers - 如何修改结构指针类型的接口值
- google-cloud-platform - Google Cloud 403 错误拥有项目的结算帐户在状态下被禁用
- algorithm - Haskell 快速排序实现(如何获得最佳性能?)
- python - Python 主脚本不等待 Tkinter GUI 中的用户响应
- amazon-web-services - aws elastic beanstalk不调用私有API
- sql - 我需要显示在他们的经理之前雇用的所有员工。有人可以帮助我吗?
- c# - 如何从 C# 中的特定目录启动 exe?