由于pythonic833的答案,我想通过解决方案跟进我的问题。我认为,如果使用管道,缩放新数据以进行预测的正确程序是使用管道上使用的原始训练数据从头到尾进行整个缩放过程。即使管道在训练过程中为您进行了扩展,也需要手动扩展训练数据,以便能够通过使用MinMaxScaler对象准确地预测新数据并正确缩放。下面是我的代码基于pythonic833答案和一些其他评论,如用Pickle保存模型。
from sklearn.preprocessing import MinMaxScaler pipe = Pipeline([('scaler', MinMaxScaler()), ('clf', SVR())]) time_split = TimeSeriesSplit(n_splits=5) param_grid = {'clf__kernel': ['rbf'], 'clf__C':[0.0001, 0.001], 'clf__gamma': [0.0001, 0.001]} grid = GridSearchCV(pipe, param_grid, cv= time_split, scoring='neg_mean_squared_error', n_jobs = -1) grid.fit(X_train, y_train) # Pickle the data with a content manager with open('Pickles/{}.pkl'.format(file_name), 'wb') as file: pickle.dump(grid, file) # Load Pickle with a content manager with open('Pickles/{}.pkl'.format(file_name), 'rb') as file: model = pickle.load(file) scaler = MinMaxScaler() scaler.fit(X_train) # Original training data for Pipeline X_train_scaled = scaler.transform(X_train) new_data_scaled = scaler.transform(new_data) model.predict(new_data_scaled)
当然,如果您获得新的(在未处理的意义上)数据,您需要执行与训练模型时相同的准备步骤。例如,如果使用默认比例的MinMaxScaler,则模型用于在每个要素中具有零均值和标准方差的数据,如果不预处理数据,则模型无法生成准确的结果。
请记住,使用与训练数据完全相同的MinMaxScaler对象。因此,如果将模型保存到文件中,还要保存预处理对象。