期刊文章配图:基于分组折线图的多机器学习模型表现评估对比

机器学习NoSQL数据库云安全

picture.image

背景

本篇文章将带领大家复现一篇模型评估的可视化,帮助大家更好地理解如何比较模型在不同指标上的表现,将通过在训练集和测试集上评估模型的准确率、灵敏度、特异性等关键指标,直观地分析模型的优缺点,并最终得出最佳的模型选择策略

picture.image

picture.image

图D、E展示了六种不同预测模型(RF, KNN, Logistic, GNB, SVM, MLP)在训练集和测试集上的评估指标,以便比较它们的性能,这些指标包括准确率(accuracy)、灵敏度(sensitivity)、特异性(specificity)、正预测值(Positive predictive value)、负预测值(Negative predictive value)、F1分数(F1 score)和Kappa分数(Kappa score)

左图(D)表示各模型在训练集上的表现,而右图(E)则是测试集上的表现。通过对比训练集和测试集的结果,可以分析模型的泛化能力和稳定性,找出在特定指标上表现最优的模型,同时判断是否存在过拟合或欠拟合的情况。这种比较能够帮助选择最适合的数据集和任务的预测模型

代码实现

数据读取处理


          
import pandas as pd
          
import numpy as np
          
from sklearn.model_selection import train_test_split
          
import matplotlib.pyplot as plt
          
import matplotlib.ticker as ticker
          
plt.rcParams['font.family'] = 'Times New Roman'
          
plt.rcParams['axes.unicode_minus'] = False
          
# 读取数据
          
df = pd.read_excel('2024-11-1-公众号Python机器学习AI—class.xlsx')
          
# 划分特征和目标变量
          
X = df.drop(['目标'], axis=1)
          
y = df['目标']
          
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, 
          
                                                    random_state=42, stratify=df['目标'])
      

读取数据,划分特征和目标变量,然后将数据分为训练集和测试集,以便后续的机器学习模型训练和评估

模型训练


          
from sklearn.ensemble import RandomForestClassifier
          
from sklearn.neighbors import KNeighborsClassifier
          
from sklearn.linear_model import LogisticRegression
          
from sklearn.naive_bayes import GaussianNB
          
from sklearn.svm import SVC
          
from sklearn.neural_network import MLPClassifier
          
from sklearn.metrics import accuracy_score, recall_score, precision_score, f1_score, confusion_matrix, cohen_kappa_score
          

          
# 初始化并训练随机森林模型
          
rf_model = RandomForestClassifier(random_state=42)
          
rf_model.fit(X_train, y_train)
          

          
# 初始化并训练KNN模型
          
knn_model = KNeighborsClassifier(n_neighbors=5)
          
knn_model.fit(X_train, y_train)
          

          
# 初始化并训练Logistic回归模型
          
logistic_model = LogisticRegression(max_iter=1000, random_state=42)
          
logistic_model.fit(X_train, y_train)
          

          
# 初始化并训练GNB模型
          
gnb_model = GaussianNB()
          
gnb_model.fit(X_train, y_train)
          

          
# 初始化并训练SVM模型
          
svm_model = SVC(random_state=42)
          
svm_model.fit(X_train, y_train)
          

          
# 初始化并训练MLP模型
          
mlp_model = MLPClassifier(max_iter=1000, random_state=42)
          
mlp_model.fit(X_train, y_train)
      

始化并训练了六种常用的机器学习模型(随机森林、KNN、Logistic回归、朴素贝叶斯、SVM、MLP),采用默认参数进行模型构建,未进行参数调优,主要目的是复现文献中的分组折线图展示各模型的性能对比

模型评价指标计算函数


          
# 定义函数计算评价指标
          
