Dom*_*vic 5 python machine-learning scikit-learn cross-validation
如何在 GridSearchCV 中单独缩放每个折叠?
在训练 ML 模型时,我们应该对训练数据的特征进行标准化(缩放)。然后在测试数据上使用拟合的缩放器。但如果使用网格搜索 CV(5 倍),我们通常会为其提供已经缩放的训练数据。然后将其分成折叠。但是我们如何分别缩放每个 4-1 折叠呢?
scl = MinMaxScaler()
scl.fit_transform(X_train)
scl.transform(X_test)
# The training data was scaled all together and
# not train and validation separately
cv = GridSearchCV(MODEL, GRID, scoring='f1', cv=5)
cv.fit(X_train, Y_train)
Run Code Online (Sandbox Code Playgroud)
如果您对如何实现这样的目标有任何建议,请告诉我。
这就是管道的用途。
将当前模型转换为流水线模型,如下所示:
new_model = Pipeline([('scaler', MinMaxScaler()), ('model', cur_model)])
Run Code Online (Sandbox Code Playgroud)
不要提前扩展你的训练集。每次fit调用时,Pipeline 都会自动拟合和转换您的训练数据(当然仅使用训练数据)并transform使用fitting 调用测试集MinMaxScaler。