• 我正在使用Python中的RandomForestRegressor，我想创建一个图表来说明功能重要性的排名。这是我使用的代码：from sklearn.ensemble import RandomForestRegressorMT= pd.read_csv("MT_reduced.csv")df = MT.reset_...

我正在使用Python中的RandomForestRegressor，我想创建一个图表来说明功能重要性的排名。这是我使用的代码：
from sklearn.ensemble import RandomForestRegressor
df = MT.reset_index(drop = False)
columns2 = df.columns.tolist()
# Filter the columns to remove ones we don't want.
columns2 = [c for c in columns2 if c not in["Violent_crime_rate","Change_Property_crime_rate","State","Year"]]
# Store the variable we'll be predicting on.
target = "Property_crime_rate"
# Let’s randomly split our data with 80% as the train set and 20% as the test set:
# Generate the training set. Set random_state to be able to replicate results.
train2 = df.sample(frac=0.8, random_state=1)
#exclude all obs with matching index
test2 = df.loc[~df.index.isin(train2.index)]
print(train2.shape) #need to have same number of features only difference should be obs
print(test2.shape)
# Initialize the model with some parameters.
model = RandomForestRegressor(n_estimators=100, min_samples_leaf=8, random_state=1)
#n_estimators= number of trees in forrest
#min_samples_leaf= min number of samples at each leaf
# Fit the model to the data.
model.fit(train2[columns2], train2[target])
# Make predictions.
predictions_rf = model.predict(test2[columns2])
# Compute the error.
mean_squared_error(predictions_rf, test2[target])#650.4928
功能重要性 h1>
features=df.columns[[3,4,6,8,9,10]]
importances = model.feature_importances_
indices = np.argsort(importances)
plt.figure(1)
plt.title('Feature Importances')
plt.barh(range(len(indices)), importances[indices], color='b', align='center')
plt.yticks(range(len(indices)), features[indices])
plt.xlabel('Relative Importance')http://www.agcross.com/2015/02/random-forests-in-python-with-scikit-learn/上找到的示例更改了此功能重要性代码
我尝试使用我的数据复制代码时收到以下错误：
IndexError: index 6 is out of bounds for axis 1 with size 6此外，只有一个功能出现在我的统计图中，100%重要，没有标签。
任何帮助解决这个问题，所以我可以创建这个图表将不胜感激。

