每次加载新的 ML 模型时,是否会在 Pipeline 中重复进行预处理?

Yan*_*ana 1 python pipeline machine-learning scikit-learn

我使用 sklearn 创建了一个管道,以便多个模型将通过它。由于在拟合模型之前有向量化,我想知道这种向量化是否总是在模型拟合过程之前执行?如果是的话,也许我应该把这个预处理从管道中删除。

log_reg = LogisticRegression()
rand_for = RandomForestClassifier()
lin_svc = LinearSVC()
svc = SVC()

# The pipeline contains both vectorization model and classifier
pipe = Pipeline(
    [
        ('vect', tfidf),
        ('classifier', log_reg)
        ]
    )

# params dictionary example
params_log_reg = {
    'classifier__penalty': ['l2'],
    'classifier__C': [0.01, 0.1, 1.0, 10.0, 100.0],
    'classifier__class_weight': ['balanced', class_weights],
    'classifier__solver': ['lbfgs', 'newton-cg'],
    # 'classifier__verbose': [2],
    'classifier': [log_reg]
}

params = [params_log_reg, params_rand_for, params_lin_svc, params_svc] # param dictionaries for each model

# Grid search for to combine it all
grid = GridSearchCV(
    pipe, 
    params,
    cv=skf,
    scoring= 'f1_weighted')

grid.fit(features_train, labels_train[:,0])
Run Code Online (Sandbox Code Playgroud)

s51*_*510 6

当您运行 a 时GridSearchCV,将为每个组合重新计算管道步骤hyperparameters。所以是的,每次调用管道时都会完成此矢量化过程。

查看 sklearn Pipeline 和复合估计器

去引用:

安装变压器的计算成本可能很高。通过其内存参数设置,Pipeline 将在调用 fit 后缓存每个转换器。如果参数和输入数据相同,此功能用于避免计算管道内的拟合变压器。一个典型的例子是网格搜索的情况,其中变压器只能安装一次并针对每种配置重复使用。

所以你可以使用该memory标志来缓存变压器。

cachedir = mkdtemp()
pipe = Pipeline(estimators, memory=cachedir)
Run Code Online (Sandbox Code Playgroud)