项目描述:
本程序使用了循环神经网络中的长期短期记忆模型(LSTM)以Apple公司过去60天的股价来预测收盘价
LSTM模型相当于对RNN模型的改良版本
RNN:想把所有的信息都记住,不管是有用的信息还是没用的信息(记忆负担重)
LSTM:设计一个记忆细胞,具备选择记忆的功能,可以选择记忆重要信息,过滤掉噪声信息,减轻记忆负担
关于LSTM的原理这个不过多赘述,推荐观看B站视频。
使用Anaconda3中的Jupyter来编写(个人推荐十分好用)
环境搭建:
Anaconda安装
Anaconda添加新的库
进入后直接打pip即可
pip install tensorflow -i https://pypi.tuna./simple --user
把tensorflow 换成你要导入的包名即可
项目步骤:
1、首先导入库:
#导入库import mathimport pandas_datareader as webimport numpy as npimport pandas as pdimport seaborn as snsfrom sklearn.preprocessing import MinMaxScalerfrom keras.models import Sequentialfrom keras. layers import Dense,LSTMimport matplotlib.pyplot as plt
2、获取股票报价:
#解决字体显示异常bugsns.set_style("whitegrid", {"font.sans-serif": ['KaiTi', 'Arial']}) #获取股票报价df=web.DataReader("AAPL",data_source='yahoo',start='-01-01',end='-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_datatrain_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、编译模型
pile(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_testx_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()
如果觉得《深度学习LSTM模型对股票分析预测》对你有帮助,请点赞、收藏,并留下你的观点哦!