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)
当您运行 a 时GridSearchCV,将为每个组合重新计算管道步骤hyperparameters。所以是的,每次调用管道时都会完成此矢量化过程。
查看 sklearn Pipeline 和复合估计器。
去引用:
安装变压器的计算成本可能很高。通过其内存参数设置,Pipeline 将在调用 fit 后缓存每个转换器。如果参数和输入数据相同,此功能用于避免计算管道内的拟合变压器。一个典型的例子是网格搜索的情况,其中变压器只能安装一次并针对每种配置重复使用。
所以你可以使用该memory标志来缓存变压器。
cachedir = mkdtemp()
pipe = Pipeline(estimators, memory=cachedir)
Run Code Online (Sandbox Code Playgroud)