注意
跳转到结尾 下载完整的示例代码。或通过 JupyterLite 或 Binder 在您的浏览器中运行此示例。
检测错误权衡 (DET) 曲线#
在本例中,我们比较了两种二元分类多阈值度量:受试者工作特征 (ROC) 和检测错误权衡 (DET)。为此,我们评估了用于同一分类任务的两种不同的分类器。
ROC 曲线的 Y 轴为真阳性率 (TPR),X 轴为假阳性率 (FPR)。这意味着图的左上角是“理想”点 - FPR 为零,TPR 为一。
DET 曲线是 ROC 曲线的变体,其中使用假阴性率 (FNR) 而不是 TPR 绘制在 y 轴上。在这种情况下,原点(左下角)是“理想”点。
注意
有关 ROC 曲线的更多信息,请参见
sklearn.metrics.roc_curve
。有关 DET 曲线的更多信息,请参见
sklearn.metrics.det_curve
。此示例大致基于 分类器比较 示例。
有关估计 ROC 曲线和 ROC-AUC 方差的示例,请参见 具有交叉验证的受试者工作特征 (ROC)。
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause
生成合成数据#
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
X, y = make_classification(
n_samples=1_000,
n_features=2,
n_redundant=0,
n_informative=2,
random_state=1,
n_clusters_per_class=1,
)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0)
定义分类器#
在这里,我们定义了两个不同的分类器。目标是使用 ROC 和 DET 曲线直观地比较它们在不同阈值下的统计性能。选择这些分类器没有特别的理由,scikit-learn 中还有其他可用的分类器。
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import make_pipeline
from sklearn.svm import LinearSVC
classifiers = {
"Linear SVM": make_pipeline(StandardScaler(), LinearSVC(C=0.025)),
"Random Forest": RandomForestClassifier(
max_depth=5, n_estimators=10, max_features=1
),
}
绘制 ROC 和 DET 曲线#
DET 曲线通常以正态偏差尺度绘制。为此,DET 显示转换了由 det_curve
返回的错误率,并使用 scipy.stats.norm
缩放轴。
import matplotlib.pyplot as plt
from sklearn.metrics import DetCurveDisplay, RocCurveDisplay
fig, [ax_roc, ax_det] = plt.subplots(1, 2, figsize=(11, 5))
for name, clf in classifiers.items():
clf.fit(X_train, y_train)
RocCurveDisplay.from_estimator(clf, X_test, y_test, ax=ax_roc, name=name)
DetCurveDisplay.from_estimator(clf, X_test, y_test, ax=ax_det, name=name)
ax_roc.set_title("Receiver Operating Characteristic (ROC) curves")
ax_det.set_title("Detection Error Tradeoff (DET) curves")
ax_roc.grid(linestyle="--")
ax_det.grid(linestyle="--")
plt.legend()
plt.show()
请注意,使用 DET 曲线比使用 ROC 曲线更容易直观地评估不同分类算法的整体性能。由于 ROC 曲线以线性比例绘制,因此不同的分类器在图的大部分区域通常看起来相似,并且在图的左上角差异最大。另一方面,因为 DET 曲线在正态偏差尺度上表示直线,所以它们往往整体上易于区分,并且感兴趣的区域占据了图的大部分。
DET 曲线直接反馈检测错误权衡,以帮助进行工作点分析。然后,用户可以决定他们愿意以 FPR 为代价接受的 FNR(反之亦然)。
脚本总运行时间:(0 分钟 0.196 秒)
相关示例