在机器学习模型评估中,数据可视化是一个重要的环节,它可以帮助直观地理解模型的性能。本文将介绍如何使用Python中的sklearn库来绘制混淆矩阵、ROC曲线和精确率召回率曲线。这些图表对于评估二分类模型的性能非常有用。
首先,需要加载数据集并训练一个模型。在这个例子中,从OpenML网站加载了一个血液捐赠服务中心的数据集。这是一个二分类问题,目标是预测个体是否捐赠了血液。然后,将数据集分割为训练集和测试集,并使用训练集拟合一个逻辑回归模型。
from sklearn.datasets import fetch_openml
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
# 加载数据集
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)
在Jupyter环境中,重新运行此单元格以显示HTML表示,或信任笔记本。在GitHub上,HTML表示无法渲染,请尝试使用nbviewer.org加载此页面。
使用拟合好的模型,计算模型在测试数据集上的预测结果。这些预测用于计算混淆矩阵,然后使用ConfusionMatrixDisplay进行绘制。
from sklearn.metrics import ConfusionMatrixDisplay, confusion_matrix
# 预测测试集
y_pred = clf.predict(X_test)
# 计算混淆矩阵
cm = confusion_matrix(y_test, y_pred)
# 创建并绘制混淆矩阵显示
cm_display = ConfusionMatrixDisplay(cm)
cm_display.plot()
混淆矩阵是一个表格,用于显示模型预测结果与实际标签之间的关系。它可以帮助了解模型在不同类别上的准确性。
ROC曲线需要估计器的概率或非阈值决策值。由于逻辑回归提供了决策函数,将使用它来绘制ROC曲线。
from sklearn.metrics import RocCurveDisplay, roc_curve
# 获取决策函数值
y_score = clf.decision_function(X_test)
# 计算ROC曲线
fpr, tpr, _ = roc_curve(y_test, y_score, pos_label=clf.classes_[1])
# 创建并绘制ROC曲线显示
roc_display = RocCurveDisplay(fpr=fpr, tpr=tpr)
roc_display.plot()
ROC曲线是一个图形表示,用于展示模型在不同阈值下的性能。它可以帮助选择最佳的决策阈值。
类似地,精确率召回率曲线可以使用预测部分的y_score绘制。
from sklearn.metrics import PrecisionRecallDisplay, precision_recall_curve
# 计算精确率召回率曲线
prec, recall, _ = precision_recall_curve(y_test, y_score, pos_label=clf.classes_[1])
# 创建并绘制精确率召回率曲线显示
pr_display = PrecisionRecallDisplay(precision=prec, recall=recall)
pr_display.plot()
精确率召回率曲线是一个图形表示,用于展示模型在不同阈值下的精确率和召回率。它可以帮助了解模型在不同类别上的平衡性。
显示对象存储了作为参数传递的计算值。这允许使用matplotlib的API轻松地将可视化组合在一起。在以下示例中,将显示并排放置在一行中。
import matplotlib.pyplot as plt
# 创建子图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 8))
# 绘制ROC曲线和精确率召回率曲线
roc_display.plot(ax=ax1)
pr_display.plot(ax=ax2)
# 显示图表
plt.show()
通过这种方式,可以在一个图表中同时展示多个性能指标,从而更全面地评估模型的性能。
脚本的总运行时间为:(0分钟 1.648秒)