【问题标题】:Is it possible to fit separate parts of an sklearn pipeline?是否可以安装 sklearn 管道的单独部分?
【发布时间】:2021-07-22 19:03:18
【问题描述】:

考虑关注 sklearn Pipeline:

pipeline = make_pipeline(
    TfidfVectorizer(),
    LinearRegression()
)

我已经预训练了TfidfVectorizer,所以当我调用pipeline.fit(X, y) 时,我只想安装LinearRegression 而我不想改装TfidfVectorizer

我可以提前应用转换并在转换后的数据上拟合 LinearRegression,但在我的项目中,我的管道中有很多转换器,其中一些是预训练的,有些不是,所以我是寻找一种不围绕 sklearn 估计器编写另一个包装器并保持在一个 Pipeline 对象的范围内的方法。

在我看来,它应该是 estimators 对象中的一个参数,表示在调用 .fit() 时如果对象已安装,则不重新安装对象。

【问题讨论】:

    标签: python machine-learning scikit-learn pipeline model-fitting


    【解决方案1】:

    您可以通过如下定义管道来仅找到回归量:

    pipeline = make_pipeline(steps = [
        ('vectorizer', TfidfVectorizer()),
        ('regressor', LinearRegression())
    ])
    

    然后

    pipeline['regressor']
    

    应该只给你回归量。

    【讨论】:

    • 但是假设你在管道中有很多估计器,单独调用它们不是很方便。此外,如果您想使用 GridSearchCV 优化管道,您不能单独调用每个估计器的拟合。
    • 如果您需要单独的结果,请尝试Voting Classifier
    【解决方案2】:

    查看“内存”参数。它缓存来自管道的转换器。

    https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html

    pipeline = make_pipeline(
        TfidfVectorizer(),
        LinearRegression(),
        memory='cache_directory'
    )
    

    【讨论】:

    • 感谢您的回答,但这不是我想要完成的。根据scikit-learn.org/stable/modules/… 的说法,当参数和输入数据与适合的参数和输入数据相同时,使用缓存。但就我而言,我想将LinearRegression 拟合到新数据,而TfidfVectorizer 拟合另一个数据并保持不变。重点是我想训练一次变压器,然后在不重新安装变压器的情况下在新数据的管道中使用它。
    【解决方案3】:

    您只能使用此 hack 来安装变压器一次

    from sklearn.preprocessing import FunctionTransformer
    
    def fit_once(transformer):
        fitted = [False]
    
        def func(x):
            if not fitted[0]:
                transformer.fit(x)
                fitted[0] = True
            return transformer.transform(x)
    
        return FunctionTransformer(func)
    
    pipeline = make_pipeline(
        fit_once(TfidfVectorizer()),
        LinearRegression()
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-01
      • 2013-10-16
      • 2020-03-01
      • 2021-08-28
      • 1970-01-01
      • 2020-04-15
      • 2015-04-03
      • 2017-05-11
      相关资源
      最近更新 更多