✨ 欢迎关注Python机器学习AI ✨
本节介绍:堆叠柱状图展示训练与测试的准确率、误差对比,数据采用模拟数据无任何现实意义 ,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。文末提供高效的AI工具~!
✨ 论文信息 ✨
图2展示通过十折交叉验证评估的多种机器学习算法(包括随机森林、朴素贝叶斯、线性判别分析、支持向量机、人工神经网络、二次判别分析和k近邻算法)的性能。每种算法的性能通过堆叠柱状图显示
- 训练准确率(以红色标记)和测试准确率(以绿色标记)分别表示模型在训练集和测试集上的预测精度
- 训练误差(以粉红色标记)和测试误差(以灰色标记)分别表示模型在训练集和测试集上的预测误差
每个算法的四个性能指标被堆叠展示,帮助直观对比各算法在不同数据集(训练集和测试集)上的表现差异,同时也可以判断模型是否存在过拟合或者欠拟合
过拟合是指模型在训练数据上表现很好,但在新数据或测试数据上表现较差,通常是由于模型过于复杂,捕捉了训练数据中的噪声(如这里的模型LDA等);欠拟合则是指模型无法很好地拟合训练数据,导致训练集和测试集上的表现都较差,通常表现为测试集比训练集性能好,通常是因为模型过于简单,无法捕捉数据中的关键模式(如这里LibSVM),仿图如下:
根据文献配图的模拟实现,此类图表不仅可以用来展示准确率和误差,还可以扩展到其他评估指标,如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")
path = r"2025-9-18公众号Python机器学习AI.xlsx"
df = pd.read_excel(path)
from sklearn.model_selection import train_test_split
# 划分特征和目标变量
X = df.drop(['Electrical_cardioversion'], axis=1)
y = df['Electrical_cardioversion']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.3,
random_state=250918,
stratify=df['Electrical_cardioversion']
)
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
# 构建模型
rf_model = RandomForestClassifier(random_state=250918)
lr_model = LogisticRegression(random_state=250918)
svm_model = SVC(random_state=250918, probability=True)
dt_model = DecisionTreeClassifier(random_state=250918)
knn_model = KNeighborsClassifier()
加载数据集,划分训练集和测试集,使用五种不同的机器学习模型(随机森林、逻辑回归、支持向量机、决策树和k近邻)进行训练(实际运用中伴随着k折交叉验证、参数调整等),并准备获取各模型的评价指标(如准确率、误差等),最终用于模拟绘图展示模型性能
# 定义一个函数计算模型成绩
def evaluate_model(model, X_train, X_test, y_train, y_test):
# 在训练集上训练模型
model.fit(X_train, y_train)
# 计算训练集和测试集准确率
train_score = model.score(X_train, y_train)
test_score = model.score(X_test, y_test)
# 计算错误率
train_error = 1 - train_score
test_error = 1 - test_score
return train_score, test_score, train_error, test_error
# 创建空的 DataFrame 用于存储结果
results = pd.DataFrame(columns=["Train Accuracy", "Test Accuracy", "Train Error", "Test Error"])
# 评估每个模型并存储结果
models = [
('RF', rf_model),
('LR', lr_model),
('SVM', svm_model),
('DT', dt_model),
('KNN', knn_model)
]
for model_name, model in models:
train_acc, test_acc, train_err, test_err = evaluate_model(model, X_train, X_test, y_train, y_test)
results.loc[model_name] = [train_acc, test_acc, train_err, test_err]
results
定义一个函数来评估多个机器学习模型的训练准确率、测试准确率、训练误差和测试误差
# 设置柱状图的宽度和位置
bar_width = 0.2
index = np.arange(len(results))
# 绘制柱状图
plt.figure(figsize=(10, 6))
plt.bar(index - 1.5 * bar_width, results['Train Accuracy'], bar_width, label='Train Accuracy', color='#FFB6C1') # Light Pink
plt.bar(index - 0.5 * bar_width, results['Test Accuracy'], bar_width, label='Test Accuracy', color='#98FB98') # Pale Green
plt.bar(index + 0.5 * bar_width, results['Train Error'], bar_width, label='Train Error', color='#AFEEEE') # Pale Turquoise
plt.bar(index + 1.5 * bar_width, results['Test Error'], bar_width, label='Test Error', color='#D8BFD8') # Thistle
plt.xlabel('Model', fontsize=14)
plt.ylabel('Scores', fontsize=14)
plt.xticks(index, results.index, fontsize=12, fontweight='bold')
plt.yticks(fontsize=12)
plt.legend()
plt.tight_layout()
plt.savefig("Scores.pdf", format='pdf', bbox_inches='tight', dpi=1200)
plt.show()
这里为最基础的绘制一个堆叠柱状图,比较多个模型的训练准确率、测试准确率、训练误差和测试误差,优化堆叠形式就可以得到下面的模型比较结果更美观
from sklearn.metrics import roc_auc_score
# 定义一个函数计算模型的AUC值及错误率
def evaluate_model_auc(model, X_train, X_test, y_train, y_test):
# 在训练集上训练模型
model.fit(X_train, y_train)
# 获取模型预测概率
train_pred_prob = model.predict_proba(X_train)[:, 1] # 取正类的预测概率
test_pred_prob = model.predict_proba(X_test)[:, 1] # 取正类的预测概率
# 计算训练集和测试集的AUC值
train_auc = roc_auc_score(y_train, train_pred_prob)
test_auc = roc_auc_score(y_test, test_pred_prob)
# 计算训练集和测试集的错误率
train_error = 1 - train_auc
test_error = 1 - test_auc
return train_auc, test_auc, train_error, test_error
# 创建空的 DataFrame 用于存储结果
results_auc = pd.DataFrame(columns=["Train AUC", "Test AUC", "Train Error", "Test Error"])
# 评估每个模型并存储结果
models = [
('RF', rf_model),
('LR', lr_model),
('SVM', svm_model),
('DT', dt_model),
('KNN', knn_model)
]
for model_name, model in models:
train_auc, test_auc, train_error, test_error = evaluate_model_auc(model, X_train, X_test, y_train, y_test)
results_auc.loc[model_name] = [train_auc, test_auc, train_error, test_error]
results_auc
定义一个函数来评估多个模型的训练和测试AUC值及错误率,并进行和文献类似的可视化,同理F1值等评价指标都可以进行该可视化
当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 书籍推荐 ✨
无论你是零编程基础的科研新手,还是想提升机器学习技能的医学科研工作者,这本书都能带你从入门到进阶,掌握Python数据分析+医学AI应用的全流程技能
✨ 介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,下方提供淘宝店铺二维码获取作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!
✨ AI工具推荐 ✨
往期推荐
期刊配图:模型SHAP解释特征类别柱状图、饼图与蜂巢图的组合展示
期刊复现:基于自动机器学习的预测模型构建及其残差和部分依赖分析
期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况最优模型的SHAP解释
期刊复现:单变量特征降维与共线性分析结合RFE集成排名进行特征筛选下的组合拳流程
期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况优化与最优模型选择可视化
期刊复现:基于相关系数与AUC值优化特征选择剔除冗余特征精简模型(附代码)
期刊复现:如何正确使用LASSO进行二分类特征选择?避开常见误区,掌握实用技巧
期刊复现:融合聚类与多分类转二分类的亚型可解释SHAP机器学习模型构建
期刊复现:基于LightGBM、XGBoost与RF的Lasso回归堆叠模型在连续和分类特征上的模型解释
期刊复现:基于LightGBM、XGBoost与RF的堆叠模型贝叶斯优化调参与Lasso回归元模型,结合10倍交叉验证
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考