我有一组与二进制类标签相关的特征向量,
每个都有大约40,000个功能。我使用来自RandomForestClassifier
的{{1}}训练一个RandomForest分类器,大约需要10分钟。不过,我想看看哪些是最重要的功能。
我尝试简单地打印sklearn
,但这需要
每个功能大约1秒,总体上大约40,000秒(大约12小时)。这个
比训练分类器所需的时间长得多
第一名!
是否有更有效的方法来确定哪些功能最重要?
这是我的意思的一个例子:
clf.feature_importances_
答案 0 :(得分:1)
您需要做的就是将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]
您现在处理它的方式是每次重新计算数组。
答案 1 :(得分:1)
我将建议一个小变体,它应该自动解决问题,因为它只获得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
:
for i, feature_importance in enumerate(clf.feature_importances_):
print feature_importance
这也是使用
的Pythonic方式for i in xrange(len(<some-array>)):
<some-array>[i]
我认为如果RandomForestClassifier
以某种方式跟踪其幕后状态会更好。如果状态发生变化(例如,n_estimators
已更改,或其他参数),则应重新计算feature_importances_
(动态,就像现在一样)。否则,它应该只返回当前,缓存的功能重要性
然而,这在幕后更复杂。
也许最简单的方法是将属性更改为实际方法:calc_feature_importances()
再说一遍,我没有投入精力创建RandomForestClassifier
,所以我无法抱怨。