✨ 欢迎关注 ✨
本节介绍: 基于Pearson相关分析与SHAP评估特征重要性优化特征减少冗余 ,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。 获取 前请咨询,避免不必要的问题。
✨ 文献信息 ✨
在文献中,特征选择和冗余减少的过程通过Pearson相关分析和SHAP评估特征重要性实现。首先,Pearson相关分析用于筛选出具有低预测能力和共线性的特征,这样能够减少特征之间的冗余,同时保留数据中的关键特征。其次,SHAP值被用来系统地评估16个初始特征的显著性,包括排放的总氮(effluent TN)。通过这种方式,影响较小的特征被排除,减少了冗余,提升了特征选择的准确性和效率。这两种方法结合使得特征选择过程更加高效,同时保留了原始数据中的关键信息
当然,文献中并没有具体说明如何剔除特征。例如,尽管Pearson相关分析可以用于剔除共线性的特征,但文献没有明确说明当X_1和X_2具有强烈的线性相关时,应该剔除X_1还是X_2。同样,虽然SHAP排序用于排除影响较小的特征,但“影响较小”的标准并没有详细阐明。接下来,作者可以根据自己的理解,结合相关系数的阈值设定、SHAP值的排序及其对应的特征重要性,通过实验和模型优化的方式来具体实现这一过程
✨ 基础代码 ✨
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-2公众号Python机器学习AI.xlsx"
df = pd.read_excel(path)
import seaborn as sns
# 计算相关系数矩阵
corr_matrix = df.corr()
# 绘制相关系数热力图
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt='.2f', linewidths=0.5)
plt.savefig("corr_matrix.pdf", format='pdf', bbox_inches='tight', dpi=1200)
plt.tight_layout()
plt.show()
加载数据文件,计算特征之间的相关性,并使用Matplotlib绘制相关性矩阵的可视化图,帮助分析各个特征之间的关系,当然也可以通过自定义可视化,进行更多信息的展示,如下方的颜色表示相关性的方向(蓝色为正相关,红色为负相关),同时在饼图上标注相关系数值并显示显著性符号(
*
表示 p < 0.05,
**
表示 p < 0.01,
***
表示 p < 0.001),当然可视化形式不是重点
在这个相关系数矩阵中,SR是我们的目标变量。从矩阵中可以观察到, infAc 和 infpro 的相关系数为-0.73,表明这两个特征之间存在较强的负相关关系。同样, infpro 和 MLVSS 的相关系数为0.71,表明这两个特征之间也存在较强的正相关关系
由于这些特征之间具有较强的线性相关性,可以考虑根据一定的阈值剔除其中一个特征以减少冗余。具体剔除哪一个特征可以根据特征的实际意义和对模型的影响来决定。例如,如果 infpro 在业务背景下更具解释性或重要性,可能选择保留 infpro ,而剔除 infAc 。因此,剔除特征并不是一个固定的过程,需要结合数据的具体背景和模型需求来进行决策,在这里根据 对模型的影响来决定,如下
from sklearn.model_selection import train_test_split
# 划分特征和目标变量
X = df.drop(['SR'], axis=1) # 特征
y = df['SR'] # 目标变量
# 划分训练集和测试集,测试集占 20%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42)
from sklearn.preprocessing import StandardScaler
import pickle
# 初始化标准化器
scaler = StandardScaler()
# 标准化训练集
X_train_scaled = scaler.fit_transform(X_train)
# 用相同参数标准化测试集
X_test_scaled = scaler.transform(X_test)
import xgboost as xgb
model_xgb = xgb.XGBRegressor(random_state=42)
model_xgb.fit(X_train_scaled, y_train)
import shap
explainer = shap.TreeExplainer(model_xgb)
# 计算shap值为Explanation格式
shap_values_Explanation = explainer(X_test_scaled)
plt.figure(figsize=(10, 5), dpi=1200)
shap.plots.bar(shap_values_Explanation, show=False)
plt.savefig("SHAP_Explanation Sorted Feature Importance.pdf", format='pdf',bbox_inches='tight')
plt.tight_layout()
plt.show()
训练一个默认参数下XGBoost回归模型并计算SHAP值,通过可视化特征的重要性,提供各特征对模型的影响
根据SHAP值的排名,可以看到 infAc 和 infpro 对模型的影响相对较小,其中 infAc 的SHAP值为+1.12,而 infpro 的SHAP值为+0.38。相比之下, VSS/TSS 、 ana-time 和 infS 等特征对模型的影响远大于这两个特征
同样, infpro 和 MLVSS 之间的相关性较强(0.71),但 MLVSS 的SHAP值为+0.95,远高于 infpro 的+0.38
结合文献中的方法,SHAP值被用来系统地评估特征的重要性,并排除影响较小的特征。在这个分析中,salinity 和T 的SHAP值分别为+0.07和+0.04,这些值非常低,表明它们对模型的预测贡献较小。此外,结合相关系数从模型影响的角度来看,infpro 的SHAP值为+0.38,也相对较低,且与其他特征(如MLVSS、infAc )有较强的相关性,因此也可以考虑剔除
综上所述,salinity 、T 和infpro 这三个特征应当被剔除,这是在模拟数据集上进行的,剔除这些特征有助于减少冗余,提高模型的准确性和简洁性
✨ 扩展基于聚类的特征冗余发现 ✨
# 计算 clustering 结果和 shap_values_Explanation
clustering = shap.utils.hclust(X_test_scaled, y_test)
plt.figure(figsize=(10, 5), dpi=1200)
shap.plots.bar(shap_values_Explanation,
clustering=clustering,
clustering_cutoff=0.8,
show=False, max_display=13)
plt.savefig("SHAP_Explanation_with_Clustering.pdf", format='pdf', bbox_inches='tight')
plt.tight_layout()
plt.show()
使用SHAP库进行特征的重要性解释,并结合层次聚类(shap.utils.hclust)来发现具有高度相似SHAP值的特征。通过设置clustering_cutoff=0.8,只有那些SHAP值相似度超过80%的特征会被聚类在一起
图中的infAc和infS被划分在同一组(有一个灰色的聚类括号,和层次聚类一样的判断方法本身就是层次聚类),这表明这两个特征在模型中对预测的影响非常相似,属于相关性较强的特征,通过聚类更好地揭示了特征之间的相似性,有助于更清晰地理解哪些特征在模型决策中发挥了类似的作用,当特征被聚类在同一组时,说明它们对模型的预测有类似的贡献,可能在数据上表现出较高的相关性或冗余性,这意味着这些特征可能描述了相似的现象,或者它们在模型中提供的独立信息量较低。在模型优化中,发现这些相关特征可以帮助我们减少冗余特征,简化模型,或者进一步探索这些特征之间的关系,这是SHAP函数自带的一种方法,和前面的方法还是存在一定差异,作为扩展展示
当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,下方提供淘宝店铺二维码获取作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!
往期推荐
期刊复现:连续数据与分类数据共存的SHAP可视化散点图与箱形图组合形式
期刊复现:多分类任务如何拆分为二分类任务并进行堆叠预测提高模型预测性能
期刊配图:SHAP值分析模型可解释性在柱状图与蜂窝图中的进阶组合展示
期刊配图:通过堆叠Mean|SHAP|展示不同区间对模型贡献度的可视化分析
期刊复现:利用UMAP降维算法可视化深度学习随着训练次数的增加模型区分能力的变化
期刊配图:PCA、t-SNE与UMAP三种降维方法简化高维数据的展示应用对比
Science期刊复现:分类、回归与Shap分析多角度揭示同一数据集变量对目标的影响
多模型SHAP+PDP解读Stacking集成模型:从基学习器到元学习器的可解释性与模型调参实现
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考