首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在随机森林中利用特征导入进行特征选择

在随机森林中利用特征导入进行特征选择
EN

Data Science用户
提问于 2015-08-04 17:44:35
回答 1查看 17.1K关注 0票数 13

我有用scikit-学习绘制随机森林的特征重要性。为了提高随机森林的预测效果,如何利用地块信息去除特征?例如,如何根据地块信息识别某一特征是否无用,甚至更糟地减少随机森林的性能?图基于属性feature_importances_,我使用分类器sklearn.ensemble.RandomForestClassifier

我知道存在其他特征选择技术,但在这个问题中,我想重点讨论如何使用特性feature_importances_

这类特征重要性情节的例子:

EN

回答 1

Data Science用户

发布于 2015-08-04 17:55:20

您可以简单地使用feature_importances_属性来选择重要性最高的特性。因此,例如,您可以使用以下函数来根据重要性选择K最佳特性。

代码语言:javascript
运行
复制
def selectKImportance(model, X, k=5):
     return X[:,model.feature_importances_.argsort()[::-1][:k]]

或者如果您使用的是管道,请使用下面的类

代码语言:javascript
运行
复制
class ImportanceSelect(BaseEstimator, TransformerMixin):
    def __init__(self, model, n=1):
         self.model = model
         self.n = n
    def fit(self, *args, **kwargs):
         self.model.fit(*args, **kwargs)
         return self
    def transform(self, X):
         return X[:,self.model.feature_importances_.argsort()[::-1][:self.n]]

例如:

代码语言:javascript
运行
复制
>>> from sklearn.datasets import load_iris
>>> from sklearn.ensemble import RandomForestClassifier
>>> iris = load_iris()
>>> X = iris.data
>>> y = iris.target
>>> 
>>> model = RandomForestClassifier()
>>> model.fit(X,y)
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=None, max_features='auto', max_leaf_nodes=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
            oob_score=False, random_state=None, verbose=0,
            warm_start=False)
>>> 
>>> newX = selectKImportance(model,X,2)
>>> newX.shape
(150, 2)
>>> X.shape
(150, 4)

很明显,如果您想要根据"top k功能“以外的其他标准进行选择,那么您可以相应地调整函数。

票数 14
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/6683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档