当最后一个估计器不是转换器时,如何使用 scikit-learn 管道进行转换?

Posted

技术标签:

【中文标题】当最后一个估计器不是转换器时,如何使用 scikit-learn 管道进行转换?【英文标题】:How can I transform with scikit-learn Pipeline when the last estimator is not a transformer? 【发布时间】:2022-01-07 09:37:48 【问题描述】:

我有一个管道,我想执行预处理和特征工程步骤,但我不能使用fit_transform(),因为RandomForestClassifier() 没有这样的方法。

我尝试使用管道的 _fit() 方法(因为这是 fit() 方法使用的方法),但这在我的转换器中给了我 KeyError。

这是下面的管道:

# pipeline transformations
_pipe = Pipeline(
    [
        (
            "most_frequent_imputer",
            MostFrequentImputer(features=config.model_config.impute_most_freq_cols),
        ),
        (
            "aggregate_high_cardinality_features",
            AggregateCategorical(features=config.model_config.high_cardinality_cats),
        ),
        (
            "get_categorical_codes",
            CategoryConverter(features=config.model_config.convert_to_category_codes),
        ),
        (
            "mean_imputer",
            MeanImputer(features=config.model_config.continuous_features),
        ),
        (
            "random_forest",
            RandomForestClassifier(n_estimators=100, n_jobs=-1, random_state=25),
        ),
    ]
)

【问题讨论】:

【参考方案1】:

您可以执行以下操作:

_pipe[:-1].fit_transform(X)

这将基本上选择除最后一个之外的所有步骤,以便您可以执行fit_transform()。需要注意的是,预处理步骤将被拟合。

【讨论】:

以上是关于当最后一个估计器不是转换器时,如何使用 scikit-learn 管道进行转换?的主要内容,如果未能解决你的问题,请参考以下文章

python使用记录

如何使用带有 countVectorizer.fit_transform() 的腌制分类器来标记数据

流水线和复合估算器

是否可以访问 spark.ml 管道中的估计器属性?

我如何使用不在 sklearn 中的估计器进行模型管道

typescript Angular 2应用程序角色访问装饰器,包装内置CanAccess功能。当用户角色不是ap时,防止视图转换