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

相关推荐
好喜欢吃红柚子1 分钟前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python5 分钟前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
k09337 分钟前
sourceTree回滚版本到某次提交
开发语言·前端·javascript
神奇夜光杯15 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
Themberfue17 分钟前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
plmm烟酒僧19 分钟前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv
千天夜26 分钟前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼30 分钟前
Python 大数据展示屏实例
大数据·开发语言·python
羊小猪~~34 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
晨曦_子画39 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin