使用sklearn计算随机森林模型中各特征的重要性

摘要 (Summary)

The 3 ways to compute the feature importance for the scikit-learn Random Forest was presented:

提出了三种计算scikit-learn随机森林特征重要性的方法:

  • built-in feature importance

    内置功能的重要性

  • permutation-based importance

    基于置换的重要性

  • computed with SHAP values

    用SHAP值计算

内置随机森林重要性 (Built-in Random Forest Importance)

基尼重要性 (或平均减少杂质),由随机森林结构计算得出。

我将展示如何使用scikit-learn软件包和Boston数据集(房价回归任务)来计算随机森林的特征重要性。

boston = load_boston()
X = pd.DataFrame(boston.data, columns=boston.feature_names)
y = boston.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=12)

使随机森林回归器具有100个决策树:

rf = RandomForestRegressor(n_estimators=100)rf.fit(X_train, y_train)

要从“随机森林”模型中获取要素重要性,请使用feature_importances_参数:

rf.feature_importances_array([0.04054781, 0.00149293, 0.00576977, 0.00071805, 0.02944643,       0.25261155, 0.01969354, 0.05781783, 0.0050257 , 0.01615872,       0.01066154, 0.01185997, 0.54819617])

 plt.barh(boston.feature_names, rf.feature_importances_)

 基于排列的重要性 (Permutation-based Importance)

 基于置换的重要性可用于克服使用平均杂质减少计算出的默认特征重要性的缺点。 它在scikit-learn作为permutation_importance方法实现。该方法将随机地对每个功能进行随机排序,并计算模型性能的变化。 最影响性能的功能是最重要的功能。

计算排列重要性:

perm_importance = permutation_importance(rf, X_test, y_test)

绘制重要性:

sorted_idx = perm_importance.importances_mean.argsort()plt.barh(boston.feature_names[sorted_idx], perm_importance.importances_mean[sorted_idx])plt.xlabel("Permutation Importance")

注: 基于排列的重要性非常消耗计算资源。

从SHAP值计算重要性 (Compute Importance from SHAP Values) 

可以使用SHAP解释(与模型无关)来计算随机森林中的特征重要性。 它使用博弈论中的Shapley值来估计每个特征如何对预测做出贡献。 它可以轻松安装( pip install shap )并与scikit-learn随机森林一起使用:

explainer = shap.TreeExplainer(rf)shap_values = explainer.shap_values(X_test)

 使用更多细节绘制特征重要性,以显示特征值:

shap.summary_plot(shap_values, X_test)

 

好的,实现随机森林分类可以按照以下步骤进行: 1. 导入必要的库和数据集。 ```python import pandas as pd from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 导入数据 data = pd.read_csv('data.csv') X = data.iloc[:, :-1] y = data.iloc[:, -1] ``` 2. 将数据集划分为训练集和测试集。 ```python # 划分数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 3. 定义随机森林分类器并训练模型。 ```python # 定义随机森林分类器 rfc = RandomForestClassifier(n_estimators=100, random_state=42) # 训练模型 rfc.fit(X_train, y_train) ``` 4. 对测试集进行预测并计算准确率。 ```python # 对测试集进行预测 y_pred = rfc.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print("Accuracy:", accuracy) ``` 5. 计算特征重要性并进行可视化。 ```python # 计算特征重要性 importances = rfc.feature_importances_ # 可视化特征重要性 import matplotlib.pyplot as plt feat_importances = pd.Series(importances, index=X.columns) feat_importances.nlargest(10).plot(kind='barh') plt.show() ``` 完整代码如下: ```python import pandas as pd from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import matplotlib.pyplot as plt # 导入数据 data = pd.read_csv('data.csv') X = data.iloc[:, :-1] y = data.iloc[:, -1] # 划分数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 定义随机森林分类器 rfc = RandomForestClassifier(n_estimators=100, random_state=42) # 训练模型 rfc.fit(X_train, y_train) # 对测试集进行预测 y_pred = rfc.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print("Accuracy:", accuracy) # 计算特征重要性 importances = rfc.feature_importances_ # 可视化特征重要性 feat_importances = pd.Series(importances, index=X.columns) feat_importances.nlargest(10).plot(kind='barh') plt.show() ``` 其中,`data.csv`是数据集文件,`X`是特征变量,`y`是目标变量,`n_estimators`是决策树数量,`random_state`是随机种子,`feat_importances.nlargest(10).plot(kind='barh')`表示绘制重要性最高的前10个特征的水平条形图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值