scikit-learn - 将管道预测转换为原始值/规模

2024-03-31

我创建了一个管道,如下所示(使用Keras Scikit-Learn API https://keras.io/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管道方法 http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline.inverse_transform,但是似乎仅用于恢复转换后的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 的情况下拟合模型,但这可能很危险,具体取决于您的数据,因为它可能导致模型过度拟合。你必须测试一下;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scikit-learn - 将管道预测转换为原始值/规模 的相关文章

随机推荐