希望这里有人能帮上忙,我很难把预测值恢复到“非比例”值。我在sklearn.preprocessing中使用了sklearn.preprocessing()。我的数据集是一个有4列(称为dataset)的numpy数组。
我试过的:
# 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的规模,有什么建议吗?
谢谢你在这方面的帮助!
发布于 2018-09-16 16:07:46
这是我的解决办法:
#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然后,在测试/火车拆分并运行模型之后:
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预测是正确的(据我所知)。
发布于 2018-09-15 15:44:28
下面是一个示例,说明了我在LSTM模型中用于缩放数据的方法。数据集是开放的、高的、低的、封闭的金融数据。该模型使用Open、High、Low和Close的过去值来尝试预测将来某一时刻的关闭值,因此需要对所有数据进行缩放,但输出关闭值需要反向缩小到实际的价格点。
首先实例化两个scaler对象,具体取决于您所使用的scaler:
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对象。
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是我的模型返回的数组。
real_prices = scaler_single.inverse_transform(predicted_prices)我希望这能帮上忙。
https://stackoverflow.com/questions/52346002
复制相似问题