✨ 欢迎关注Python机器学习AI ✨
本节介绍: 如何利用分组水平条形图比较多个模型在不同评估指标上的表现 ,数据采用模拟数据无任何现实意义 ,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。文末提供高效的AI工具~!点赞、推荐参与文末书籍包邮赠送~!
✨ 参考信息 ✨
利用 分组水平条形图可视化 通过多个模型(如XGB、SVM、RF、KNN、DT、CNN)在不同评估指标(MAE、RMSE、R²)上的表现进行对比分析,展示在不同数据集上的训练和测试结果,从而帮助选择最佳模型进行预测分析,下图为仿图实现
✨ 基础代码实现 ✨
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-10-10公众号Python机器学习AI.csv"
df = pd.read_csv(path, index_col=0)
from sklearn.model_selection import train_test_split
# 划分特征和目标变量
X = df.drop(['log_price', 'UTM_X', 'UTM_Y'], axis=1)
y = df['log_price']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
from sklearn.preprocessing import StandardScaler
from xgboost import XGBRegressor
from sklearn.svm import SVR
from sklearn.ensemble import RandomForestRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.tree import DecisionTreeRegressor
# 标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# XGBoost
xgb_model = XGBRegressor(n_estimators=500, learning_rate=0.1, max_depth=6, objective='reg:squarederror')
xgb_model.fit(X_train_scaled, y_train)
xgb_pred = xgb_model.predict(X_test_scaled)
# 支持向量机
svm_model = SVR(kernel='rbf', C=1.0, epsilon=0.1)
svm_model.fit(X_train_scaled, y_train)
svm_pred = svm_model.predict(X_test_scaled)
# 随机森林
rf_model = RandomForestRegressor(n_estimators=500, max_depth=6, random_state=42)
rf_model.fit(X_train_scaled, y_train)
rf_pred = rf_model.predict(X_test_scaled)
# K近邻
knn_model = KNeighborsRegressor(n_neighbors=5)
knn_model.fit(X_train_scaled, y_train)
knn_pred = knn_model.predict(X_test_scaled)
# 决策树
dt_model = DecisionTreeRegressor(max_depth=6, random_state=42)
dt_model.fit(X_train_scaled, y_train)
dt_pred = dt_model.predict(X_test_scaled)
对给定数据集进行特征标准化,并使用五种回归模型(XGBoost、支持向量机、随机森林、K近邻、决策树)进行训练和预测,所有模型都使用默认的超参数设置,没有进行任何参数调整
进行标准化主要是考虑到SVM和K近邻(KNN)对特征的量纲较为敏感。SVM和KNN都依赖于距离度量(如RBF核函数或欧氏距离),因此特征的尺度差异可能导致模型性能不稳定。标准化可以确保所有特征在相同的尺度上,从而帮助SVM和KNN更好地进行学习和预测
虽然其他模型如XGBoost、随机森林等在一定程度上对特征的量纲变化不太敏感,但在这里统一进行标准化也是一个常见的做法,确保所有模型都在相同的条件下进行训练
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
# 模型列表
models = {
'XGB': xgb_model,
'SVM': svm_model,
'RF': rf_model,
'KNN': knn_model,
'DT': dt_model
}
# 初始化一个空字典,用于存储每个模型的指标
metrics = {}
# 遍历每个模型,计算其训练和测试集的 MAE, RMSE 和 R2
for model_name, model in models.items():
# 获取模型的预测结果
pred_train = model.predict(X_train_scaled)
pred_test = model.predict(X_test_scaled)
# 计算并存储模型的指标
metrics[model_name] = {
'Train MAE': mean_absolute_error(y_train, pred_train),
'Test MAE': mean_absolute_error(y_test, pred_test),
'Train RMSE': mean_squared_error(y_train, pred_train, squared=False),
'Test RMSE': mean_squared_error(y_test, pred_test, squared=False),
'Train R2': r2_score(y_train, pred_train),
'Test R2': r2_score(y_test, pred_test)
}
metrics_df = pd.DataFrame(metrics).T
metrics_df
遍历前面训练的回归模型,计算并存储每个模型在训练集和测试集上的MAE、RMSE和R²指标
models = list(data.keys())
n_models = len(models)
bar_width = 0.2
index = np.arange(n_models) * 1.5 # 增加模型之间的间距
fig, ax = plt.subplots(figsize=(10, 8))
......
# 设置Y轴标签
ax.set_yticks(index)
ax.set_yticklabels(models, fontsize=15, weight='bold')
# 调整X轴范围以适应你的数据,R2值最高为1,其他值较小
ax.set_xlim([-1.0, 1.0])
# 添加垂直分割线
ax.axvline(x=0, color='black', linewidth=0.8)
# 添加Train/Test标签
ax.text(-0.5, ax.get_ylim()[1] + 0.5, 'Train', ha='center', va='bottom', fontsize=15, weight='bold')
ax.text(0.5, ax.get_ylim()[1] + 0.5, 'Test', ha='center', va='bottom', fontsize=15, weight='bold')
# 添加指标图例
handles = [plt.Rectangle((0,0),1,1, color='mistyrose'), plt.Rectangle((0,0),1,1, color='lightblue'), plt.Rectangle((0,0),1,1, color='lightsalmon'),
plt.Rectangle((0,0),1,1, color='lightcoral'), plt.Rectangle((0,0),1,1, color='steelblue'), plt.Rectangle((0,0),1,1, color='sandybrown')]
labels = ['MAE', 'RMSE', 'R²', 'MAE', 'RMSE', 'R²']
ax.legend(handles, labels, loc='upper right', bbox_to_anchor=(0.7, 1.2),
frameon=False, ncol=2, prop={'size': 15, 'weight': 'bold'}) # 图例字体大小和加粗
# 隐藏右侧和顶部的边框
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['left'].set_visible(False) # 隐藏左侧边框,因为模型名称在它上面
ax.spines['bottom'].set_visible(True) # 隐藏底部边框,X轴标签会取代它
# 隐藏Y轴刻度线,保留标签
ax.tick_params(axis='y', length=0)
ax.tick_params(axis='x', labelsize=15) # 调整X轴刻度标签大小
plt.tight_layout()
plt.savefig("OVER.pdf", format='pdf', bbox_inches='tight', dpi=1200)
plt.show()
对于上面得到的模型评价指标通过分组水平条形图展示不同回归模型(XGBoost、SVM、随机森林、K近邻、决策树)在训练集和测试集上的MAE、RMSE和R²指标,便于比较各模型的表现
当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 书籍推荐 ✨
无论你是零编程基础的科研新手,还是想提升机器学习技能的医学科研工作者,这本书都能带你从入门到进阶,掌握Python数据分析+医学AI应用的全流程技能
✨ 介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,下方提供淘宝店铺二维码获取作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!
✨ AI工具推荐 ✨
✨ 赠书活动 ✨
支持知识分享,畅享学习乐趣!特别感谢清华大学出版社 对本次赠书活动的鼎力支持!即日起,只需点赞、推荐、转发 此文章,作者将从后台随机抽取一位幸运儿,免费包邮赠送清华出版社提供的《Al Agent开发 零基础构建复合智能体》这本精彩书籍📚!
💡 赶快参与,一键三连,说不定你就是那位幸运读者哦!
往期推荐
期刊配图:模型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倍交叉验证
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考