如何在旧的 MinMaxScaler 上重新缩放新数据库?
How to rescale new data base on old MinMaxScale?
我遇到了扩展新数据的问题。在我的方案中,我已经训练和测试了模型,所有 x_train 和 x_test 都使用 sklearn.MinMaxScaler() 进行了缩放。然后,应用于实时过程,我怎样才能在训练和测试数据的相同规模下缩放新输入。
步骤如下
featuresData = df[features].values # Array of all features with the length of thousands
sc = MinMaxScaler(feature_range=(-1,1), copy=False)
featuresData = sc.fit_transform(featuresData)
#Running model to make the final model
model.fit(X,Y)
model.predict(X_test)
#Saving to abcxyz.h5
然后用新数据实施
#load the model abcxyz.h5
#catching new data
#Scaling new data to put into the loaded model << I'm stucking in this step
#...
那么如何对新数据进行缩放进行预测然后逆变换为最终结果呢?根据我的逻辑,它需要在训练模型之前以与旧缩放器相同的方式缩放。
您应该使用 fit()
和 transform()
来执行以下操作:
# Lets say you read real times data as new_data
featuresData = df[features].values
sc = MinMaxScaler(feature_range=(-1,1), copy=False)
featuresData = sc.fit_transform(featuresData)
new_data = sc.transform(new_data)
sc.transform
将在 new_data 上应用您在 featuresData 上应用的相同比例。
从您使用 scikit-learn 的方式来看,您需要保存转换器:
import joblib
# ...
sc = MinMaxScaler(feature_range=(-1,1), copy=False)
featuresData = sc.fit_transform(featuresData)
joblib.dump(sc, 'sc.joblib')
# with new data
sc = joblib.load('sc.joblib')
transformData = sc.transform(newData)
# ...
使用 scikit-learn 的最佳方式是将您的转换与模型合并。这样,您只保存包含转换管道的模型。
from sklearn import svm
from sklearn.preprocessing import MinMaxScaler
from sklearn.pipeline import Pipeline
clf = svm.SVC(kernel='linear')
sc = MinMaxScaler(feature_range=(-1,1), copy=False)
model = Pipeline([('scaler', sc), ('svc', clf)])
#...
当您执行 model.fit
时,模型首先会在后台为您的定标器执行 fit_transform
。使用 model.predict
,您的洁牙器的 transform
将被涉及。
考虑以下示例:
data1 = np.array([0, 1, 2, 3, 4, 5])
data2 = np.array([0, 2, 4, 6, 8, 10])
sc = MinMaxScaler()
sc.fit_transform(data1.reshape(-1, 1))
输出:
array([[0. ],
[0.2],
[0.4],
[0.6],
[0.8],
[1. ]])
第二个数据集在缩放后将为您提供相同的值:
sc.fit_transform(data2.reshape(-1, 1))
输出:
array([[0. ],
[0.2],
[0.4],
[0.6],
[0.8],
[1. ]])
让我们适应第一个数据集并为第二个数据集使用相同的缩放器:
sc.fit(data1.reshape(-1, 1))
sc.transform(data2.reshape(-1, 1))
输出:
array([[0. ],
[0.4],
[0.8],
[1.2],
[1.6],
[2. ]])
我遇到了扩展新数据的问题。在我的方案中,我已经训练和测试了模型,所有 x_train 和 x_test 都使用 sklearn.MinMaxScaler() 进行了缩放。然后,应用于实时过程,我怎样才能在训练和测试数据的相同规模下缩放新输入。 步骤如下
featuresData = df[features].values # Array of all features with the length of thousands
sc = MinMaxScaler(feature_range=(-1,1), copy=False)
featuresData = sc.fit_transform(featuresData)
#Running model to make the final model
model.fit(X,Y)
model.predict(X_test)
#Saving to abcxyz.h5
然后用新数据实施
#load the model abcxyz.h5
#catching new data
#Scaling new data to put into the loaded model << I'm stucking in this step
#...
那么如何对新数据进行缩放进行预测然后逆变换为最终结果呢?根据我的逻辑,它需要在训练模型之前以与旧缩放器相同的方式缩放。
您应该使用 fit()
和 transform()
来执行以下操作:
# Lets say you read real times data as new_data
featuresData = df[features].values
sc = MinMaxScaler(feature_range=(-1,1), copy=False)
featuresData = sc.fit_transform(featuresData)
new_data = sc.transform(new_data)
sc.transform
将在 new_data 上应用您在 featuresData 上应用的相同比例。
从您使用 scikit-learn 的方式来看,您需要保存转换器:
import joblib
# ...
sc = MinMaxScaler(feature_range=(-1,1), copy=False)
featuresData = sc.fit_transform(featuresData)
joblib.dump(sc, 'sc.joblib')
# with new data
sc = joblib.load('sc.joblib')
transformData = sc.transform(newData)
# ...
使用 scikit-learn 的最佳方式是将您的转换与模型合并。这样,您只保存包含转换管道的模型。
from sklearn import svm
from sklearn.preprocessing import MinMaxScaler
from sklearn.pipeline import Pipeline
clf = svm.SVC(kernel='linear')
sc = MinMaxScaler(feature_range=(-1,1), copy=False)
model = Pipeline([('scaler', sc), ('svc', clf)])
#...
当您执行 model.fit
时,模型首先会在后台为您的定标器执行 fit_transform
。使用 model.predict
,您的洁牙器的 transform
将被涉及。
考虑以下示例:
data1 = np.array([0, 1, 2, 3, 4, 5])
data2 = np.array([0, 2, 4, 6, 8, 10])
sc = MinMaxScaler()
sc.fit_transform(data1.reshape(-1, 1))
输出:
array([[0. ],
[0.2],
[0.4],
[0.6],
[0.8],
[1. ]])
第二个数据集在缩放后将为您提供相同的值:
sc.fit_transform(data2.reshape(-1, 1))
输出:
array([[0. ],
[0.2],
[0.4],
[0.6],
[0.8],
[1. ]])
让我们适应第一个数据集并为第二个数据集使用相同的缩放器:
sc.fit(data1.reshape(-1, 1))
sc.transform(data2.reshape(-1, 1))
输出:
array([[0. ],
[0.4],
[0.8],
[1.2],
[1.6],
[2. ]])