数据可视化:混淆矩阵、ROC曲线和精确率召回率曲线

机器学习模型评估中,数据可视化是一个重要的环节,它可以帮助直观地理解模型的性能。本文将介绍如何使用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曲线需要估计器的概率或非阈值决策值。由于逻辑回归提供了决策函数,将使用它来绘制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秒)

  • 精确率-召回率
  • ROC曲线与可视化API
  • 多类接收者操作特征(ROC)
  • 成本敏感学习后调整决策阈值
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485