期刊配图:回归模型性能与数据分布(核密度)可视化

机器学习大数据算法

picture.image

✨ 欢迎关注Python机器学习AI ✨

本节介绍:基于参考文献

中对于

回归模型性能与数据分布(核密度)可视化方法进行相关复现,数据采用模拟数据无任何现实意义,作者根据个人对机器学习的理解进行代码实现与图表输出,细节并不保证与原文一定相同,仅供参考。

详细数据和代码将在稍后上传至交流群,付费群成员可在交流群中获取下载。需要的朋友可关注公众文末提供的购买方式。

购买前请咨询,避免不必要的问题。

✨ 论文信息 ✨

picture.image

论文原图

picture.image

可视化图表不仅比较了城市缩放和CatBoost模型在估算不同国家GDP时的表现,还加入了数据密度的信息。图中的颜色梯度从蓝色(低密度)到红色(高密度)表示不同数据点的密度分布,这样可以更直观地了解每个模型在不同区域的拟合情况。更高的密度区域通常意味着更多的观测值,进一步帮助理解模型在实际数据中的适应性

✨ 模拟实现 ✨

picture.image

这个图是参考文献进行模拟实现的CatBoost模型的拟合结果,展示了预测值与真实值之间的关系,并加入了数据密度的可视化(从蓝色到红色表示密度的变化),同时显示了模型的R²值、皮尔逊相关系数和JSD值

✨ 代码实现 ✨


          
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"seattle_sample_all.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 catboost import CatBoostRegressor
          
from sklearn.metrics import mean_squared_error, r2_score
          

          
# 初始化CatBoost回归模型
          
model = CatBoostRegressor(iterations=500,   # 设置迭代次数
          
                          depth=6,          # 树的深度
          
                          learning_rate=0.1,# 学习率
          
                          loss_function='RMSE', # 使用RMSE损失函数
          
                          cat_features=[],   # 如果有类别特征可以在此处指定
          
                          verbose=False
          
                         )
          

          
# 训练模型
          
model.fit(X_train, y_train)
      

使用 CatBoost 回归模型对房价数据进行训练,模型通过划分训练集和测试集来预测

log\_price

,并设置了超参数,如迭代次数、树的深度和学习率,为接下来的可视化提供模型基础


          
from sklearn.metrics import mean_squared_error, r2_score
          
from scipy.spatial.distance import jensenshannon
          

          
# 在测试集上进行预测
          
y_pred = model.predict(X_test)
          

          
# 计算R²
          
r2 = r2_score(y_test, y_pred)
          

          
# 计算Pearson相关系数
          
pearson_corr = np.corrcoef(y_test, y_pred)[0, 1]
          

          
# 计算JSD(需要先标准化预测和实际值)
          
# y_test_hist:将实际值(y_test)分成20个区间,并计算每个区间的频率
          
y_test_hist, _ = np.histogram(y_test, bins=20, density=True)  # 'bins=20'将数据分为20个区间,'density=True'使得每个区间的值归一化为概率密度
          

          
# y_pred_hist:将预测值(y_pred)分成20个区间,并计算每个区间的频率
          
y_pred_hist, _ = np.histogram(y_pred, bins=20, density=True)  # 'bins=20'将数据分为20个区间,'density=True'使得每个区间的值归一化为概率密度
          

          
# 计算JSD
          
jsd = jensenshannon(y_test_hist, y_pred_hist)
          

          
# 打印结果并加速输出
          
print("Test Set Evaluation Metrics:")
          
print(f"R²: {r2}")
          
print(f"Pearson's r: {pearson_corr}")
          
print(f"JSD: {jsd}")
      

picture.image

在测试集上评估回归模型的性能,计算了R²、Pearson相关系数和Jensen-Shannon散度(JSD)

R² 和 Pearson相关系数是最常用的回归评价指标,分别衡量模型的拟合优度和预测的线性相关性,而Jensen-Shannon散度(JSD)则用于衡量预测分布与真实分布之间的差异,值越小表示预测分布与真实分布越相似


          
# 创建正方形画布
          
fig, ax = plt.subplots(figsize=(6, 6), dpi=1200)
          

          
# 绘制测试集散点
          
ax.scatter(y_test, y_pred, color='#DCDCDC')
          

          
# 添加 x=y 参考线(黑色虚线)
          
x_min, x_max = min(y_test.min(), y_pred.min()), max(y_test.max(), y_pred.max())
          
ax.plot([x_min, x_max], [x_min, x_max], 'k--')
          

          
# 设置标签(英文)并加粗字体和增大字体
          
ax.set_xlabel('True Value', fontsize=16, fontweight='bold')
          
