如何在GridSearchCV中对每个折叠单独进行缩放?
在训练机器学习模型时,我们应该根据训练数据对特征进行标准化(缩放)。然后使用拟合后的缩放器处理测试数据。但如果使用网格搜索交叉验证(5折),我们通常会提供已经缩放过的训练数据。然后这些数据被分成折叠。但是,我们如何单独缩放这4-1个折叠呢?
scl = MinMaxScaler()scl.fit_transform(X_train)scl.transform(X_test)# 训练数据被整体缩放,而不是训练和验证数据分别缩放cv = GridSearchCV(MODEL, GRID, scoring='f1', cv=5)cv.fit(X_train, Y_train)
如果您有任何建议如何实现这样的功能,请告诉我。
回答:
这就是管道的用途所在。
像这样将您当前的模型转换为管道模型:
new_model = Pipeline([('scaler', MinMaxScaler()), ('model', cur_model)])
不要提前对训练集进行缩放。每当调用fit
时,管道会自动拟合并转换您的训练数据(当然只使用训练数据),并使用拟合后的MinMaxScaler
对测试集调用transform
。