我使用额外的树分类器来找出哪些属性在我的数据集中更重要。结果,它为我返回了一个得分值(例如,每个属性都有一个得分,例如0.037
,0.025
,0.012
等。),这个得分到底是什么意思? >
model = ExtraTreesClassifier()
model.fit(dataValues, dataTargetEncoded)
feat_importances = pd.Series(model.feature_importances_,index=dataValues.columns)
feat_importances.nlargest(25).plot(kind='barh')
plt.show()
答案 0 :(得分:1)
分数本身是在BaseForest
类的feature_importances_中计算的。它们的计算方式为
np.mean(all_importances, axis=0, dtype=np.float64) / np.sum(all_importances)
其中all_importances
是ExtraTreesClassifier
的估计量的feature_importances_
的数组。估计数由的参数n_estimators
定义
ExtraTreesClassifier
。默认情况下,有10个估算器(n_estimators的默认值将从版本0.20
中的10更改为版本0.22
中的100):
est = [estimator for estimator in model.estimators_]
est[0]
Out[57]:
ExtraTreeClassifier(class_weight=None, criterion='gini', max_depth=None,
max_features='auto', max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, random_state=1045388471,
splitter='random')
len(est)
Out[58]: 10
所以all_importances
看起来像
[x.feature_importances_ for x in est]
Out[59]:
[array([0., 0., 1.]),
array([0., 0., 1.]),
array([0., 0., 1.]),
array([0.33333333, 0. , 0.66666667]),
array([0.11111111, 0.88888889, 0. ]),
array([0., 1., 0.]),
array([0., 0., 1.]),
array([0., 1., 0.]),
array([0., 0., 1.]),
array([0.33333333, 0.66666667, 0. ])]
每个估计量的 feature_importances_
通过用Cython编写的compute_feature_importances
类的Tree
方法来计算。它是通过遍历树节点的每个节点并添加到相应功能来计算的:
feature_importances_[node.feature] += node.weighted_n_node_samples * node.impurity -
left.weighted_n_node_samples * left.impurity -
right.weighted_n_node_samples * right.impurity
其中weighted_n_node_samples
和impurity
是带有节点参数的数组:
est[0].tree_.feature
Out[60]: array([ 2, 2, -2, -2, -2], dtype=int64)
est[0].tree_.weighted_n_node_samples
Out[61]: array([4., 2., 1., 1., 2.])
est[0].tree_.impurity
Out[62]: array([0.375, 0.5 , 0. , 0. , 0. ])
feature_importances_
在计算后被标准化。您可以通过使用参数compute_feature_importances
调用normalize=False
来查看原始值:
est[3].tree_.compute_feature_importances(normalize=False)
Out[63]: array([0.125, 0. , 0.25 ])
est[3].tree_.compute_feature_importances()
Out[64]: array([0.33333333, 0. , 0.66666667])
答案 1 :(得分:0)
一行:
分数越高,相应的功能就越重要。
用作树中决策节点的特征的相对等级(即深度)可用于评估该特征相对于目标变量的可预测性的相对重要性。 树顶部使用的功能有助于大部分输入样本的最终预测决策。他们所贡献的样本的预期比例因此可以用作特征相对重要性的估计。在scikit学习中,特征贡献的样本比例与从拆分中减少的杂质减少量相结合,以创建特征预测能力的归一化估计该功能。
您可以在
中找到更多详细信息G。卢珀,“理解随机森林:从理论到实践”, 列日大学博士学位论文,2014年。