use*_*670 114 feature-selection random-forest scikit-learn
我有一个分类任务,时间序列作为数据输入,其中每个属性(n = 23)代表一个特定的时间点.除了绝对分类结果我想知道,哪些属性/日期对结果的贡献程度如何.所以我只是使用它feature_importances_
,这对我很有用.
但是,我想知道如何计算它们以及使用哪种度量/算法.很遗憾,我找不到有关此主题的任何文档.
Gil*_*ppe 141
确实有几种方法可以获得"重要性"功能.通常,对于这个词的含义没有严格的共识.
在scikit-learn中,我们实现了[1]中描述的重要性(经常被引用,但遗憾的是很少阅读......).它有时被称为"基尼重要性"或"平均减少杂质",并被定义为节点杂质的总减少量(通过到达该节点的概率加权(通过到达该节点的样本的比例近似))合奏的树木.
在文献或其他一些软件包中,您还可以找到以"平均降低精度"实现的特征重要性.基本上,当您随机置换该功能的值时,我们的想法是测量OOB数据的准确性降低.如果降低量较低,则该特征不重要,反之亦然.
(请注意,这两种算法都可以在randomForest R包中找到.)
[1]:Breiman,Friedman,"分类和回归树",1984年.
Pet*_*fer 54
计算单个树的特征重要性值的常用方法如下:
初始化一个feature_importances
大小为零的数组n_features
.
遍历树:对于拆分特征的每个内部节点,i
您计算该节点的误差减少乘以路由到节点的样本数并将此数量添加到该节点feature_importances[i]
.
误差减少取决于您使用的杂质标准(例如Gini,Entropy,MSE,......).它是路由到内部节点的一组示例中的杂质减去由分割产生的两个分区的杂质之和.
重要的是这些值与特定数据集相关(误差减少和样本数量都是特定于数据集)因此不能在不同数据集之间比较这些值.
据我所知,还有其他方法可以在决策树中计算特征重要性值.上述方法的简要描述可以在Trevor Hastie,Robert Tibshirani和Jerome Friedman的"统计学习元素"中找到.
ogr*_*sel 12
它是在集合的任何树中路由到涉及该特征的决策节点的样本数量与训练集中的样本总数之间的比率.
决策树的顶级节点中涉及的特征倾向于看到更多样本,因此可能具有更多重要性.
编辑:这个描述只是部分正确:吉尔斯和彼得的答案是正确的答案.
Pet*_*ter 11
正如@GillesLouppe上面指出的那样,scikit-learn目前实现了特征重要性的"平均减少杂质"度量.我个人觉得第二个指标更有趣,你可以逐个随机地对每个功能的值进行置换,看看你的包外性能有多差.
由于你所追求的特征重要性是每个特征对整体模型预测性能的贡献程度,第二个指标实际上可以直接衡量这一点,而"平均减少杂质"只是一个很好的代理.
如果您感兴趣,我编写了一个实现Permutation Importance指标的小包,可以用来计算scikit-learn随机林类的实例中的值:
https://github.com/pjh2011/rf_perm_feat_import
编辑:这适用于Python 2.7,而不是3
归档时间: |
|
查看次数: |
56107 次 |
最近记录: |