def calculate_metrics(y_true, y_pred):
          
    accuracy = accuracy_score(y_true, y_pred)
          
    sensitivity = recall_score(y_true, y_pred)  # 敏感性(召回率)
          
    specificity = confusion_matrix(y_true, y_pred)[0, 0] / (confusion_matrix(y_true, y_pred)[0, 0] + confusion_matrix(y_true, y_pred)[0, 1])
          
    positive_predictive_value = precision_score(y_true, y_pred)
          
    negative_predictive_value = confusion_matrix(y_true, y_pred)[1, 1] / (confusion_matrix(y_true, y_pred)[1, 1] + confusion_matrix(y_true, y_pred)[1, 0])
          
    f1 = f1_score(y_true, y_pred)
          
    kappa = cohen_kappa_score(y_true, y_pred)
          
    return [accuracy, sensitivity, specificity, positive_predictive_value, negative_predictive_value, f1, kappa]
      

定义一个 calculate_metrics 函数,用于计算模型的多种评价指标,包括准确率(accuracy)、敏感性(sensitivity)、特异性(specificity)、正预测值(positive predictive value)、负预测值(negative predictive value)、F1分数(f1)和Kappa系数(kappa),这些指标能够全面评估模型的分类性能,便于后续在不同模型之间进行比较

模型训练集预测结果汇总


          
# 随机森林模型预测
          
rf_pred = rf_model.predict(X_train)
          
rf_metrics = calculate_metrics(y_train, rf_pred)
          

          
# KNN模型预测
          
knn_pred = knn_model.predict(X_train)
          
knn_metrics = calculate_metrics(y_train, knn_pred)
          

          
# Logistic回归模型预测
          
logistic_pred = logistic_model.predict(X_train)
          
logistic_metrics = calculate_metrics(y_train, logistic_pred)
          

          
# GNB模型预测
          
gnb_pred = gnb_model.predict(X_train)
          
gnb_metrics = calculate_metrics(y_train, gnb_pred)
          

          
# SVM模型预测
          
svm_pred = svm_model.predict(X_train)
          
svm_metrics = calculate_metrics(y_train, svm_pred)
          

          
# MLP模型预测
          
mlp_pred = mlp_model.predict(X_train)
          
mlp_metrics = calculate_metrics(y_train, mlp_pred)
          

          
# 创建DataFrame并添加所有模型的结果
          
metrics_df_train = pd.DataFrame({
          
    'Metrics': ['accuracy', 'sensitivity', 'specificity', 'Positive predictive value', 'Negative predictive value', 'F1 score', 'Kappa score'],
          
    'RF': rf_metrics,
          
    'KNN': knn_metrics,
          
    'Logistic': logistic_metrics,
          
    'GNB': gnb_metrics,
          
    'SVM': svm_metrics,
          
    'MLP': mlp_metrics
          
})
          

          
metrics_df_train
      

picture.image

对训练集数据进行模型预测,计算每个模型的多项评价指标,并将各模型的结果整理成DataFrame,以便后续进行可视化展示和性能比较

模型测试集预测结果汇总


          
# 随机森林模型预测
          
rf_pred = rf_model.predict(X_test)
          
rf_metrics = calculate_metrics(y_test, rf_pred)
          

          
# KNN模型预测
          
knn_pred = knn_model.predict(X_test)
          
knn_metrics = calculate_metrics(y_test, knn_pred)
          

          
# Logistic回归模型预测
          
logistic_pred = logistic_model.predict(X_test)
          
logistic_metrics = calculate_metrics(y_test, logistic_pred)
          

          
# GNB模型预测
          
gnb_pred = gnb_model.predict(X_test)
          
gnb_metrics = calculate_metrics(y_test, gnb_pred)
          

          
# SVM模型预测
          
svm_pred = svm_model.predict(X_test)
          
svm_metrics = calculate_metrics(y_test, svm_pred)
          

          
# MLP模型预测
          
mlp_pred = mlp_model.predict(X_test)
          
mlp_metrics = calculate_metrics(y_test, mlp_pred)
          

          

          
# 创建DataFrame并添加所有模型的结果
          
metrics_df_test = pd.DataFrame({
          
    'Metrics': ['accuracy', 'sensitivity', 'specificity', 'Positive predictive value', 'Negative predictive value', 'F1 score', 'Kappa score'],
          
    'RF': rf_metrics,
          
    'KNN': knn_metrics,
          
    'Logistic': logistic_metrics,
          
    'GNB': gnb_metrics,
          
    'SVM': svm_metrics,
          
    'MLP': mlp_metrics
          
})
          

          
metrics_df_test
      

