首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用inverse_transform时出错返回值错误

使用inverse_transform时出错返回值错误
EN

Stack Overflow用户
提问于 2021-04-27 02:11:11
回答 1查看 56关注 0票数 0

我是LSTM的新手,我正在学习一个股票价格预测的教程。

我正在尝试实现所有功能,但我一直收到一个错误:

代码语言:javascript
运行
复制
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-21-87c8b43ab572> in <module>
     36 #Get the models predicted price values
     37 predicted_prices= model.predict(x_test)
---> 38 predicted_prices=scaler.inverse_transform(predicted_prices)
 
~\anaconda3\lib\site-packages\sklearn\preprocessing\_data.py in inverse_transform(self, X)
    430                         force_all_finite="allow-nan")
    431
--> 432         X -= self.min_
    433         X /= self.scale_
    434         return X
 
ValueError: non-broadcastable output operand with shape (401,1) doesn't match the broadcast shape (401,6)

我正在试图找到这个错误的解释,下面是代码

代码语言:javascript
运行
复制
company = "AC.TO"
start= dt.datetime(2012,1,1)
end= dt.datetime(2020,1,1)
data = web.DataReader(company, "yahoo", start,end)
data_df= data.filter(['Close'])
dataset= data.values
training_data_len= math.ceil(len(dataset)*.8)
scaler = MinMaxScaler(feature_range=(0,1))
scaled_data = scaler.fit_transform(dataset)
train_data=scaled_data[0:training_data_len, :]
 
predication_days=60
x_train=[]
y_train=[]
 
for x in range (predication_days,len(train_data)):
    x_train.append(train_data[x-predication_days:x, 0])
    y_train.append(train_data[x, 0])
 
    if x<= predication_days+1:
        print (x_train)
        print (y_train)
        print()
x_train, y_train = np.array(x_train), np.array(y_train)
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1],1))
model= Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train.shape[1],1)))
model.add(LSTM(units=50,return_sequences=False))
model.add(Dense(units=25))
model.add(Dense(units=1))
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(x_train, y_train, epochs=1, batch_size=1)
test_data = scaled_data[training_data_len - predication_days:,:]
x_test=[]
y_test=dataset[training_data_len:, :]
 
for x in range(predication_days,len(test_data)):
    x_test.append(test_data[x-predication_days:x,0])
 
x_test=np.array(x_test)
x_test=np.reshape(x_test,(x_test.shape[0],x_test.shape[1],1))
predicted_prices= model.predict(x_test)
predicted_prices=scaler.inverse_transform(predicted_prices)

我的问题更多的是关于这个错误的原因,以从中吸取教训,以及如何修复它?

EN

回答 1

Stack Overflow用户

发布于 2021-04-27 02:51:59

您正在缩放所有数据集列。

因此,无论何时创建inverse_transform,都应该包含在fit_transform上使用的所有列。

要仅反转标签,必须分别为要素( X )和标签( y )创建比例,然后只能在y或X中创建inverse_transform。

此外,在训练数据集上生成scale.fit_transform ONLY,然后在测试数据集上生成scale.transform也是一个很好的实践。

代码语言:javascript
运行
复制
features_scaler = MinMaxScaler(feature_range=(0,1))
label_scaler =  MinMaxScaler(feature_range=(0,1))

train_data = dataset[0:training_data_len, :]
test_data = dataset[training_data_len:, :]
x_train = features_scaler.fit_transform(train_data[my_feature_columns].to_numpy())
y_train = label_scaler.fit_transform(train_data[my_label_column].to_numpy())
x_test = features_scaler.transform(test_data[my_feature_columns].to_numpy())
y_test = label_scaler.transform(test_data[my_label_column].to_numpy())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67271740

复制
相关文章

相似问题

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