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

相关推荐
那雨倾城13 分钟前
使用 OpenCV 将图像中标记特定颜色区域
人工智能·python·opencv·计算机视觉·视觉检测
belldeep3 小时前
如何阅读、学习 Tcc (Tiny C Compiler) 源代码?如何解析 Tcc 源代码?
c语言·开发语言
LuckyTHP3 小时前
java 使用zxing生成条形码(可自定义文字位置、边框样式)
java·开发语言·python
mahuifa4 小时前
(7)python开发经验
python·qt·pyside6·开发经验
学地理的小胖砸6 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
安迪小宝6 小时前
6 任务路由与负载均衡
运维·python·celery
Blossom.1186 小时前
使用Python实现简单的人工智能聊天机器人
开发语言·人工智能·python·低代码·数据挖掘·机器人·云计算
da-peng-song6 小时前
ArcGIS Desktop使用入门(二)常用工具条——数据框工具(旋转视图)
开发语言·javascript·arcgis
galaxy_strive6 小时前
qtc++ qdebug日志生成
开发语言·c++·qt
TNTLWT6 小时前
Qt功能区:简介与安装
开发语言·qt