我按如下方式创建了一个管道(使用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
方法用于管道,但似乎只是为了恢复转换X
.
究竟。管道中的StandardScaler()仅映射pipe.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的情况下拟合模型,但这可能会很危险,具体取决于您的数据,因为它可能导致模型过度拟合。您必须测试它;)