展开全文
• 基于 UCI 葡萄酒数据，使用随机森林进行特征重要性分析，这些数据是对意大利同一地区种植的三种不同品种葡萄酒的化学分析结果，分析确定了三种葡萄酒中13种成分的含量，数据的第一列是葡萄酒的类别
• 随机森林特征重要性和xgboost不同： 随机森林中的特征重要性主要是基于不纯度（也可以叫做Gini importance）： 对于分类问题的话，就是gini不纯度 对于回归问题的话，MSE(Mean Square error)或者MAE(Mean absolute...
随机森林中特征重要性和xgboost不同：
随机森林中的特征重要性主要是基于不纯度（也可以叫做Gini importance）：
计算某一个节点不纯度为  其中，

ω

k

\omega_k

,

ω

l

e

f

t

\omega_{left}

,

ω

r

i

g

h

t

\omega_{right}

分别为节点 k以及其左右子节点中训练样本个数与总训练样本数目的比例，

G

k

G_k

,

G

l

e

f

t

G_{left}

,

G

r

i

g

h

t

G_{right}

分为为节点 k 以及其左右子节点的不纯度。 节点不纯度计算完成后，计算某个Feature的不纯度为  另外，为了使所有feature的重要性加起来等于1，需要每一feature的重要性进行normalization：  对于分类问题的话，就是gini不纯度 对于回归问题的话，MSE(Mean Square error)或者MAE(Mean absolute error)
sklearn中的解释 sklearn源码
参考文章： https://blog.csdn.net/gracejpw/article/details/102611273 https://zhuanlan.zhihu.com/p/52052903 https://mljar.com/blog/feature-importance-in-random-forest/
展开全文
• 随机森林计算特征重要性The feature importance describes which features are relevant. It can help with a better understanding of the solved problem and sometimes lead to model improvement by utilizing ...

随机森林计算特征重要性

The feature importance describes which features are relevant. It can help with a better understanding of the solved problem and sometimes lead to model improvement by utilizing feature selection. In this post, I will present 3 ways (with code) to compute feature importance for the Random Forest algorithm from scikit-learn package (in Python).
功能重要性描述了哪些功能是相关的。 它可以帮助您更好地了解已解决的问题，有时还可以利用特征选择来改进模型。 在这篇文章中，我将介绍3种方法(使用代码)，以scikit-learn包(在Python中)为随机森林算法计算功能重要性。
内置随机森林重要性 (Built-in Random Forest Importance)
The Random Forest algorithm has built-in feature importance which can be computed in two ways:
随机森林算法具有内置的特征重要性，可以通过两种方式计算：
Gini importance (or mean decrease impurity), which is computed from the Random Forest structure. Let’s look at how the Random Forest is constructed. It is a set of Decision Trees. Each Decision Tree is a set of internal nodes and leaves. In the internal node, the selected feature is used to make a decision on how to divide the data set into two separate sets with similar responses within. The features for internal nodes are selected with some criterion, which for classification tasks can be Gini impurity or information gain, and for regression is variance reduction. We can measure how each feature decreases the impurity of the split (the feature with the highest decrease is selected for internal node). For each feature, we can collect how on average it decreases the impurity. The average over all trees in the forest is the measure of the feature importance. This method is available in scikit-learn the implementation of the Random Forest (for both classifier and regressor). It is worth mentioning that in this method, we should look at the relative values of the computed importances. This biggest advantage of this method is the speed of computation - all needed values are computed during the Radom Forest training. The drawback of the method is a tendency to prefer (select as important) numerical features and categorical features with high cardinality. What is more, in the case of correlated features it can select one of the features and neglect the importance of the second one (which can lead to wrong conclusions). 基尼重要性 (或平均减少杂质)，由随机森林结构计算得出。 让我们看看随机森林是如何构建的。 它是一组决策树。 每个决策树都是一组内部节点和叶子。 在内部节点中，所选功能用于决定如何将数据集分为两个单独的集合，并在其中进行类似的响应。 内部节点的特征按某些标准选择，对于分类任务可以是基尼杂质或信息增益，对于回归是方差减少。 我们可以测量每个特征如何减少分割的杂质(为内部节点选择具有最大减少的特征)。 对于每个功能，我们可以收集平均如何减少杂质。 森林中所有树木的平均值是特征重要性的度量。 scikit-learn可以使用此方法来scikit-learn随机森林的实现 (对于分类器和回归器)。 值得一提的是，在这种方法中，我们应该查看计算出的重要性的相对值。 此方法的最大优点是计算速度-在Radom Forest训练期间计算所有需要的值。 该方法的缺点是倾向于倾向于(选择作为重要的)具有高基数的数字特征和分类特征。 而且，在具有相关特征的情况下，它可以选择特征之一，而忽略第二个特征的重要性(这可能导致错误的结论)。 Mean Decrease Accuracy — is a method of computing the feature importance on permuted out-of-bag (OOB) samples based on a mean decrease in the accuracy. This method is not implemented in the scikit-learn package. The very similar to this method is permutation-based importance described below in this post. 平均降低准确性 -是一种基于准确性的平均降低来计算置换袋装(OOB)样本的特征重要性的方法。 scikit-learn包中未实现此方法。 与此方法非常相似的是下文中介绍的基于置换的重要性。
I will show how to compute feature importance for the Random Forest with scikit-learn package and Boston dataset (house price regression task).
我将展示如何使用scikit-learn软件包和Boston数据集(房价回归任务)来计算随机森林的特征重要性。
# Let's load the packagesimport numpy as npimport pandas as pdfrom sklearn.datasets import load_bostonfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestRegressorfrom sklearn.inspection import permutation_importanceimport shapfrom matplotlib import pyplot as pltplt.rcParams.update({'figure.figsize': (12.0, 8.0)})plt.rcParams.update({'font.size': 14})
Load the data set and split for training and testing.
加载数据集并拆分以进行训练和测试。
boston = load_boston()X = pd.DataFrame(boston.data, columns=boston.feature_names)y = boston.targetX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=12)
Fit the Random Forest Regressor with 100 Decision Trees:
使随机森林回归器具有100个决策树：
rf = RandomForestRegressor(n_estimators=100)rf.fit(X_train, y_train)
To get the feature importances from the Random Forest model use the feature_importances_ argument:
要从“随机森林”模型中获取要素重要性，请使用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])
Let’s plot the importances (chart will be easier to interpret than values).
让我们来画出重要性(图表比值更容易解释)。
plt.barh(boston.feature_names, rf.feature_importances_)
To have an even better chart, let’s sort the features, and plot again:
为了获得更好的图表，让我们对特征进行排序，然后再次绘图：
sorted_idx = rf.feature_importances_.argsort()plt.barh(boston.feature_names[sorted_idx], rf.feature_importances_[sorted_idx])plt.xlabel("Random Forest Feature Importance")

