✨ 欢迎关注Python机器学习AI ✨
本节介绍: 基于RF模型的SHAP自定义全局解释与特征散点图优化 。数据采用模拟数据,作者根据个人对机器学习的理解进行代码实现与图表输出,细节并不保证与原文一定相同,仅供参考。 详细数据和代码、文献将在稍后上传至交流群,付费成员可在交流群中获取下载。需要的朋友可关注公众文末提供的购买方式。 购买前请咨询,避免不必要的问题。
✨ 文献信息 ✨
该文献利用随机森林回归模型(RF)分析城市热岛效应(UHI)强度,分别针对白天和夜间的两个数据集进行建模,并结合SHAP方法对模型结果进行变量解释。研究考虑了城市变量(如建筑高度、街道峡谷比率、建筑覆盖比率等)和气象变量(如空气温度、风速、太阳辐射等)来预测UHI强度。为了确保模型的稳定性和泛化能力,作者使用了10折交叉验证,分别对白天和夜间的数据集进行了独立的验证和优化
接下来,采用模拟数据来复现文献中的过程,使用与文献相同的参数和10折交叉验证。模拟数据集包含特征变量,如bathrooms、sqft_living、sqft_lot、grade、condition、waterfront、view和age,目标变量为log_price。将通过相同的随机森林回归模型(RF)进行建模,并结合SHAP方法进行变量解释,验证在该数据集上的模型性能与稳定性,下面为文献原图,会对这些图进行逐一的模拟实现
这些图通过SHAP值的可视化分析,展示了随机森林回归模型对白天和夜间UHI强度的预测性能,并深入解析了气象和城市变量对UHI强度的总效应。图1展示了模型的高预测准确性,图2则揭示了不同特征对UHI强度的贡献比例,图3和图4分别展示了气象变量和城市空间变量与UHI强度之间的非线性关系。这些分析重点聚焦于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"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 sklearn.model_selection import cross_val_score, KFold
from sklearn.ensemble import RandomForestRegressor
# 初始化随机森林回归模型
model = RandomForestRegressor(
n_estimators=100, # 使用100棵决策树
max_depth=None, # 没有最大深度限制
bootstrap=True, # 使用bootstrap样本
criterion='squared_error', # 使用均方误差准则
max_features='sqrt', # 每棵树评估特征的平方根('sqrt')
random_state=42, # 设置随机种子,确保结果可复现
verbose=False
)
# 创建 KFold 交叉验证对象并设置随机种子
kf = KFold(n_splits=10, random_state=42, shuffle=True)
# 使用 10 折交叉验证评估模型表现,评分标准使用 R²(拟合优度)
cv_scores = cross_val_score(model, X_train, y_train, cv=kf, scoring='r2')
# 输出每折的 R² 成绩以及平均 R² 成绩
print(f"每折的 R² 成绩: {cv_scores}")
print(f"平均 R² 成绩: {np.mean(cv_scores)}")
model.fit(X_train, y_train)
这段代码使用随机森林回归模型对数据集进行训练,并通过10折交叉验证评估模型的R²表现,划分训练集和测试集的方式与文献中的数据处理方法一致,特别是在使用随机森林回归和交叉验证来评估模型稳定性方面
也就是这里文献中提到的模型参数以及10折交叉验证每折成绩和其对应的平均成绩
接下来是对模型性能的评估,这张图展示了模型在测试集上的预测效果,并通过可视化来呈现性能。与文献中的表达方式一致,图中展示了预测值与真实值的关系,并且通过颜色渐变反映了密度分布。同时,图中给出了RMSE(均方根误差)、MAE(平均绝对误差)和R²(拟合优度)值,以量化模型的性能。值得注意的是,作者使用的是模拟数据集,目的是展示相关图表的输出,而非精准的模型性能。因此,读者在实际应用时需要确保所使用的模型具有较为优异的精度性能,这里参考的可视化是往期文章——期刊配图:不同机器学习方法在目标域测试集上的散点核密度图
在模型训练并验证其性能后,进入模型解释阶段,这一过程与文献中的配图类似。图中左侧展示了shap蜂巢图用于展示每个特征在模型预测中的重要性和影响,以便更直观地理解特征对预测结果的贡献。右侧则展示了这些变量的 绝对SHAP值平均值的比例 ,并根据特征的影响类型将其分为两个类别:'Physical Characteristics'(物理特征)和'Property Condition and View'(房产状况和视野)。细心的读者可以发现左侧图的y轴除了特征名称以外还有一个数值,其实这个数值就是特征对模型的 绝对SHAP值的平均值 表示其对模型输出的影响,这与文献中的方法相一致,能够帮助更直观地理解各个特征如何影响预测结果
图中展示了属于 Physical Characteristics (物理特征)类别的特征在SHAP值上的散点可视化,包含了以下特征: bathrooms (浴室数)、 sqft_living (居住面积)、 sqft_lot (土地面积)和 age (房龄)。每个散点图展示了特征值与相应SHAP值之间的关系,红色虚线代表SHAP=0也就是该情况下的特征值对于模型没有任何影响。通过这些散点图,可以更清晰地看到各个物理特征对模型输出的影响,以及它们如何随着特征值的变化而变化,尤其是 sqft_living 和 age 这两个特征与SHAP值之间的非线性关系,同样的接下来绘制 Property Condition and View(房产状况和视野)的shap散点可视化
到这里,文献中对于SHAP总效应的解读就告一段落了。需要注意的是,文献中使用了两个数据集,因此每种可视化形式展示了两个图表,而这里只是使用了一个数据集,但是代码逻辑完全相同。下一期文章,就将进入该文献SHAP主效应和交互效应的讲解与复现,相关内容将在下期文章中进行详细解析
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 购买介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系,购买作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用,包括但不限于ChatGPT、Deepseek、Claude等。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 购买前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信deep_ML联系 避免淘宝客服漏掉信息 ,希望能为您的学习之路提供帮助!
往期推荐
机器学习在临床数据分析中的应用:从数据预处理到Web应用实现的完整流程教学
因果推断:利用EconML实现双重机器学习估计条件平均处理效应 (CATE)
期刊复现:基于XGBoost模型的网页工具SHAP力图解释单样本预测结果
期刊配图:nature cities通过ALE(累积局部效应)解析特征对模型影响
期刊复现:结合因果推断与SHAP可解释性的机器学习实现应用流程
nature communications:基于Light GBM与随机森林结合的多模型特征选择方法
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考