首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我如何将keras回归预测的(1006,19)结果重组为(1006,1) numpy数组?

我如何将keras回归预测的(1006,19)结果重组为(1006,1) numpy数组?
EN

Stack Overflow用户
提问于 2021-04-22 04:19:09
回答 1查看 72关注 0票数 1

我试图在botch、PyTorch和Keras中创建一个股票预测模型。我已经在网上学习了一些教程,并对其进行了修改,以适应我的数据,而且效果很好。

现在,我将这些代码转换为兼容的Keras模型。我已经创建了模型并进行了预测,但问题是来自Keras的regressor.predict()函数返回一个(1006,19) numpy数组,而当我执行predictions = model(x_test)时,它返回一个(1006,1),这是我接下来工作所需要的,这样我就可以绘制结果。

到目前为止,这是我的Keras代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from keras.models import Sequential
from keras.layers import LSTM, Dense, Dropout

lookback = 20
x_train_keras, y_train_keras, x_test_keras, y_test_keras = split_data(price, lookback)
print('x_train.shape = ',x_train_keras.shape)  # x_train.shape =  (1006, 19, 1)
print('y_train.shape = ',y_train_keras.shape)  # y_train.shape =  (1006, 1)
print('x_test.shape = ',x_test_keras.shape)  # x_test.shape =  (252, 19, 1)
print('y_test.shape = ',y_test_keras.shape)  # y_test.shape =  (252, 1)

regression = Sequential()
regression.add(LSTM(units=50, return_sequences=True, kernel_initializer='glorot_uniform', input_shape=(x_train_keras.shape[1],1)))
regression.add(Dropout(0.2))

regression.add(LSTM(units=50,kernel_initializer='glorot_uniform',return_sequences=True))
regression.add(Dropout(0.2))

regression.add(LSTM(units=50,kernel_initializer='glorot_uniform',return_sequences=True))
regression.add(Dropout(0.2))

regression.add(LSTM(units=50,kernel_initializer='glorot_uniform',return_sequences=True))
regression.add(Dropout(0.2))

regression.add(Dense(units=1))

regression.compile(optimizer='adam', loss='mean_squared_error')

from keras.callbacks import History

history = History()
history = regression.fit(x_train_keras, y_train_keras, batch_size=30, epochs=100, callbacks=[history])

train_predict_keras = regression.predict(x_train_keras)
train_predict_keras = train_predict_keras.reshape((train_predict_keras.shape[0], train_predict_keras.shape[1]))

predict = pd.DataFrame(scaler.inverse_transform(train_predict_keras))
original = pd.DataFrame(scaler.inverse_transform(y_train_keras))

fig = plt.figure()
fig.subplots_adjust(hspace=0.2, wspace=0.2)

plt.subplot(1,2,1)
ax = sns.lineplot(x=original.index, y=original[0], label='Data', color='royalblue')
ax = sns.lineplot(x=predict.index, y=predict[0], label='Training Prediction', color='tomato')
ax.set_title('Stock Price', size=14, fontweight='bold')
ax.set_xlabel("Days", size = 14)
ax.set_ylabel("Cost (USD)", size = 14)
ax.set_xticklabels('', size=10)

plt.subplot(1,2,2)
ax = sns.lineplot(data=history.history.get('loss'), color='royalblue')
ax.set_xlabel("Epoch", size = 14)
ax.set_ylabel("Loss", size = 14)
ax.set_title("Training Loss", size = 14, fontweight='bold')
fig.set_figheight(6)
fig.set_figwidth(16)

# Make predictions
test_predict_keras = regression.predict(x_test_keras)

# Invert predictions
train_predict_keras = scaler.inverse_transform(train_predict_keras)
y_train_keras = scaler.inverse_transform(y_train_keras)
test_predict_keras = scaler.inverse_transform(test_predict_keras.reshape((test_predict_keras.shape[0], test_predict_keras.shape[1])))
y_test = scaler.inverse_transform(y_test_keras)