基于排列的重要性 (Permutation-based Importance)
The permutation-based importance can be used to overcome drawbacks of default feature importance computed with mean impurity decrease. It is implemented in scikit-learn as permutation_importance method. As arguments it requires trained model (can be any model compatible with scikit-learn API) and validation (test data). This method will randomly shuffle each feature and compute the change in the model's performance. The features which impact the performance the most are the most important one.
基于置换的重要性可用于克服使用平均杂质减少计算出的默认特征重要性的缺点。 它在scikit-learn作为permutation_importance方法实现。 作为参数，它需要训练有素的模型(可以是与scikit-learn API兼容的任何模型)和验证(测试数据)。 该方法将随机地对每个功能进行随机排序，并计算模型性能的变化。 最影响性能的功能是最重要的功能。
Permutation importance can be easily computed:
排列重要性很容易计算：
perm_importance = permutation_importance(rf, X_test, y_test)
To plot the importance:
绘制重要性：
sorted_idx = perm_importance.importances_mean.argsort()plt.barh(boston.feature_names[sorted_idx], perm_importance.importances_mean[sorted_idx])plt.xlabel("Permutation Importance")

The permutation-based importance is computationally expensive. The permutation-based method can have problems with highly-correlated features, it can report them as unimportant.
基于排列的重要性在计算上很昂贵。 基于置换的方法可能会遇到功能高度相关的问题，可以将其报告为不重要的。
从SHAP值计算重要性 (Compute Importance from SHAP Values)
The SHAP interpretation can be used (it is model-agnostic) to compute the feature importances from the Random Forest. It is using the Shapley values from game theory to estimate how does each feature contributes to the prediction. It can be easily installed ( pip install shap) and used with scikit-learn Random Forest:
可以使用SHAP解释(与模型无关)来计算随机森林中的特征重要性。 它使用博弈论中的Shapley值来估计每个特征如何对预测做出贡献。 它可以轻松安装( pip install shap )并与scikit-learn随机森林一起使用：
explainer = shap.TreeExplainer(rf)shap_values = explainer.shap_values(X_test)
To plot feature importance as the horizontal bar plot we need to use summary_plot the method:
要将要素重要性绘制为水平条形图，我们需要使用summary_plot方法：
shap.summary_plot(shap_values, X_test, plot_type="bar")

The feature importance can be plotted with more details, showing the feature value:
可以使用更多细节绘制特征重要性，以显示特征值：
shap.summary_plot(shap_values, X_test)

