在随机森林中寻找重要特征是非常重要的

2024-09-26 17:56:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组与二进制类标签相关的特征向量, 每个都有大约40000个功能。我使用来自sklearnRandomForestClassifier训练一个随机森林分类器,大约需要10分钟。不过,我想看看哪些是最重要的功能。在

我试着简单地打印出clf.feature_importances_,但这需要 每个功能约1秒,总共约40000秒(约12小时)。这个 比训练分类器所需的时间长得多 第一名!在

有没有更有效的方法来找出哪些特性是最重要的?在

我的意思是:

from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=50)
clf = clf.fit(X, Y)
for i in xrange(len(clf.feature_importances_)):
    print clf.feature_importances_[i]

Tags: 方法功能分类器森林时间二进制标签特性
2条回答

您需要做的就是将clf.feature_importances_的结果存储在一个数组中,然后使用它打印出结果。比如:

from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=50)
clf = clf.fit(X, Y)

featureImportance = clf.feature_importances_
for i in xrange(len(featureImportance)):
    print featureImportance[i]

现在处理它的方法是每次都重新计算数组。在

我将建议一个小的变体,它可以自动解决问题,因为它只得到feature_importances_一个:

from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=50)
clf = clf.fit(X, Y)
for feature_importance in clf.feature_importances_:
    print feature_importance

如果需要循环索引i,只需使用enumerate

^{pr2}$

这也是比使用

for i in xrange(len(<some-array>)): 
    <some-array>[i]

我认为如果RandomForestClassifier在幕后跟踪它的状态会更好。如果状态发生变化(例如,n_estimators被更改,或者其他参数),它应该重新计算feature_importances_(像现在一样动态)。否则,它应该只返回当前缓存的功能重要性。
然而,这在幕后更为复杂。在

也许最简单的方法是将属性更改为实际的方法:calc_feature_importances()
再说一次,我没有把精力放在创建RandomForestClassifier上,所以我不能抱怨。在

相关问题 更多 >

    热门问题