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值的引入,则进一步深化了我们对模型预测背后影响因素的理解

相关推荐
Java后端的Ai之路2 小时前
【Python 教程15】-Python和Web
python
冬奇Lab3 小时前
一天一个开源项目(第15篇):MapToPoster - 用代码将城市地图转换为精美的海报设计
python·开源
灰子学技术5 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
二十雨辰6 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码6 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚6 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂6 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
pas1366 小时前
41-parse的实现原理&有限状态机
开发语言·前端·javascript
琹箐6 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
前端摸鱼匠7 小时前
YOLOv8 环境配置全攻略:Python、PyTorch 与 CUDA 的和谐共生
人工智能·pytorch·python·yolo·目标检测