Scikit Learn 从管道内的 FeatureUnion 中提取特征名称

Posted

技术标签:

【中文标题】Scikit Learn 从管道内的 FeatureUnion 中提取特征名称【英文标题】:ScikitLearn Extracting Feature Names from FeatureUnion inside a pipeline 【发布时间】:2016-06-23 18:10:33 【问题描述】:

我正在使用 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】:

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

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]

【讨论】:

这是否有助于解决问题?我想知道 Avi 如何实现这个答案或使用不同的方法。谢谢! 这似乎无法回答所提出的问题

以上是关于Scikit Learn 从管道内的 FeatureUnion 中提取特征名称的主要内容,如果未能解决你的问题,请参考以下文章

如何从 scikit-learn 中的 TransformedTargetRegressor 管道中的经过训练的估计器访问属性?

如何将功能管道从 scikit-learn V0.21 移植到 V0.24

使用 Scikit-Learn 在管道中包含预测器

scikit-learn - 将管道预测转换为原始值/比例

管道内的 ColumnTransformer

特征不匹配:通过 scikit-learn 管道进行预测