✨ 欢迎关注 ✨
本节介绍:相关系数可视化的优美呈现揭示数据之间的深层联系,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。 获取 前请咨询,避免不必要的问题
✨ 参考信息 ✨
在相关文献中,图9展示多种生态因素之间的相互作用对净生态生产力(NEP)的影响。该图采用配对因素与NEP之间的相互作用的可视化形式,利用q统计量来揭示各因素间的关系强度及其相互作用。这种可视化不仅有助于识别影响NEP的关键因素,还能够有效展示多因素交互对生态系统碳循环的综合影响
接下来可以借鉴这一可视化方法,将其应用于相关系数的可视化。通过使用类似的颜色映射和大小变化,可以直观地展示不同变量之间的相关性强度,并通过不同的颜色或大小标示显著性水平。此方式不仅使得相关系数矩阵的呈现更为直观,也为深入分析变量间的关系提供了清晰的视觉支持
✨ 代码实现 ✨
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-8-19公众号Python机器学习AI.xlsx"
df = pd.read_excel(path)
import scipy.stats as stats
from matplotlib.colors import LinearSegmentedColormap
# 计算相关系数矩阵和 p 值矩阵公众号Python机器学习AI
corr = df.corr()
p_values = pd.DataFrame(np.zeros_like(corr), columns=corr.columns, index=corr.index)
# 计算每个相关系数的 p 值
for i in range(len(corr.columns)):
for j in range(len(corr.columns)):
if i > j:
_, p_value = stats.spearmanr(df.iloc[:, i], df.iloc[:, j])
p_values.iloc[i, j] = p_value
p_values.iloc[j, i] = p_value
# 创建图形
fig, ax = plt.subplots(figsize=(12, 10))
# 自定义渐变色映射
colors = ['#e6f1f5', '#b3d4e6', '#81b8d6', '#5892c2', '#3c66a4'] # 提供的颜色值
cmap = LinearSegmentedColormap.from_list("custom_blue", colors, N=256)
norm = plt.Normalize(vmin=-1, vmax=1)
# 绘制气泡图和数值
for i in range(len(corr.columns)):
for j in range(len(corr.columns)):
if i > j: # 对角线左下部分,显示正方形
size = np.abs(corr.iloc[i, j]) * 1000 # 正方公众号Python机器学习AI形大小根据相关系数绝对值大小确定
color = cmap(norm(corr.iloc[i, j])) # 颜色映射为自定义渐变
ax.scatter(i, j, s=size, color=color, alpha=0.75, marker='s') # 绘制正方形
# 如果存在显著性 (P < 0.05),在正方形上添加 '*'
if p_values.iloc[i, j] < 0.05:
ax.text(i, j, '*', ha='center', va='center', color='black', fontsize=16, fontweight='bold')
elif i < j: # 对角线右上部分,显示相关系数数值
# 根据 p 值判断字体颜色
if p_values.iloc[i, j] > 0.05:
font_color = 'red' # 无显著性,使用红色字体
else:
font_color = 'black' # 存在显著性,使用黑色字体
ax.text(i, j, f'{corr.iloc[i, j]:.2f}', ha='center', va='center', color=font_color, fontsize=12, fontweight='bold') # 设置数值颜色
else: # 对角线部分,显示变量名的英公众号Python机器学习AI文字母,字体颜色为灰色
variable_name = corr.columns[i]
abbreviation = variable_name.split()[-1]
ax.text(i, j, abbreviation, ha='center', va='center', fontsize=14, color='gray', fontweight='bold') # 设置字体颜色为灰色
# 为每个格公众号Python机器学习AI子添加边框
ax.plot([i - 0.5, i + 0.5], [j - 0.5, j - 0.5], color='black', lw=1) # 上边框
ax.plot([i - 0.5, i + 0.5], [j + 0.5, j + 0.5], color='black', lw=1) # 下边框
ax.plot([i - 0.5, i - 0.5], [j - 0.5, j + 0.5], color='black', lw=1) # 左边框
ax.plot([i + 0.5, i + 0.5], [j - 0.5, j + 0.5], color='black', lw=1) # 右边框
# 设置坐标轴标签
ax.set_xticks(range(len(corr.columns)))
ax.set_xticklabels(corr.columns, rotation=45, ha='right', fontsize=14, fontweight='bold') # 设置字体加粗和增大
ax.set_yticks(range(len(corr.columns)))
ax.set_yticklabels(corr.columns, fontsize=14, fontweight='bold') # 设置字体加粗和增大
# 设置 x 和 y 轴的比公众号Python机器学习AI例相同
ax.set_aspect('equal')
# 强制使 x 轴和 y 轴的范围相同
ax.set_xlim(-0.5, len(corr.columns) - 0.5)
ax.set_ylim(-0.5, len(corr.columns) - 0.5)
# 添加颜色条,并调整大小
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])
cbar = fig.colorbar(sm, ax=ax, fraction=0.06, pad=0.04)
cbar.ax.tick_params(labelsize=18)
plt.tight_layout()
plt.savefig('corr-1.pdf', format='pdf', bbox_inches='tight', dpi=1200)
plt.show()
计算数据集df的相关系数矩阵和p值矩阵,并使用气泡图和数值可视化展示相关性强度和显著性,在下三角区域显示为正方形气泡图, 显著性通过星号标记 ,上三角区域为相关系数数值,根据p值的显著性,使用黑色字体(显著性 p < 0.05)和红色字体(无显著性 p ≥ 0.05)来区分显著和非显著的相关系数,最终生成并保存相关系数的可视化图表
在进行相关系数分析时,通常伴随剔除多重共线性问题,可以通过设置一个阈值来实现。具体来说,可以设定一个相关系数阈值,突出显示那些相关系数较高的特征对(例如,绝对值大于0.8的相关系数),这些特征对通常表示存在较强的线性关系,从而可能引发多重共线性问题。通过这种方式,可以帮助识别和处理冗余特征,提高模型的稳定性和预测能力
# 计算相关系数矩阵和 p 值矩阵
corr = df.corr()
p_values = pd.DataFrame(np.zeros_like(corr), columns=corr.columns, index=corr.index)
# 计算每个相关系数的 p 值
for i in range(len(corr.columns)):
for j in range(len(corr.columns)):
if i > j:
_, p_value = stats.spearmanr(df.iloc[:, i], df.iloc[:, j])
p_values.iloc[i, j] = p_value
p_values.iloc[j, i] = p_value
# 创建图形
fig, ax = plt.subplots(figsize=(12, 10))
# 自定义渐变色映射
colors = ['#e6f1f5', '#b3d4e6', '#81b8d6', '#5892c2', '#3c66a4'] # 提供的颜色值
cmap = LinearSegmentedColormap.from_list("custom_blue", colors, N=256)
norm = plt.Normalize(vmin=-1, vmax=1)
# 绘制气泡图和数值
for i in range(len(corr.columns)):
for j in range(len(corr.columns)):
if i > j: # 对角线左下部分,显示正方形或三角形
size = np.abs(corr.iloc[i, j]) * 1000
color = cmap(norm(corr.iloc[i, j])) # 颜色映射为自定义渐变
if np.abs(corr.iloc[i, j]) > 0.75:
# 如果相关系数绝对值大于0.75
ax.scatter(i, j, s=size, color=color, alpha=0.75, marker='o')
else:
# 否则,使用正方形
ax.scatter(i, j, s=size, color=color, alpha=0.75, marker='s') # 绘制正方形
# 如果存在显著性 (P < 0.05),在正方形或三角形上添加 '*'
if p_values.iloc[i, j] < 0.05:
ax.text(i, j, '*', ha='center', va='center', color='black', fontsize=16, fontweight='bold')
elif i < j: # 对角线右上部分,显示相关系数数值
# 根据 p 值判断字体颜色
if p_values.iloc[i, j] > 0.05:
font_color = 'red' # 无显著性,使用红色字体
else:
font_color = 'black' # 存在显著性,使用黑色字体
ax.text(i, j, f'{corr.iloc[i, j]:.2f}', ha='center', va='center', color=font_color, fontsize=12, fontweight='bold') # 设置数值颜色
else: # 对角线部分,显示变量名的英文字母,字体颜色为灰色
variable_name = corr.columns[i]
abbreviation = variable_name.split()[-1]
ax.text(i, j, abbreviation, ha='center', va='center', fontsize=14, color='gray', fontweight='bold') # 设置字体颜色为灰色
# 为每个格子添加边框
ax.plot([i - 0.5, i + 0.5], [j - 0.5, j - 0.5], color='black', lw=1) # 上边框
ax.plot([i - 0.5, i + 0.5], [j + 0.5, j + 0.5], color='black', lw=1) # 下边框
ax.plot([i - 0.5, i - 0.5], [j - 0.5, j + 0.5], color='black', lw=1) # 左边框
ax.plot([i + 0.5, i + 0.5], [j - 0.5, j + 0.5], color='black', lw=1) # 右边框
# 设置坐标轴标签
ax.set_xticks(range(len(corr.columns)))
ax.set_xticklabels(corr.columns, rotation=45, ha='right', fontsize=14, fontweight='bold') # 设置字体加粗和增大
ax.set_yticks(range(len(corr.columns)))
ax.set_yticklabels(corr.columns, fontsize=14, fontweight='bold') # 设置字体加粗和增大
# 设置 x 和 y 轴的比例相同
ax.set_aspect('equal')
# 强制使 x 轴和 y 轴的范围相同
ax.set_xlim(-0.5, len(corr.columns) - 0.5)
ax.set_ylim(-0.5, len(corr.columns) - 0.5)
# 添加颜色条,并调整大小
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])
cbar = fig.colorbar(sm, ax=ax, fraction=0.06, pad=0.04)
cbar.ax.tick_params(labelsize=18)
# 展示图形并保存
plt.tight_layout()
plt.savefig('corr-2.pdf', format='pdf', bbox_inches='tight', dpi=1200)
plt.show()
在前面的基础上,在下三角部分,如果相关系数绝对值大于0.75 的特征对用圆形气泡 (marker='o') 来表示,而其余部分则继续使用正方形 (marker='s')。这使得相关性较强的特征对更加突出,便于观察数据中存在多重共线性的特征对
更多关于相关系数可视化和通过多重共线性剔除来优化模型的细节,可以参考往期文章中的相关分析方法和结果,XGBoost模型优化:基于相关系数剔除多重共线性与穷举法进行特征选择、期刊复现:通过机器学习算法+相关系数优化特征选择避免多重共线性、期刊配图:相关系数+统计显著性的饼图可视化 美无需多言、期刊配图:结合显著性多样化相关系数可视化展现线性关系、整合数据分布+拟合线+置信区间+相关系数的皮尔逊相关可视化、digital medicine复现:缺失值过滤、方差过滤、缺失值插补、相关系数与逐步特征选择等
当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,下方提供淘宝店铺二维码获取作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!
往期推荐
期刊复现:连续数据与分类数据共存的SHAP可视化散点图与箱形图组合形式
期刊复现:多分类任务如何拆分为二分类任务并进行堆叠预测提高模型预测性能
期刊配图:SHAP值分析模型可解释性在柱状图与蜂窝图中的进阶组合展示
期刊配图:通过堆叠Mean|SHAP|展示不同区间对模型贡献度的可视化分析
期刊复现:利用UMAP降维算法可视化深度学习随着训练次数的增加模型区分能力的变化
期刊配图:PCA、t-SNE与UMAP三种降维方法简化高维数据的展示应用对比
Science期刊复现:分类、回归与Shap分析多角度揭示同一数据集变量对目标的影响
多模型SHAP+PDP解读Stacking集成模型:从基学习器到元学习器的可解释性与模型调参实现
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考