背景
在机器学习和数据分析中,模型性能的对比是评估不同算法效果的关键环节,然而,当面对多个模型和多个评价指标时,如何直观地展示这些模型的优劣,往往是一个挑战,在这篇文章中,采用了一种直观且富有表现力的可视化方式——雷达图,来对比多个机器学习模型在指标上的表现
雷达图,又称蜘蛛网图,是一种将多维数据映射到二维平面上的图形,通过雷达图,可以同时展示多个模型在各项指标上的表现,如R方、准确率、精确率、召回率和F1得分等不局限于回归预测还是分类模型,这种图形的优势在于,它能够一目了然地展示出每个模型的优缺点,帮助快速找到在某些指标上表现突出或存在不足的模型,尤其在面对多个模型时,雷达图可以通过不同区域的覆盖面积来反映模型的整体表现,使得复杂的数据变得更加易于理解
该文献利用雷达图展示了多种预测因子对不同临床结局(如全因死亡、心肌梗死和重大出血)的影响,通过这种可视化方式,研究人员能够直观地比较每个因子的相对重要性,因此,将在本文中尝试复现该文献中的雷达图,并以此为基础对比不同机器学习模型的性能,帮助更直观地理解每种算法在实际应用中的表现差异
代码实现
初代雷达图
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False
# 提取数据
categories = ['RF', 'DT', 'XGBoost', 'SVM', 'KNN', 'Logistic Regression', 'Catboost', 'MLP']
data = [0.78, 0.65, 0.85, 0.72, 0.70, 0.76, 0.68, 0.74]
# 计算角度,每个类别对应一个角度
angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist()
# 闭合角度,使得雷达图形成闭环
angles += angles[:1]
# 设置图形的极坐标,并定义半径范围为 [0, 1]
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True), dpi=1200)
# 调整半径范围
ax.set_ylim(0, 1.001)
# 绘制填充和线条
values = data + data[:1] # 闭合数据
ax.fill(angles, values, alpha=0.25, label='Model Performance')
ax.plot(angles, values, marker='o')
# 设置空的y轴标签
ax.set_yticklabels([])
# 设置x轴的角度刻度
ax.set_xticks(angles[:-1])
# 设置x轴的标签
ax.set_xticklabels(categories, fontsize=10)
ax.set_title('Multi-model comparison', pad=20)
plt.savefig('Multi-model comparison.pdf', format='pdf', bbox_inches='tight')
plt.show()
用于生成一个基本的雷达图,用于对比不同机器学习模型在多个指标上的性能表现,通过极坐标的方式,将每个模型的得分可视化为一个闭合的多边形,使得各模型之间的优劣一目了然。不过,这个版本的雷达图还比较简陋,缺乏进一步的美化和优化,比如缺少不同颜色区分的填充区域、没有显示各个数据点的具体数值,也没有对图例进行更详细的说明,因此,它适合作为初步的可视化参考,但在实际应用中,可能需要进一步调整和改进
对于读者而言着重关注的参数为categories和data:
- categories:模型名称列表,对应雷达图的各个轴,如‘RF’、‘DT’等,表示随机森林、决策树等模型。读者可以将这个列表替换为自己的模型名称,使得图表适应不同的模型对比
- data:每个模型在某一指标上的得分(作者这里为假设值),用于绘制每个模型的性能表现。读者可以将此数组替换为自己模型的实际得分数据,如R方、准确率、F1得分等,即可生成适合自身需求的雷达图
二代雷达图
这个二代雷达图相较于初代版本有了显著改进,整体美观度和数据的可读性大大提升,且在视觉样式、刻度标注、以及填充效果上与文献中的雷达图几乎完全一致。然而,它仍然存在一个不足之处:尽管不同模型的数据展示更为直观,但并没有特别突出最优模型的表现,这可能会让读者在快速比较时难以一眼识别出表现最好的模型,代码获取:如果您希望获取本文展示的改进版代码,请添加作者微信联系获取
三
代雷达图
通过在雷达图中使用星号(*)标记数据中的最大值来突出最优模型的表现,通过这种方式,最优模型在图中显得更加突出,便于一眼识别出表现最好的模型,代码获取:如果您希望获取本文展示的改进版代码,请添加作者微信联系获取
往期推荐
SCI图表复现:利用小提琴图折线图综合展示训练集、验证集、测试集模型性能对比
复现SCI文章 SHAP 依赖图可视化以增强机器学习模型的可解释性
复现 Nature 图表——基于PCA的高维数据降维与可视化实践及其扩展
复现 Nature 图表可视化——基于模型残差分析与显著性检验的模型解释
微信号|deep_ML
欢迎添加作者微信进入Python、ChatGPT群
进群请备注Python或AI进入相关群
无需科学上网、同步官网所有功能、使用无限制
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考