ax.set_ylabel('Predicted Value', fontsize=16, fontweight='bold')
          
ax.set_title('CatBoost Model', fontsize=18, fontweight='bold')
          

          
# 添加网格线
          
ax.grid(True)
          

          
# 关闭图例
          
ax.legend().set_visible(False)
          
# 显示测试集评价指标在左上角,使用黑色字体
          
test_metrics_text = f"R²: {r2:.3f}\nPearson's r: {pearson_corr:.3f}\nJSD: {jsd:.3f}"
          
ax.text(0.05, 0.95, f"{test_metrics_text}", transform=ax.transAxes, fontsize=15, fontweight='bold',
          
        verticalalignment='top', horizontalalignment='left', color='black')
          
plt.savefig("1.pdf", format='pdf', bbox_inches='tight')
          
plt.show()
      

picture.image

绘制测试集的实际值与预测值的散点图,并通过添加参考线、标题、网格和评价指标展示模型表现,但由于所有散点都使用相同颜色,无法反映数据的密度信息,密集的点难以区分


          
import seaborn as sns
          

          
# 创建正方形画布
          
fig, ax = plt.subplots(figsize=(6, 6), dpi=1200)
          

          
# 绘制核密度图
          
sns.kdeplot(x=y_test, y=y_pred, cmap='coolwarm', shade=True, ax=ax)
          

          
# 添加 x=y 参考线(黑色虚线)
          
x_min, x_max = min(y_test.min(), y_pred.min()), max(y_test.max(), y_pred.max())
          
ax.plot([x_min, x_max], [x_min, x_max], 'k--')
          

          
# 设置标签(英文)并加粗字体和增大字体
          
ax.set_xlabel('True Value', fontsize=16, fontweight='bold')
          
ax.set_ylabel('Predicted Value', fontsize=16, fontweight='bold')
          
ax.set_title('CatBoost Model', fontsize=18, fontweight='bold')
          

          
# 添加网格线
          
ax.grid(True)
          

          
# 关闭图例
          
ax.legend().set_visible(False)
          

          
# 显示测试集评价指标在左上角,使用黑色字体
          
test_metrics_text = f"R²: {r2:.3f}\nPearson's r: {pearson_corr:.3f}\nJSD: {jsd:.3f}"
          
ax.text(0.05, 0.95, f"{test_metrics_text}", transform=ax.transAxes, fontsize=15, fontweight='bold',
          
        verticalalignment='top', horizontalalignment='left', color='black')
          
plt.savefig("2.pdf", format='pdf', bbox_inches='tight')
          
plt.show()
      

picture.image

使用核密度估计(KDE)绘制了测试集实际值与预测值的二维密度图,通过颜色渐变显示数据密度,能够更清楚地反映数据的分布情况,相较于之前的散点图,这里能够更好地展示密集区域,当然最后也可以转换为散点图的形式

picture.image

✨ 该文章案例 ✨

picture.image

在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。

同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。

✨ 购买介绍 ✨

本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到 淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系 ,购买作者的公众号合集。截至目前为止,合集已包含200多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用,包括但不限于ChatGPT、Deepseek、Claude等。

更新的内容包含数据、代码、注释和参考资料。

作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤

购买前请咨询,避免不必要的问题。

✨ 群友反馈 ✨

picture.image

✨ 淘宝店铺 ✨

picture.image

请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信 deep_ML联系

避免淘宝客服漏掉信息

,希望能为您的学习之路提供帮助!

往期推荐

GeoShapley算法:基于地理数据的Shapley值在空间效应测量中的应用——位置重要性与特征交互作用分析

期刊配图:基于‘UpSet图’展示不同数据预处理对模型性能的影响

期刊配图:结合残差分析的模型预测性能可视化

J Clean Prod:结合K-means聚类确定样本分组方式再结合shap初步解释模型的模拟实现

文献配图:如何通过雷达图全面评估机器学习模型的预测性能

nature communications:结合LightGBM特征选择与RF模型的机器学习方法及SHAP解释

期刊配图:SHAP特征重要性与相关系数的联合可视化

期刊配图:结合lightgbm回归模型与K折交叉验证的特征筛选可视化

Nature新算法:准确的小数据预测与表格基础模型TabPFN分类实现及其模型解释

Nature新算法:准确的小数据预测与表格基础模型TabPFN回归实现及其模型解释

picture.image

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

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动 XR 技术的探索与实践
火山引擎开发者社区技术大讲堂第二期邀请到了火山引擎 XR 技术负责人和火山引擎创作 CV 技术负责人,为大家分享字节跳动积累的前沿视觉技术及内外部的应用实践,揭秘现代炫酷的视觉效果背后的技术实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论