特征缩放:

1归一化
X-Xmin/(Xmax-Xmin) (0,1)
2标准化
X-均值/期望

7个时间步 最后预测第八天的收盘价格 即图中的y

     def forward(self, x):# Initialize hidden and cell statesh_0 = Variable(torch.zeros(self.num_layers, x.size(0), self.hidden_size))# 上一个时间步的预测值c_0 = Variable(torch.zeros(self.num_layers, x.size(0), self.hidden_size))# 记忆单元 h0 = sigmod(c0)'''送进来的每条样本都生成记忆单元向 量(层数,样本数量,记忆单元长度)(1,724*0.7,5)'''# Propagate input through LSTM_, (h_out, _) = self.lstm(x, (h_0, c_0)) # 取得最后的输出结果  # 此处分别是 y1-y7,中间结果y7,要送入下一步的记忆单元ch_out = h_out.view(-1, self.hidden_size)# 行列变换  (n条样本,5) 每个样本的特征数是5 out = self.fc(h_out)# 连接一个全连接层 输出最后的结果h7return out'''# Propagate input through LSTM_, (h_out, _) = self.lstm(x, (h_0, c_0)) # 取得最后的输出结果h_out = h_out.view(-1, self.hidden_size)out = self.fc(h_out)return out

'''
This script shows how to predict stock prices using a basic RNN
'''
import torch
import torch.nn as nn
from torch.autograd import Variable
import numpy as nptorch.manual_seed(777)  # reproducibilityimport matplotlib.pyplot as plt#  特征缩放 归一化
def MinMaxScaler(data):numerator = data - np.min(data, 0)denominator = np.max(data, 0) - np.min(data, 0)# noise term prevents the zero divisionreturn numerator / (denominator + 1e-7)# train Parameters
learning_rate = 0.01
num_epochs = 500
input_size = 5
hidden_size = 5
num_classes = 1
timesteps = seq_length = 7
num_layers = 1  # number of layers in RNN# Open, High, Low, Volume, Close
xy = np.loadtxt('data-02-stock_daily.csv', delimiter=',')
xy = xy[::-1]  # reverse order (chronically ordered) 拿出所有行除了最后一列 特征部分
xy = MinMaxScaler(xy)
x = xy
y = xy[:, [-1]]  # Close as label 拿到最后一列# build a dataset
dataX = []
dataY = []
for i in range(0, len(y) - seq_length):_x = x[i:i + seq_length] # [0,7) x0-x6 _x是一条样本的特征_y = y[i + seq_length]  # Next close price 最后一列收盘价格 即y[7]  _y是一条样本的标签 print(_x, "->", _y)dataX.append(_x)dataY.append(_y)# train/test split
train_size = int(len(dataY) * 0.7) #724条数据 *0.7
test_size = len(dataY) - train_size #724*0.3
trainX = torch.Tensor(np.array(dataX[0:train_size]))
trainX = Variable(trainX)# 张量变自动求导的过程
testX = torch.Tensor(np.array(dataX[train_size:len(dataX)]))
testX = Variable(testX)
trainY = torch.Tensor(np.array(dataY[0:train_size]))
trainY = Variable(trainY)
testY = torch.Tensor(np.array(dataY[train_size:len(dataY)]))
testY = Variable(testY)class LSTM(nn.Module):# 分类问题只有一个数,一次性送入5条样本数据,记忆单元向量的长度为5,一个rnn单元def __init__(self, num_classes, input_size, hidden_size, num_layers):super(LSTM, self).__init__()self.num_classes = num_classesself.num_layers = num_layersself.input_size = input_sizeself.hidden_size = hidden_sizeself.seq_length = seq_length# Set parameters for RNN block# Note: batch_first=False by default.# When true, inputs are (batch_size, sequence_length, input_dimension)# instead of (sequence_length, batch_size, input_dimension)self.lstm = nn.LSTM(input_size=input_size, hidden_size=hidden_size,num_layers=num_layers, batch_first=True)# Fully connected layerself.fc = nn.Linear(hidden_size, num_classes)def forward(self, x):# Initialize hidden and cell statesh_0 = Variable(torch.zeros(self.num_layers, x.size(0), self.hidden_size))# 上一个时间步的预测值c_0 = Variable(torch.zeros(self.num_layers, x.size(0), self.hidden_size))# 记忆单元 h0 = sigmod(c0)'''送进来的每条样本都生成记忆单元向 量(层数,样本数量,记忆单元长度)(1,724*0.7,5)'''# Propagate input through LSTM_, (h_out, _) = self.lstm(x, (h_0, c_0)) # 取得最后的输出结果  # 此处分别是 y1-y7,中间结果y7,要送入下一步的记忆单元ch_out = h_out.view(-1, self.hidden_size)# 行列变换  (n条样本,5) 每个样本的特征数是5 out = self.fc(h_out)# 连接一个全连接层 输出最后的结果h7return out# Instantiate RNN model
lstm = LSTM(num_classes, input_size, hidden_size, num_layers)# Set loss and optimizer function
criterion = torch.nn.MSELoss()    # mean-squared error for regression
optimizer = torch.optim.Adam(lstm.parameters(), lr=learning_rate)# Train the model
for epoch in range(num_epochs):outputs = lstm(trainX)# 一次性把所有训练样本都输入进来 没有一批批用batchsize送数据optimizer.zero_grad()# 对每个epcho 偏导数置0 防止持续累积 # obtain the loss functionloss = criterion(outputs, trainY)loss.backward()# 计算偏导数optimizer.step()# 更新参数print("Epoch: %d, loss: %1.5f" % (epoch, loss.item()))print("Learning finished!")# Test the model
lstm.eval()# 关闭训练技巧
t est_predict = lstm(testX)# Plot predictions
test_predict = test_predict.data.numpy()
testY = testY.data.numpy()
plt.plot(testY,c='y')
plt.plot(test_predict,c='b')
print(testY.shape)
print(test_predict.shape)
plt.xlabel("Time Period")
plt.ylabel("Stock Price")
plt.show()

