ScikitLearn从管道内的FeatureUnion中提取要素名称

时间:2016-03-09 11:31:12

标签: machine-learning scikit-learn random-forest data-science sklearn-pandas

我使用SKlearn的Pipeline模型来提取和构建一个联合特征,然后将其发送到随机森林分类器,而某些特征提取器可以在以后删除或添加,请考虑以下结构:

model = Pipeline([
                  ('feature_extract',
                     FeatureUnion([
                                   ('feature A', extracorA()),
                                   ('feature B', ExtractorB()),
                                   ('feature C', FeatureUnion([
                                                      ('c1', C1Extractor())
                                                      ('c2', C2Extractor())]))
                                                                               )]),
                   ('random_forest', RandomForestRegressor(...)))])

我想通过检查

来改进随机森林的预测
feature_importances_
RandomForstRegressor的

属性

我设法使用:

获取列表
model._final_estimator.feature_importances_

现在我想将feature_importances_索引中的列号与管道中的功能名称/步骤动态链接。

是否有一种在功能联合中保存/检索功能名称的首选方法?你会如何解决这个问题?

1 个答案:

答案 0 :(得分:-1)

要以动态形式保存所有内容,可以使用以下函数作为单独类的转换实现,并使类的对象成为管道的一部分。您甚至可以更改评分参数。我认为网格搜索作为管道的一部分是您正在寻找的......

def best_config(model, parameters, train_instances, judgements):
    clf = GridSearchCV(model, parameters, cv=5,
                       scoring="accuracy", verbose=5, n_jobs=4)
    clf.fit(train_instances, judgements)
    best_estimator = clf.best_estimator_

    return [str(clf.best_params_), clf.best_score_,
            best_estimator]