期刊配图:分类模型对比训练集与测试集评价指标的可视化分析

机器学习算法大数据

picture.image

背景

picture.image

在机器学习和数据分析的过程中,评价指标的选择和展示至关重要。为了更直观地呈现不同模型的表现,本篇文章通过图表和数据表的结合,详细展示了在测试集上的五个关键指标:准确率(Accuracy)、敏感性(Sensitivity)、特异性(Specificity)、F1值(F1)、以及AUC值(AUC)。通过这种方式,不仅能够快速识别各个模型的优劣,还能够深入分析每个模型在不同评价维度上的具体表现,当然这种形式也可以引入到回归分析中参考往期文章——期刊配图:回归模型对比如何精美可视化训练集与测试集的评价指标

代码实现

数据整理


          
import pandas as pd
          
import numpy as np
          
import matplotlib.pyplot as plt
          
plt.rcParams['font.family'] = 'Times New Roman'
          
plt.rcParams['axes.unicode_minus'] = False
          
import warnings
          
# 忽略所有警告
          
warnings.filterwarnings("ignore")
          
df = pd.read_excel('2025-2-10公众号Python机器学习AI.xlsx')
          
from sklearn.model_selection import train_test_split
          
# 划分特征和目标变量
          
X = df.drop(['y'], axis=1)
          
y = df['y']
          
# 划分训练集和测试集
          
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, 
          
                                                    random_state=42, stratify=df['y'])
          
from sklearn.linear_model import LogisticRegression
          
from sklearn.tree import DecisionTreeClassifier
          
from sklearn.ensemble import RandomForestClassifier, ExtraTreesClassifier
          
from sklearn.svm import SVC
          
from sklearn.neighbors import KNeighborsClassifier
          
import xgboost as xgb
          
import lightgbm as lgb
          
# 设置随机种子
          
random_seed = 42
          
# 定义并训练模型1:逻辑回归
          
logistic_reg = LogisticRegression(random_state=random_seed)
          
logistic_reg.fit(X_train, y_train)
          
# 定义并训练模型2:决策树分类
          
decision_tree_class = DecisionTreeClassifier(random_state=random_seed)
          
decision_tree_class.fit(X_train, y_train)
          
# 定义并训练模型3:随机森林分类
          
random_forest_class = RandomForestClassifier(random_state=random_seed)
          
random_forest_class.fit(X_train, y_train)
          
# 定义并训练模型4:Extra Trees分类 (ET)
          
et_class = ExtraTreesClassifier(random_state=random_seed)
          
et_class.fit(X_train, y_train)
          
# 定义并训练模型5:K近邻分类
          
knn_class = KNeighborsClassifier()
          
knn_class.fit(X_train, y_train)
          
# 定义并训练模型6:XGBoost分类
          
xgb_class = xgb.XGBClassifier(random_state=random_seed)
          
xgb_class.fit(X_train, y_train)
          
# 定义并训练模型7:LightGBM分类
          
lgb_class = lgb.LGBMClassifier(random_state=random_seed, verbose=-1)
          
lgb_class.fit(X_train, y_train) 
      

通过构建多种常见机器学习模型(如逻辑回归、决策树、随机森林、K近邻、XGBoost、LightGBM等)对一个模拟数据集进行训练,并准备对比它们的性能表现

性能计算


          
from sklearn.metrics import accuracy_score, confusion_matrix, f1_score, roc_auc_score, roc_curve
          

          
# 定义一个字典来存储每个模型的评价指标
          
metrics = {
          
    'Model': [],
          
    'Accuracy_train': [],
          
    'Sensitivity_train': [],
          
    'Specificity_train': [],
          
    'F1_train': [],
          
    'AUC_train': [],
          
    'Accuracy_test': [],
          
    'Sensitivity_test': [],
          
    'Specificity_test': [],
          
    'F1_test': [],
          
    'AUC_test': []
          
}
          

          
# 定义模型列表
          
models = [logistic_reg, decision_tree_class, random_forest_class, et_class, knn_class, xgb_class, lgb_class]
          
model_names = ['LR', 'CART', 'RF', 'ET', 'KNN', 'XGBoost', 'LightGBM']
          

          
# 遍历模型,计算评价指标
          
for model, model_name in zip(models, model_names):
          
    # 在训练集和测试集上进行预测
          
    y_train_pred = model.predict(X_train)
          
    y_test_pred = model.predict(X_test)
          

          
    # 计算 accuracy
          
    accuracy_train = accuracy_score(y_train, y_train_pred)
          
    accuracy_test = accuracy_score(y_test, y_test_pred)
          

          
    # 计算 confusion matrix,用于计算 sensitivity 和 specificity
          
    cm_train = confusion_matrix(y_train, y_train_pred)
          
    cm_test = confusion_matrix(y_test, y_test_pred)
          

          
    # 从 confusion matrix 获取 TP, TN, FP, FN
          
    tn_train, fp_train, fn_train, tp_train = cm_train.ravel()
          
    tn_test, fp_test, fn_test, tp_test = cm_test.ravel()
          

          
    # 计算 Sensitivity 和 Specificity
          
    sensitivity_train = tp_train / (tp_train + fn_train)
          
    specificity_train = tn_train / (tn_train + fp_train)
          
    sensitivity_test = tp_test / (tp_test + fn_test)
          
    specificity_test = tn_test / (tn_test + fp_test)
          

          
    # 计算 F1 分数
          
    f1_train = f1_score(y_train, y_train_pred)
          
    f1_test = f1_score(y_test, y_test_pred)
          

          
    # 计算 AUC-ROC
          
    auc_train = roc_auc_score(y_train, model.predict_proba(X_train)[:, 1])
          
    auc_test = roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])
          

          
    # 将结果存储到字典中
          
    metrics['Model'].append(model_name)
          
    metrics['Accuracy_train'].append(accuracy_train)
          
    metrics['Sensitivity_train'].append(sensitivity_train)
          
    metrics['Specificity_train'].append(specificity_train)
          
    metrics['F1_train'].append(f1_train)
          
    metrics['AUC_train'].append(auc_train)
          

          
    metrics['Accuracy_test'].append(accuracy_test)
          
    metrics['Sensitivity_test'].append(sensitivity_test)
          
    metrics['Specificity_test'].append(specificity_test)
          
    metrics['F1_test'].append(f1_test)
          
    metrics['AUC_test'].append(auc_test)
          
