栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

深度学习LSTM模型对股票分析预测

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

深度学习LSTM模型对股票分析预测

项目描述:

本程序使用了循环神经网络中的长期短期记忆模型(LSTM)以Apple公司过去60天的股价来预测收盘价
LSTM模型相当于对RNN模型的改良版本
RNN:想把所有的信息都记住,不管是有用的信息还是没用的信息(记忆负担重)
LSTM:设计一个记忆细胞,具备选择记忆的功能,可以选择记忆重要信息,过滤掉噪声信息,减轻记忆负担
关于LSTM的原理这个不过多赘述,推荐观看B站视频。
使用Anaconda3中的Jupyter来编写(个人推荐十分好用)


环境搭建:

Anaconda安装
Anaconda添加新的库


进入后直接打pip即可

pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple --user

把tensorflow 换成你要导入的包名即可


项目步骤:

1、首先导入库:

#导入库
import math
import pandas_datareader as web
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras. layers import Dense,LSTM
import matplotlib.pyplot as plt

2、获取股票报价:

#解决字体显示异常bug
sns.set_style("whitegrid", {"font.sans-serif": ['KaiTi', 'Arial']}) 
#获取股票报价
df=web.DataReader("AAPL",data_source='yahoo',start='2013-01-01',end='2022-02-15')
#显示数据
df
显示数据如下:

3、绘制股票历史收盘价:

#可视化收盘价历史
plt.figure(figsize=(16,8))
plt.title('历史价格')
plt.plot(df['Close'])
plt.xlabel('日期',fontsize=18)
plt.ylabel('收盘价美元 ($)',fontsize=18)
plt.show()


4、创建一个只有“Close”列的数据集

#创建一个只有“Close”列的数据集
data = df.filter(['Close'])
##转换数据集为numpy数组
dataset = data.values

5、获取训练模型的行数

training_data_len = math.ceil( len (dataset)*.8)
training_data_len

6、数据规范化

#数据规范化
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(dataset)
scaled_data


7、创建训练数据集

#数据规范化
#创建训练数据集
#创建缩放的训练数据集train_data
train_data = scaled_data[0:training_data_len,:]
#将数据拆分为x_train和y_train数据集
x_train = []
y_train = []

for i in range(60,len(train_data)):
    x_train.append(train_data[i-60:i,0])
    y_train.append(train_data[i,0])
    if i <= 61:
        print(x_train)
        print(y_train)

8、将x_train和y_train转换为numpy数组

x_train,y_train = np.array(x_train),np.array(y_train)

9、重塑的数据

x_train = np.reshape(x_train,(x_train.shape[0],x_train.shape[1],1))

10、建立LSTM模型

model = Sequential()
model.add(LSTM(50,return_sequences=True, input_shape=(x_train.shape[1],1)))
model.add(LSTM(50,return_sequences=False))
model.add(Dense(25))
model.add(Dense(1))

11、编译模型

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

12、训练模型

model.fit(x_train,y_train,batch_size=1,epochs=1)

13、创建测试数据集

#创建一个新的数组,包含从索引1978到2438的缩放值
test_data = scaled_data[training_data_len - 60:,:]
#创建数据集x test和y_test
x_test = []
y_test = dataset[training_data_len:,:]
for i in range(60,len(test_data)):
    x_test.append(test_data[i-60:i,0])
#转换数据为numpy数组
x_test = np.array(x_test)
#重塑的数据
x_test = np.reshape(x_test,(x_test.shape[0],x_test.shape[1],1))

14、获取模型预测价格值

#获取模型预测价格值
predictions = model.predict(x_test)
predictions = scaler.inverse_transform(predictions) 

15、计算均方根误差(RMSE)

rmse = np.sqrt(np.mean( predictions - y_test)**2 )

16、绘制图表

train = data[:training_data_len]
valid = data[training_data_len:]
valid['Predictions'] = predictions
#可视化数据
plt.figure(figsize=(16,8))
plt.title('LSTM模型预测')
plt.xlabel('日期', fontsize=18)
plt.ylabel('收盘价美元 ($)', fontsize=18)
plt.plot(train['Close'])
plt.plot(valid[['Close','Predictions']])
plt.legend(["模型训练值",'真实值','预测值'],loc='lower right')
plt.show() 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/740440.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号