【发布时间】:2016-11-25 15:17:58
【问题描述】:
我有一组与二进制类标签相关的特征向量,
每个都有大约 40,000 个特征。我使用来自sklearn 的RandomForestClassifier 训练一个RandomForest 分类器,这大约需要10 分钟。不过,我想看看哪些是最重要的功能。
我尝试简单地打印出 clf.feature_importances_ 但这需要
每个功能大约 1 秒,总共大约 40,000 秒(大约 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]
【问题讨论】:
-
根据个人经验和这么多功能,我建议你试试 Spark MLlib。
-
@ahajib 谢谢,但是为什么找到重要特征要比构建分类器本身花费这么多时间呢?另外,您是否尝试过 xgboost?也许这更适合寻找重要特征?
-
你能发布你的代码的一部分吗?据我所知,
feature_importances_返回一个大小为 n 的数组,其中 n 是特征的数量,每个值表示特征的重要性。我不确定您所说的每个功能需要 1 秒是什么意思。 -
@ahajib 添加了一个示例。打印每个新功能大约需要 1 秒。是否每次都重新计算整个数组?
-
是的,这就是问题所在。在发布答案之前没有看到这个。顺便说一句,我建议您将结果写入文件而不是打印它们,因为通常打印有其自身的延迟。
标签: python scikit-learn