【发布时间】:2017-09-08 01:24:29
【问题描述】:
我正在使用 sickit-learn 来调整模型的超参数。我正在使用管道将预处理与估计器链接起来。我的问题的一个简单版本如下所示:
import numpy as np
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
grid = GridSearchCV(make_pipeline(StandardScaler(), LogisticRegression()),
param_grid={'logisticregression__C': [0.1, 10.]},
cv=2,
refit=False)
_ = grid.fit(X=np.random.rand(10, 3),
y=np.random.randint(2, size=(10,)))
在我的例子中,预处理(玩具示例中的 StandardScale())非常耗时,而且我没有调整它的任何参数。
因此,当我执行示例时,StandardScaler 会执行 12 次。 2 拟合/预测 * 2 cv * 3 参数。但是每次对参数 C 的不同值执行 StandardScaler 时,它都会返回相同的输出,因此计算一次,然后只运行管道的估计器部分会更有效。
我可以手动拆分预处理(未调整超参数)和估计器之间的管道。但是要将预处理应用于数据,我应该只提供训练集。所以,我必须手动实现拆分,根本不使用 GridSearchCV。
是否有一种简单/标准的方法可以避免在使用 GridSearchCV 时重复预处理?
【问题讨论】:
标签: python numpy machine-learning scikit-learn grid-search