metrics_df = pd.DataFrame(metrics)
          
metrics_df
      

picture.image

通过遍历多个机器学习模型,计算并存储每个模型在训练集和测试集上的准确率、敏感性、特异性、F1值和AUC值等评价指标,从这些评价指标中可以看出,部分模型可能存在过拟合现象,但这里的重点是对模型的评价指标进行可视化展示,因此不必过多关注过拟合问题

可视化


          
fig, ax = plt.subplots(figsize=(10, 6))
          
# 设置绘图区背景色为淡灰色
          
ax.set_facecolor('#F0F0F0')
          
# 设置Y轴的总范围,并划分为5等份
          
ax.set_ylim(0, 1.2)
          
# 设置评价指标的名称及其对应的Y轴位置
          
evaluation_metrics = ['Accuracy', 'Sensitivity', 'Specificity', 'F1', 'AUC']
          
y_positions = [1.0, 0.8, 0.6, 0.4, 0.2]  # 为每个指标分配位置
          
# 为每个评价指标绘制圆点
          
for i, metric in enumerate(evaluation_metrics):
          
    ax.scatter(metrics_df['Model'], [y_positions[i]] * len(metrics_df), 
          
               s=metrics_df[f'{metric}_train'] * 500,  # 根据训练集指标值调整圆点大小
          
               label=metric, 
          
               alpha=0.6)  # 设置透明度,避免圆点重叠
          
# 设置图表标签和标题,字体加粗
          
ax.set_ylabel('Evaluation Metrics', fontsize=12, fontweight='bold')
          
ax.set_xlabel('Model', fontsize=12, fontweight='bold')
          
ax.set_title('Model Comparison: Training Metrics', fontsize=14, fontweight='bold')
          
# 设置Y轴的标签位置
          
ax.set_yticks([1.0, 0.8, 0.6, 0.4, 0.2])  # 设置评价指标显示在这些位置
          
ax.set_yticklabels(evaluation_metrics, fontweight='bold')  # 显示评价指标名称并加粗
          
# 调整X轴标签的角度,字体加粗
          
ax.set_xticklabels(metrics_df['Model'], rotation=45, ha='right', fontweight='bold')
          
ax.legend().set_visible(False)
          
plt.savefig("1.pdf", format='pdf', bbox_inches='tight', dpi=1200)
          
plt.tight_layout()
          
plt.show()
      

picture.image

这里针对训练集创建一个基础的可视化图,展示了不同模型在训练集上的五个评价指标(准确率、敏感性、特异性、F1值和AUC)作为散点图。每个散点的大小是根据相应模型在训练集上的评价指标值调整的。这个图的背景色为淡灰色,圆点的透明度设置为0.6,以避免重叠。通过此可视化,我们可以初步比较各模型的训练效果。

随后,代码进一步对这个图进行细化增加细节,这个图依然保留了与前一个图的相似结构,但提供了更多视觉线索来帮助辨认和比较模型的表现。这个更复杂的版本为接下来的数据分析提供了更清晰的呈现

picture.image

picture.image

有时会着重展示测试集,为了进一步增强展示效果,还可以在图表下方添加了一个详细的表格,列出了每个模型在测试集上的五个评价指标,保留了三位小数。这种结合图表和表格的方式,有助于读者在视觉上快速识别每个模型的优劣,同时也能更精确地查看每个模型在各个评价维度上的具体值

picture.image

最后还可以把这个训练集、测试集可视化合并在一个画布下进行展示,完整 代码与数据集获取:如需获取本文的源代码和数据集,请添加作者微信联系

picture.image

往期推荐

SHAP值+模型预测概率解读机器学习模型的决策过程

聚类与解释的结合:利用K-Means聚类辅助SHAP模型解释并可视化

期刊配图:RFE结合随机森林与K折交叉验证的特征筛选可视化

期刊配图:变量重要性排序与顺序正向选择的特征筛选可视化

期刊配图:SHAP可视化改进依赖图+拟合线+边缘密度+分组对比

期刊配图:SHAP蜂巢图与柱状图多维组合解读特征对模型的影响

基于mRMR筛选和递归特征选择的多模型性能评估与AUC可视化对比

期刊配图:SHAP可视化进阶蜂巢图与特征重要性环形图的联合展示方法

期刊配图:基于t-sne降维与模型预测概率的分类效果可视化

期刊配图:多种机器学习算法在递归特征筛选中的性能变化图示

picture.image

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
大规模高性能计算集群优化实践
随着机器学习的发展,数据量和训练模型都有越来越大的趋势,这对基础设施有了更高的要求,包括硬件、网络架构等。本次分享主要介绍火山引擎支撑大规模高性能计算集群的架构和优化实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论