scikit-learn - 将管道预测转换为原始 value/scale
scikit-learn - Convert pipeline prediction to original value/scale
我创建了如下管道(使用 Keras Scikit-Learn API)
estimators = []
estimators.append(('standardize', StandardScaler()))
estimators.append(('mlp', KerasRegressor(build_fn=baseline_model, nb_epoch=50, batch_size=5, verbose=0)))
pipeline = Pipeline(estimators)
并搭配
pipeline.fit(trainX,trainY)
如果我用 pipline.predict(testX)
进行预测,我(相信)我得到了标准化的预测。
我如何预测 testX
以便 predictedY
它与实际(未触及)testY
具有相同的比例(即非标准化预测,但而不是实际值)? 我看到有一个 inverse_transform
method for Pipeline,但似乎只用于恢复转换后的 X
.
没错。管道中的 StandardScaler() 仅映射 pipeline.fit(trainX,trainY).
的输入 (trainX)
因此,如果您将模型拟合为近似 trainY 并且还需要对其进行标准化,则应将 trainY 映射为
scalerY = StandardScaler().fit(trainY) # fit y scaler
pipeline.fit(trainX, scalerY.transform(trainY)) # fit your pipeline to scaled Y
testY = scalerY.inverse_transform(pipeline.predict(testX)) # predict and rescale
inverse_transform() 函数根据 StandardScaler().fit() 中计算的标准差和平均值映射其值。
正如您提到的,您始终可以在不缩放 Y 的情况下拟合模型,但这可能很危险,具体取决于您的数据,因为它会导致模型过度拟合。你必须测试它;)
我创建了如下管道(使用 Keras Scikit-Learn API)
estimators = []
estimators.append(('standardize', StandardScaler()))
estimators.append(('mlp', KerasRegressor(build_fn=baseline_model, nb_epoch=50, batch_size=5, verbose=0)))
pipeline = Pipeline(estimators)
并搭配
pipeline.fit(trainX,trainY)
如果我用 pipline.predict(testX)
进行预测,我(相信)我得到了标准化的预测。
我如何预测 testX
以便 predictedY
它与实际(未触及)testY
具有相同的比例(即非标准化预测,但而不是实际值)? 我看到有一个 inverse_transform
method for Pipeline,但似乎只用于恢复转换后的 X
.
没错。管道中的 StandardScaler() 仅映射 pipeline.fit(trainX,trainY).
的输入 (trainX)因此,如果您将模型拟合为近似 trainY 并且还需要对其进行标准化,则应将 trainY 映射为
scalerY = StandardScaler().fit(trainY) # fit y scaler
pipeline.fit(trainX, scalerY.transform(trainY)) # fit your pipeline to scaled Y
testY = scalerY.inverse_transform(pipeline.predict(testX)) # predict and rescale
inverse_transform() 函数根据 StandardScaler().fit() 中计算的标准差和平均值映射其值。
正如您提到的,您始终可以在不缩放 Y 的情况下拟合模型,但这可能很危险,具体取决于您的数据,因为它会导致模型过度拟合。你必须测试它;)