The computing feature importances with SHAP can be computationally expensive. However, it can provide more information like decision plots or dependence plots.
SHAP对计算功能的重要性在计算上可能很昂贵。 但是，它可以提供更多信息，例如决策图或依赖图。
摘要 (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值计算
In my opinion, it is always good to check all methods and compare the results. I’m using permutation and SHAP based methods in MLJAR’s AutoML open-source package mljar-supervised. I'm using them because they are model-agnostic and works well with algorithms not from scikit-learn: Xgboost, Neural Networks (keras+tensorflow), LigthGBM, CatBoost.
我认为，检查所有方法并比较结果总是好的。 我在MLJAR的AutoML开源软件包mljar-supervised使用基于置换和SHAP的方法。 我之所以使用它们，是因为它们与模型无关，并且可以很好地与scikit-learn算法配合使用：Xgboost，神经网络(keras + tensorflow)，LigthGBM，CatBoost。
重要笔记 (Important Notes)
The more accurate model is, the more trustworthy computed importance is. 模型越准确，计算出的重要性就越值得信赖。 The computed importances describe how important features are for the machine learning model. It is an approximation of how important features are in the data 计算出的重要性描述了机器学习模型的重要特征。 这是数据中重要特征的近似值

The mljar-supervised is an open-source Automated Machine Learning (AutoML) Python package that works with tabular data. It is designed to save time for a data scientist. It abstracts the common way to preprocess the data, construct the machine learning models, and perform hyper-parameters tuning to find the best model. It is no black-box as you can see exactly how the ML pipeline is constructed (with a detailed Markdown report for each ML model).
受mljar监督的是可处理表格数据的开源自动机器学习(AutoML)Python软件包。 它旨在为数据科学家节省时间。 它抽象了预处理数据，构建机器学习模型以及执行超参数调整以找到最佳模型的通用方法。 这不是黑盒子，因为您可以确切地看到ML管道的构造方式(每个ML模型都有详细的Markdown报告)。

The example report generated with a mljar-supervised AutoML package.

使用mljar监督的AutoML软件包生成的示例报告。

Originally published at https://mljar.com on June 29, 2020.
最初于 2020年6月29日 发布在 https://mljar.com 上。

翻译自: https://towardsdatascience.com/the-3-ways-to-compute-feature-importance-in-the-random-forest-96c86b49e6d4

随机森林计算特征重要性

展开全文
• 使用随机森林度量特征重要性的方法在此介绍两种： 通过基尼指数计算节点的不纯度衡量特征重要性 在节点t使用属性a作为划分属性，估计属于不同类的概率，使用p(k|t)，k=1,…,Q表示，基尼指数的定义为： Q是样本...
使用随机森林度量特征重要性的方法在此介绍两种：
通过基尼指数计算节点的不纯度衡量特征重要性  在节点t使用属性a作为划分属性，估计属于不同类的概率，使用p(k|t)，k=1,…,Q表示，基尼指数的定义为：  $\dpi{100} \large G(t)=1-\sum _{k=1}^{Q}p^{2}(k|t)$  Q是样本种类数。在使用属性Xj作为划分属性时，计算划分之前与划分之后的基尼指数（表示不确定性程度）之差，使用$\dpi{100} \large \Delta _{j}$表示，$\dpi{100} \large \bar{\Delta} _{j}$表示平均减少基尼指数。通过袋外数据的误差OOB（out-of-bag）衡量特征重要性
展开全文
• 特征选择方法中，有一种方法是利用随机森林，进行特征重要性度量，选择重要性较高的特征。下面对如何计算重要性进行说明。1 特征重要性​度量计算某个特征X的重要性时，具体步骤如下：1)对每一颗决策树，选择相应...
• 提出了一种基于随机森林的封装式特征选择算法RFFS，以随机森林算法为基本工具，以分类精度作为准则函数，采用序列后向选择和广义序列后向选择方法进行特征选择。在 UCI数据集上的对比实验结果表明，RFFS算法在分类...
• 本文是对随机森林如何用在特征选择上做一个简单的介绍。随机森林(RF)简介只要了解决策树的算法，那么随机森林是相当容易理解的。随机森林的算法可以用如下几个步骤概括：用有抽样放回的方法(bootstrap...
• Python 随机森林特征重要度 1 声明 本文的数据来自网络，部分代码也有所参照，这里做了注释和延伸，旨在技术交流，如有冒犯之处请...关于特征重要性，需要注意两点： 第一点scikit-learn要求我们将名义分类特...
• 答：在随机森林中某个特征X的重要性的计算方法如下：1：对于随机森林中的每一颗决策树,使用相应的OOB(袋外数据)数据来计算它的袋外数据误差,记为errOOB1.2: 随机地对袋外数据OOB所有样本的特征X加入噪声干扰(就可以...
• 我正在努力从我的随机森林回归器中找出特征重要性，我得到一个：AttributeError: 'GridSearchCV' object has no attribute'feature_importances_'.有人知道为什么没有属性吗？根据文件应该存在这个属性吗？在完整...
•   2019-02-12 23:53:35 ...通常，除了想知道我们的机器学习模型的房价预测是什么之外，我们还想知道为什么它是这么高/低，以及哪些特征在确定预测时最重要。另一个例子是预测客户流失 - 拥有一个...
• 大概是对于每颗树，按照impurity（gini /entropy /information gain）给特征排序，然后整个森林取平均。最优条件的选择依据是不纯度。不纯度在分类中通常为Gini不纯度或信息增益/信息熵，对于回归问题来说是方差。 ...
• from sklearn.datasets import load_boston from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split import numpy as np #Load boston housing dataset as an ...
• 随机森林（RF）简介 只要了解决策树的算法，那么随机森林是相当容易理解的。随机森林的算法可以用如下几个步骤概括： 1、用有抽样放回的方法（bootstrap）从样本集中选取n个样本作为一个训练集 2、用抽样得到的样本...
• 随机森林（RF）简介 只要了解决策树的算法，那么随机森林是相当容易理解的。随机森林的算法可以用如下几个步骤概括： 用有抽样放回的方法（bootstrap）从样本集中选取n个样本作为一个训练集 用抽样得到的样本集...
• 预处理：python实现用随机森林评估特征重要性 随机森林根据森林中所有决策树计算平均不纯度的减少来测量特征重要性，而不作任何数据是线性可分或不可分的假设。 import numpy as np import pandas as pd import ...
• 可视化随机森林特征重要性 # 查看随机森林特征重要性 import numpy as np import matplotlib.pyplot as plt from sklearn.ensemble import RandomForestClassifier from sklearn import datasets ​ iris = ...
• 随机森林分类方法的matlab代码实现，包括分类、重要度打分和回归。
• #使用ref进行特征选择 from sklearn.linear_model import LinearRegression, Ridge from sklearn import svm from sklearn.feature_selection import RFE lr = LinearRegression() rfe = RFE(lr, n_features_to_...
• 随机森林变量重要性评分及其研究进展，杨凯，侯艳，随机森林变量重要性评分（VIM）在高维组学数据生物标志物的筛选中有广泛应用，然而由于其有多种算法且适用条件不同，其结果也可能
• round(x,4),rf.feature_importances_),names))) 这里也可以不用随机森林，看到有人用线性回归的，有兴趣的同学也可以实现下，后面会附上相关链接 一般来说维数比较小的数据集得出来的重要性排序都不会有很低的，...
• 随机森林是指利用多棵决策树对样本进行训练并预测的一种算法。也就是说随机森林算法是一个包含多个决策树的算法，其输出的类别是由个别决策树输出的类别的众树来决定的。在Sklearn模块库中，与随机森林算法相关的...
• 大型数据集的问题在于许多特征是“相关的”，在这种情况下，很难比较可变重要性图的值的解释。例如，考虑一个非常简单的线性模型（“真实”模型，用于生成数据） 在这里，我们使用一个随机森林特征之间的关系...
• from sklearn.ensemble import RandomForestClassifier feat_labels = X.columns[0:] forest = RandomForestClassifier(n_...结果以“特征重要性”的形式显示出来 《python机器学习》学习笔记
•  随机森林计算特征重要性的原理 随机森林中进行特征重要性的评估思想：判断每个特征随机森林中的每颗树上做了多大的贡献，然后取个平均值，最后比一比特征之间的贡献大小。其中关于贡献的计算方式可以是不纯度或...
• 随机森林能够度量每个特征重要性，我们可以依据这个重要性指标进而选择最重要的特征。sklearn中已经实现了用随机森林评估特征重要性，在训练好随机森林模型后，直接调用feature_importances属性就能得到每个特征的...

...