# Calculate root MSE
trainScore = math.sqrt(mean_squared_error(y_train[:,0], y_train_pred[:,0]))
print(f'Train score {trainScore:.2f} RMSE')
testScore = math.sqrt(mean_squared_error(y_test[:,0], y_test_pred[:,0]))
print(f'Test score {testScore:.2f} RMSE')

# shift train predictions for plotting
trainPredictPlot_keras = np.empty_like(price)
trainPredictPlot_keras[:, :] = np.nan
trainPredictPlot_keras[lookback:len(train_predict_keras)+lookback, :] = train_predict_keras

# shift test predictions for plotting
testPredictPlot_keras = np.empty_like(price)
testPredictPlot_keras[:, :] = np.nan
testPredictPlot_keras[len(train_predict_keras)+lookback-1:len(price)-1, :] = test_predict_keras

original = scaler.inverse_transform(price['Close'].values.reshape(-1,1))

predictions_keras = np.append(trainPredictPlot_keras, testPredictPlot_keras, axis=1)
predictions_keras = np.append(predictions_keras, original, axis=1)
result_keras = pd.DataFrame(predictions_keras)

错误发生在trainPredictPlot_keras[lookback:len(train_predict_keras)+lookback, :] = train_predict_keras行中,名为could not broadcast input array from shape (1006,19) into shape (1006,1)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-22 04:25:54

return_sequences设置为最后一个LSTM层的False。你需要这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
....
....
regression.add(LSTM(units=50,kernel_initializer='glorot_uniform',
                     return_sequences=False))
regression.add(Dropout(0.2))
regression.add(Dense(units=1))
regression.compile(optimizer='adam', loss='mean_squared_error')

检查文档

return_sequences:布尔。是否返回最后一个输出。在输出序列中,或者整个序列中。默认值:假。

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

https://stackoverflow.com/questions/67213190

