首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学习标度问题(inverse_transform)

学习标度问题(inverse_transform)
EN

Stack Overflow用户
提问于 2018-09-15 15:11:53
回答 2查看 7.2K关注 0票数 0

希望这里有人能帮上忙,我很难把预测值恢复到“非比例”值。我在sklearn.preprocessing中使用了sklearn.preprocessing()。我的数据集是一个有4列(称为dataset)的numpy数组。

我试过的

代码语言:javascript
复制
# full dataset scaled, then split to 
X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X,Y, test_size = 0.4) 

# model looks good but can't inverse_transform(Y_pred) obviously. 
Y_pred = adam.predict(X_test)

scaled X_train, X_test # individually 
# model comes out bad

scaled X_train, X_test, Y_train, Y_test # individually 
# model comes out bad

我是不是以不正确的方式申请缩放?

如何在比例模型运行中反演Y_pred的规模,有什么建议吗?

谢谢你在这方面的帮助!

EN

回答 2

Stack Overflow用户

发布于 2018-09-16 16:07:46

这是我的解决办法:

代码语言:javascript
复制
#standard scaler used to condition data
def scaler(x):
    mu = statistics.mean(x)
    stddev = statistics.stdev(x)
    standardized = (x-mu)/stddev
    return(standardized)

#Split data into X, Y and condition (X are the "features", Y is the forecasted/predicted price or "target")
Y = dataset[:,6]
ymu = statistics.mean(Y) #before scaler transform, get mean to inverse scaler transform after model
ystddev = statistics.stdev(Y) #before scaler transform, get stdev
Y = scaler(Y) #scale (i.e. condition/transform) forecasted price data
Xprice = dataset[:,4]
Xvolume = dataset[:,5]
Xprice = scaler(Xprice) #scale (i.e. condition/transform) price data
Xvolume = scaler(Xvolume) #scale (i.e. condition/transform) volume data
X = np.vstack((Xprice, Xvolume)).T #create 2D array of scale features

然后,在测试/火车拆分并运行模型之后:

代码语言:javascript
复制
Y_pred = adam.predict(X_test)
#undo scaling after model is run to get back to original scale
Y_test_inverse = (Y_test * ystddev) + ymu
Y_pred_inverse = (Y_pred * ystddev) + ymu

这就产生了很好的结果,Y数据的实际规模和Y预测是正确的(据我所知)。

票数 1
EN

Stack Overflow用户

发布于 2018-09-15 15:44:28

下面是一个示例,说明了我在LSTM模型中用于缩放数据的方法。数据集是开放的、高的、低的、封闭的金融数据。该模型使用Open、High、Low和Close的过去值来尝试预测将来某一时刻的关闭值,因此需要对所有数据进行缩放,但输出关闭值需要反向缩小到实际的价格点。

首先实例化两个scaler对象,具体取决于您所使用的scaler:

代码语言:javascript
复制
from sklearn.preprocessing import MinMaxScaler
import numpy as np

scaler = MinMaxScaler(feature_range = (0, 1))
scaler_single = MinMaxScaler(feature_range = (0, 1))

使用scaler来转换开放的、高的和低的数据,使用scaler_single来缩放关闭的数据。然后,通过连接结果来构建缩放数据集。ohlcv是Pandas DataFrame对象。

代码语言:javascript
复制
scaled_data = np.concatenate([scaler.fit_transform(ohlcv[['Open', 'High', 'Low']]), 
                                  scaler_single.fit_transform(ohlcv[['Close']])], axis = 1)

现在,为了对输出的关闭数据进行反向缩放,使用inverse_transform对象的scaler_single方法。predicted_prices是我的模型返回的数组。

代码语言:javascript
复制
real_prices = scaler_single.inverse_transform(predicted_prices)

我希望这能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52346002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档