picture.image

对测试集数据进行模型预测,计算每个模型的多项评价指标,并将各模型的结果整理成DataFrame,以便与训练集结果对比,全面评估各模型在新数据上的泛化能力

模型评价指标可视化函数


          
def plot_metrics(metrics_df, title="Metrics Plot", save_path=None):
          
    colors = ['#ff3522', 'brown', 'orange', 'purple', '#0D99D4', '#4fbe5e', 'blue']
          
    plt.figure(figsize=(8, 6), dpi=1200)
          
    for idx, model in enumerate(metrics_df.columns[1:]):
          
        plt.plot(metrics_df['Metrics'], metrics_df[model], marker='o', label=model, color=colors[idx % len(colors)])
          
    ax = plt.gca()
          
    ax.spines['right'].set_visible(False)
          
    ax.spines['top'].set_visible(False)
          
    ax.yaxis.set_major_locator(ticker.MultipleLocator(0.25)) 
          
    ax.yaxis.set_minor_locator(ticker.MultipleLocator(0.125))  
          
    ax.yaxis.set_minor_formatter(ticker.NullFormatter())  
          
    plt.title(title)
          
    plt.ylim(0.1, 1.0)
          
    plt.yticks([0.25, 0.50, 0.75, 1.00])  # 设置主要刻度
          
    plt.xticks(rotation=45, ha='right')
          
    plt.legend(title=" ", loc='center left', bbox_to_anchor=(1, 0.5), frameon=False)
          
    plt.grid(which='both', linestyle='-', linewidth=0.5, color='gray')
          
    if save_path:
          
        plt.savefig(save_path, format='pdf', bbox_inches='tight')  # 使用 `bbox_inches='tight'` 确保内容不会被裁剪
          
    plt.tight_layout()
          
    plt.show()
      

定义一个 plot_metrics 函数,通过折线图展示各模型在不同评价指标上的表现,可直观比较不同模型的性能

训练集可视化


        
            

          plot\_metrics(metrics\_df\_train, title="Training Set Metrics", save\_path="Training\_Set\_Metrics.pdf")
        
      

picture.image

测试集可视


        
            

          plot\_metrics(metrics\_df\_test, title="Test Set Metrics", save\_path="Test\_Set\_Metrics.pdf")
        
      

picture.image

两个可视化分别展示了各模型在训练集、测试集上不同评价指标的表现,通过折线图可以直观地比较随机森林(RF)、KNN、逻辑回归(Logistic)、朴素贝叶斯(GNB)、支持向量机(SVM)和多层感知机(MLP)模型的准确性、灵敏性、特异性等多项性能指标,为模型选择提供依据

🎁 赠书活动来啦! 🎁

picture.image

picture.image

支持知识分享,畅享学习乐趣!即日起,只需点赞、在看、转发此文章,作者将从后台随机抽取一位幸运儿,免费包邮赠送《深度序列模型与自然语言处理:基于TensorFlow 2实践》这本精彩书籍📚!

💡 赶快参与,一键三连,说不定你就是那位幸运读者哦!

往期推荐

SCI图表复现:整合数据分布与相关系数的高级可视化策略

SCI图表:基于相关性和标准差的多模型评价——泰勒图解析

SCI图表复现:利用小提琴图折线图综合展示训练集、验证集、测试集模型性能对比

复现SCI文章 SHAP 依赖图可视化以增强机器学习模型的可解释性

SCI图表复现:优化SHAP特征贡献图展示更多模型细节

复现 Nature 图表——基于PCA的高维数据降维与可视化实践及其扩展

复现 Nature 图表可视化——基于模型残差分析与显著性检验的模型解释

SCI图表复现:特征相关性气泡热图展示

期刊文章配图:基于雷达图的多机器学习模型表现评估对比

期刊文章配图:斯皮尔曼相关系数热图反应非线性变量相关性

picture.image

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

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论