复制
相关文章
Python numpy(flatten,flat,ravel,reshape,resize)数组重组
请注意上述两者之间的区别,numpy.resize重组数据不够时,使用原数据依次填补;ndarray.resize重组数据不够时,使用原数据第一个元素填补。
周小董
2019/03/25
2.4K0
ML Mastery 博客文章翻译 20220116 更新
Machine Learning Mastery 机器学习算法教程 机器学习算法之旅 利用隔离森林和核密度估计的异常检测 机器学习中的装袋和随机森林集成算法 从零开始实现机器学习算法的好处 更好的朴素贝叶斯:从朴素贝叶斯算法中收益最大的 12 个技巧 机器学习的提升和 AdaBoost 选择机器学习算法:Microsoft Azure 的经验教训 机器学习的分类和回归树 什么是机器学习中的混淆矩阵 如何使用 Python 从零开始创建算法测试工具 通过创建机器学习算法的目标列表来获得控制权 机器学习中算法
ApacheCN_飞龙
2022/04/02
3.4K0
Python——数组重组(flatten
请注意上述两者之间的区别,numpy.resize重组数据不够时,使用原数据依次填补;ndarray.resize重组数据不够时,使用原数据第一个元素填补。
py3study
2020/01/06
1.4K0
使用Keras进行时间序列预测回归问题的LSTM实现
数据 数据来自互联网,这些数据用于预测航空公司的人数,我们使用LSTM网络来解决这个问题 关于此处模型构建,只对keras部分代码做重点的介绍
学到老
2019/01/25
6.7K0
使用Keras进行时间序列预测回归问题的LSTM实现
Keras中神经网络模型的5阶段生命周期
使用Python的Keras库可以很容易创建和评测深度学习神经网络,但是您必须遵循严格的模型生命周期。
用户1161128
2018/02/05
3.1K0
Keras中创建LSTM模型的步骤[通俗易懂]
本文是对The 5 Step Life-Cycle for Long Short-Term Memory Models in Keras的复现与解读,新手博主,边学边记,以便后续温习,或者对他人有所帮助
全栈程序员站长
2022/10/03
3.7K0
Keras中创建LSTM模型的步骤[通俗易懂]
Keras 中神经网络模型的 5 步生命周期
https://machinelearningmastery.com/5-step-life-cycle-neural-network-models-keras/
PM小王
2019/07/01
1.9K0
Keras 中神经网络模型的 5 步生命周期
Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化
我们可以很容易地用Keras序列模型拟合回归数据并预测测试数据。 在这篇文章中,我们将简要地学习如何用Python中的Keras神经网络API拟合回归数据。我们将用Keras回归和序列模型本身这两种方法检查模型。该教程涵盖了以下内容(点击文末“阅读原文”获取完整代码数据)。
拓端
2023/08/31
6280
Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化
Pick 一下?Python 机器学习实用技巧
入门机器学习从来不是一件简单的事。除了成熟的 MOOC,网络上还有海量的免费资源,这里列举了一些曾经对我有帮助的资源:
AI研习社
2018/07/26
4840
Pick 一下?Python 机器学习实用技巧
[Deep-Learning-with-Python]基于Keras的房价预测
通过20世纪70年代波士顿郊区房价数据集,预测平均房价;数据集的特征包括犯罪率、税率等信息。数据集只有506条记录,划分成404的训练集和102的测试集。每个记录的特征取值范围各不相同。比如,有0~1,1~12以及0~100的等等。
用户1631856
2018/08/01
1.8K0
[Deep-Learning-with-Python]基于Keras的房价预测
Numpy数组
一、NumPy简介 NumPy是针对多维数组(Ndarray)的一个科学计算(各种运算)包,封装了多个可以用于数组间计算的函数。 数组是相同数据类型的元素按一定顺序排列的组合,注意必须是相同数据类型的,比如说全是整数、全是字符串等。 array([1,2,3]) # 数值型数组 array(['w','s','q'],dtype = '<U1') # 字符型数组 二、NumPy 数组的生成 要使用 NumPy,要先有符合NumPy数组的数据,不同的包
见贤思齊
2020/08/05
4.9K0
Numpy数组
Numpy 中 axis = n 对应 ndarray 的第 nnn 层 [],从最外层的 axis = 0,逐渐往内层递增。
hotarugali
2022/03/03
7890
Numpy数组
手把手教你用Python库Keras做预测(附代码)
当你在Keras中选择好最合适的深度学习模型,就可以用它在新的数据实例上做预测了。但是很多初学者不知道该怎样做好这一点,我经常能看到下面这样的问题:
数据派THU
2018/07/30
2.6K1
手把手教你用Python库Keras做预测(附代码)
使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测|附代码数据
时间序列预测问题是预测建模问题中的一种困难类型(点击文末“阅读原文”获取完整代码数据)。
拓端
2022/10/31
2.2K0
8个常用的Python数据分析库(附案例+源码)
今天给大家分析8个Python中常用的数据分析工具,Python强大之处在于其第三方扩展库较多。 本文介绍数据分析方面的扩展库分别为:NumPy、SciPy、Matplotlib、Pandas、StatsModels、Scikit-learn、Keras、Gensim,下面对这八个扩展库进行简单介绍,以及相关的代码案例
Python研究者
2021/12/15
14.7K0
8个常用的Python数据分析库(附案例+源码)
如何将NumPy数组保存到文件中以进行机器学习
祝大家新年快乐,今天看到的文章然后就翻译了一下,涉及到的技术点都很简单,算是一篇水文,而且我对文章的改动比较大,但是还希望能给你带来一点帮助。
PM小王
2020/01/15
7.8K0
TensorFlow 2.0 快速入门指南:第二部分
在本节中,我们将首先看到 TensorFlow 在监督机器学习中的许多应用,包括线性回归,逻辑回归和聚类。 然后,我们将研究无监督学习,特别是应用于数据压缩和去噪的自编码。
ApacheCN_飞龙
2023/04/23
5520
让ChatGPT为我做营销?结果是......
2023年,ChatGPT的热度席卷了全球科技圈。一时间热搜迭起,发布短短五天内,ChatGPT用户数就超过100万人;两个多月后月活用户突破1亿。
用户10245619
2023/02/23
3550
点击加载更多

相似问题

Keras回归预测结果总是得到0。

18

Keras -意外的预测结果

23

简单非线性回归的Keras预测

16

如何预测回归保持回归常数的结果?

12

重组三维numpy数组

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文