LSTM股票价格预测相关推荐

  1. MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测

    MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测 摘要 近些年,随着计算机技术的不断发展,神 ...

  2. 股票价格预测 | Python实现LSTM股票价格时间序列预测

    股票价格预测 | Python实现LSTM股票价格时间序列预测 目录 股票价格预测 | Python实现LSTM股票价格时间序列预测 基本介绍 数据集 程序下载 总结 基本介绍 长短时记忆(LSTM) ...

  3. LSTM 无法预测股票价格

    莱顿·阿里顿 尽管 LSTM 是一种非常流行的方法,但它本质上是一种估计股票价格的糟糕方法 ​ 长短期记忆 (LSTM) 网络是一种非常流行的循环神经网络,主要用于学习序列和顺序依赖.因此,在学习音频 ...

  4. 基于LSTM、RNN及滑动窗口CNN模型的股票价格预测

    基于LSTM.RNN及滑动窗口CNN模型的股票价格预测 Abstract 股票市场或股票市场对当今经济产生深远影响.股价的上涨或者下跌对投资者的收益具有重要的决定作用.现有的预测方法使用线性(AR,M ...

  5. 时序预测 | MATLAB实现贝叶斯优化CNN-LSTM时间序列预测(股票价格预测)

    时序预测 | MATLAB实现贝叶斯优化CNN-LSTM时间序列预测(股票价格预测) 目录 时序预测 | MATLAB实现贝叶斯优化CNN-LSTM时间序列预测(股票价格预测) 效果一览 基本介绍 模 ...

  6. 经济数据预测 | Python实现CNN-LSTM股票价格预测时间序列预测

    经济数据预测 | Python实现CNN-LSTM股票价格预测时间序列预测 目录 经济数据预测 | Python实现CNN-LSTM股票价格预测时间序列预测 基本介绍 程序设计 学习总结 基本介绍 通 ...

  7. 大数据毕业设计 LSTM时间序列预测算法 - 股票预测 天气预测 房价预测

    文章目录 0 简介 1 基于 Keras 用 LSTM 网络做时间序列预测 2 长短记忆网络 3 LSTM 网络结构和原理 3.1 LSTM核心思想 3.2 遗忘门 3.3 输入门 3.4 输出门 4 ...

  8. 毕业设计 LSTM的预测算法 - 股票预测 天气预测 房价预测

    文章目录 0 简介 1 基于 Keras 用 LSTM 网络做时间序列预测 2 长短记忆网络 3 LSTM 网络结构和原理 3.1 LSTM核心思想 3.2 遗忘门 3.3 输入门 3.4 输出门 4 ...

  9. [人工智能学习日志]深度学习-股票价格预测案例1

    来自股票价格预测bilibili课程. 源自jupyter notebook文件main.ipynb. 代码用tf1书写,使用tf2会因为版本不对应而报错,tf2版本的代码后续再研究. 股票价格预测 ...

最新文章

  1. GPRS、EDGE、CDMA1X、WCDMA、EVDO、EVDV速度性能大比较
  2. 2019微信数据报告新鲜出炉!
  3. mysql服务器消失_MySQL服务器已经消失了
  4. Slog92_使用React框架进行前端开发4
  5. IMX6ULL的GPIO操作方法
  6. 爬虫学习笔记(十)—— Scrapy框架(五):下载中间件、用户/IP代理池、settings文件
  7. javascript / node.js / npm install 时 --save 和 --save-dev 的区别
  8. Windows下用cmd命令安装及卸载服务[转]
  9. 移动端导出excel_连载系列【4】Excel开发移动端quot;APPquot;
  10. 5 年 Python 的我,总结了这 90 条写 Python 程序的建议
  11. 220v转5v阻容降压电路
  12. 机器学习实战——线性回归和局部加权线性回归(含python中复制的四种情形!)
  13. VB.NET异形窗体
  14. oracle的dmp文件导入mysql_Oracle 数据库导入导出 dmp文件
  15. 论文笔记(十八):Object Detection and Spatial Location Method for ... Based on 3D Virtual Geographical Scen
  16. java爬虫系列(三)——漫画网站爬取实战
  17. 人工智能-----自然语言处理(NLP)基础理解
  18. python函数增强代码可读性_如何提高代码的可读性 学习笔记
  19. 如何安装与配置JDK
  20. Life is going on

热门文章

  1. centos6,7grub防止其他用户通过单用户系统破解root密码
  2. Python模块包中__init__.py文件的作用(转载)
  3. Exchange与ADFS单点登录 PART 3:部署和配置WAP
  4. 谢少锋:云计算拉动技术进步 规模成倍增长
  5. mysqlshow命令的用法介绍
  6. corosync/openais+pacemaker+drbd+web实现高可用群集
  7. VS2008非托管c++访问webservice服务(以WeatherWS 天气服务 为例)
  8. HashMap,LinkHashMap和TreeMap的区别
  9. PropertySet 学习一
  10. 不服来战!PHP 是世界上最好的语言!