显示对象的可视化

在此示例中,我们将直接从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(12, figsize=(128))

roc_display.plot(ax=ax1)
pr_display.plot(ax=ax2)
plt.show()

输出:

脚本的总运行时间:(0分钟1.933秒)