scaler = MinMaxScaler(feature_range = (0, 1))
X_train[:, :, 0] = scaler.fit_transform(X_train[:, :, 0])
X_test[:, :, 0] = scaler.transform(X_test[:, :, 0])
X_train[:, :, 1] = scaler.fit_transform(X_train[:, :, 1])
X_test[:, :, 1] = scaler.transform(X_test[:, :, 1])
X_train[:, :, 2] = scaler.fit_transform(X_train[:, :, 2])
X_test[:, :, 2] = scaler.transform(X_test[:, :, 2])
X_train[:, :, 3] = scaler.fit_transform(X_train[:, :, 3])
X_test[:, :, 3] = scaler.transform(X_test[:, :, 3])
X_train[:, :, 4] = scaler.fit_transform(X_train[:, :, 4])
X_test[:, :, 4] = scaler.transform(X_test[:, :, 4])
scaler_filename = 'scaler.save'
joblib.dump(scaler, scaler_filename)
如您所见,我使用MinMaxScaler来标准化训练/测试数据的每一列。在那之后,我保存了缩放器对象以供后用。保存定标器后,是否可以仅对新数据调用“ transform”方法,还是必须调用“ fit”方法?
答案 0 :(得分:0)
我建议您为每个2D表使用不同的缩放器。在这里,您最后拥有的缩放器对象不记得索引0的缩放参数。尽管这可能是所需的行为,但请告诉我我是否错误...
如果使用joblib或pickle保存了缩放器对象并再次从文件中加载它,则它包含所有正确的参数以用于以后的转换,是的,您可以单独使用transform。
答案 1 :(得分:0)
来自docs:
MinMaxScaler 通过将每个要素缩放到给定范围来变换要素。
此估算器分别缩放和翻译每个功能,例如 它在训练集的给定范围内,例如零之间 还有一个。
无需分别为每个功能执行此操作,您可以一次缩放多个功能:
scaler = MinMaxScaler(feature_range = (0, 1))
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test= scaler.transform(X_test)
我也建议使用joblib来使您的洁牙机腌制:
import joblib
joblib.dump(scaler, 'scaler.save')
要加载洁牙机:
scaler = joblib.load('scaler.save')
...
答案 2 :(得分:0)
MinMaxScaler
在0到1之间缩放每一列数据。从机器学习的角度来看,正确的方法是“学习”训练数据上的缩放器,然后将学习到的缩放器用于测试数据。原因是两方面
我会这样使用
from sklearn.preprocessing import MinMaxScaler
import pickle
scaler = MinMaxScaler().fit(X_train) # learn a scaler on all columns of X_train
# now transform the training and testing data using the learned scaler
x_scaled_train = scaler.transform(X_train)
x_scaled_test = scaler.transform(X_test)
pickle.dump(scaler, open("scaler.pkl", "wb")) # save learned scaler