Python中使用Gradient Boosting Decision Trees (GBDT)进行特征重要性分析

在机器学习中,了解哪些特征对模型的预测有重要影响是至关重要的。这不仅帮助我们理解模型的决策过程,还可以指导我们进行特征选择,从而提高模型的效率和准确性。Gradient Boosting Decision Trees(GBDT)是一种强大的集成学习方法,它通过组合多个决策树的预测来提高性能。GBDT也提供了衡量特征重要性的直观方式,这是通过观察每个特征在构建决策树时的使用频率和贡献程度来完成的。

本博客将通过几个代码示例,展示如何使用Python中的​​scikit-learn​​库来训练GBDT模型,并进行特征重要性分析。

准备数据

首先,我们需要准备数据。在这里,我们将使用​​scikit-learn​​内置的波士顿房价数据集作为示例。

复制代码
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split

# 加载数据
boston = load_boston()
X, y = boston.data, boston.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

训练一个GBDT模型

接下来,让我们使用​​GradientBoostingRegressor​​来训练一个GBDT模型。

复制代码
from sklearn.ensemble import GradientBoostingRegressor

# 初始化和训练模型
gbdt = GradientBoostingRegressor(random_state=42)
gbdt.fit(X_train, y_train)

特征重要性分析

一旦模型被训练,我们可以通过查看​​feature_importances_​​属性来分析各个特征的重要性。

复制代码
# 获取特征重要性
feature_importance = gbdt.feature_importances_

# 打印每个特征的重要性
for i, importance in enumerate(feature_importance):
    print(f"Feature {boston.feature_names[i]}: {importance}")

可视化特征重要性

为了更直观地理解特征重要性,我们可以将其可视化。

复制代码
import matplotlib.pyplot as plt
import numpy as np

# 对特征重要性进行排序
sorted_idx = np.argsort(feature_importance)
pos = np.arange(sorted_idx.shape[0]) + .5

# 绘制条形图
plt.figure(figsize=(12, 6))
plt.barh(pos, feature_importance[sorted_idx], align='center')
plt.yticks(pos, np.array(boston.feature_names)[sorted_idx])
plt.title('Feature Importance (GBDT)')
plt.xlabel('Relative Importance')
plt.ylabel('Feature')
plt.show()

使用SHAP值进行深入特征重要性分析

尽管GBDT提供了一种衡量特征重要性的方法,但SHAP(SHapley Additive exPlanations)值提供了一种更深入的分析特征对模型预测影响的方法。SHAP值基于博弈论,目标是解释每个特征对模型预测的贡献。

复制代码
import shap

# 计算SHAP值
explainer = shap.TreeExplainer(gbdt)
shap_values = explainer.shap_values(X_train)

# 可视化第一个样本的SHAP值
shap.initjs()
shap.force_plot(explainer.expected_value, shap_values[0,:], X_train[0,:], feature_names=boston.feature_names)

通过上述代码,我们不仅能看到哪些特征对模型预测最重要,而且还能了解每个特征是如何影响每个单独预测的。

总结

通过GBDT模型,我们不仅能够建立强大的预测模型,还能深入了解哪些特征在模型中扮演着重要角色。特征重要性分析帮助我们理解模型的决策过程,优化特征选择,提高模型的性能。而SHAP值的引入,则进一步深化了我们对模型预测背后影响因素的理解

相关推荐
CHANG_THE_WORLD5 分钟前
深入理解递归:从函数调用到调用栈的完整执行过程
java·开发语言·算法
半条_虫12 分钟前
豆包-网页逆向接口, 免token调用AI
python·ai·shell
kels889931 分钟前
单连接动态增减订阅:股票行情API后端降负载实战方案
开发语言·笔记·python·信息可视化·金融
爱吃程序猿的喵34 分钟前
LingBot-Map 复现与原理剖析:基于 Geometric Context Transformer 的流式 3D 重建
人工智能·python·深度学习·计算机视觉·3d·transformer
梦想不只是梦与想34 分钟前
Python 中的 match-case(模式匹配)
python·match-case
郝同学今天有进步吗37 分钟前
构建 LangGraph Code Review Agent(四):文件过滤与 AnalysisPackage 分包
git·python·ai·code review
a11177643 分钟前
基于PyTorch的动物图像识别系统 开源
人工智能·pytorch·python
qetfw1 小时前
MWU:Vue 3 + FastAPI 的 MaaFramework 跨平台 WebUI 源码
前端·vue.js·python·fastapi·开源项目·效率工具
a4493153621 小时前
MacBook USB-C不充电故障诊断:从PD握手到主板供电链路
c语言·开发语言·macos·电脑
测试老哥1 小时前
接口自动化测试分层设计与实践总结
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试