显示对象的可视化¶
在此示例中,我们将直接从ConfusionMatrixDisplay,RocCurveDisplay和PrecisionRecallDisplay各自的指标中构造显示对象。当模型的预测已经计算或计算成本很高时,这是使用其对应的绘图函数的替代方法。请注意,这是高级用法,通常我们建议使用它们各自的绘图功能。
print(__doc__)
导入数据,训练模型
对于此示例,我们从OpenML (https://www.openml.org/d/1464)加载输血服务中心数据集。 这是一个二分类问题,目标是个人是否献血。 然后将数据分为训练和测试数据集,并通过训练数据集进行逻辑回归。
from sklearn.datasets import fetch_openml
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
X, y = fetch_openml(data_id=1464, return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y)
clf = make_pipeline(StandardScaler(), LogisticRegression(random_state=0))
clf.fit(X_train, y_train)
输出:
创建ConfusionMatrixDisplay
使用拟合的模型,我们可以在测试数据集上计算模型的预测。 这些预测用于计算使用ConfusionMatrixDisplay绘制的混淆矩阵。
from sklearn.metrics import confusion_matrix
from sklearn.metrics import ConfusionMatrixDisplay
y_pred = clf.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
cm_display = ConfusionMatrixDisplay(cm).plot()
输出:
创建RocCurveDisplay
roc曲线需要估算器的概率或非阈值决策值。 由于逻辑回归提供了决策函数,因此我们将使用它来绘制roc曲线:
from sklearn.metrics import roc_curve
from sklearn.metrics import RocCurveDisplay
y_score = clf.decision_function(X_test)
fpr, tpr, _ = roc_curve(y_test, y_score, pos_label=clf.classes_[1])
roc_display = RocCurveDisplay(fpr=fpr, tpr=tpr).plot()
输出:
创建PrecisionRecallDisplay
类似地,可以使用预置部分中的y_score绘制精度召回曲线。
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import PrecisionRecallDisplay
prec, recall, _ = precision_recall_curve(y_test, y_score,
pos_label=clf.classes_[1])
pr_display = PrecisionRecallDisplay(precision=prec, recall=recall).plot()
输出:
将显示对象合并为一个图
显示对象存储作为参数传递的计算值。 这样就可以使用matplotlib的API轻松组合可视化效果。 在下面的示例中,我们将显示出的图像排成一行。
import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 8))
roc_display.plot(ax=ax1)
pr_display.plot(ax=ax2)
plt.show()
输出:
脚本的总运行时间:(0分钟1.933秒)