当前位置:首页>股票

股票预测代码(使用神经网络预测商品及股票价格:探索LSTM算法)

日期:2023-11-20

来源:玫瑰财经网

浏览:

    文中预测使用一种称为长短时记忆(LSTM)网络的循环神经网络(RNN)算法。

    LSTM网络是一种特定设计用于处理序列数据的RNN,例如时间序列数据。它们能够通过选择性地记忆或遗忘来自先前时间步的信息,学习数据中的长期依赖关系。

    在代码中,LSTM网络用于基于历史数据预测未来商品及股票价格。该模型在一系列60个数据点上进行训练,然后用于预测下一个数据点。该过程针对整个测试集重复进行,以生成一系列预测值。

    预测结果如图所示,均方根误差(RMSE: Close 48.571104),我感觉预测值和均线类似,后附python代码,有兴趣朋友可以研究一下


    使用神经网络预测商品及股票价格:探索LSTM算法

    使用神经网络预测商品及股票价格:探索LSTM算法

    代码如下

    import pandas as pdimport numpy as npfrom sklearn.preprocessing import MinMaxScalerfrom keras.models import Sequentialfrom keras.layers import Dense, Dropout, LSTM# 加载商品价格数据df = pd.read_csv('商品甲醇价格.csv') #这行代码的作用是从csv文件中加载商品价格数据。# 删除日期列df = df.drop(['Date'], 1)  #这行代码的作用是从数据中删除日期列,因为在这个LSTM模型中,日期并不是一个有用的特征。#df = df.set_index('Date')# 对数据进行归一化。这行代码的作用是使用MinMaxScaler对原始数据进行归一化处理,将价格数据缩放到0到1之间。scaler = MinMaxScaler(feature_range=(0, 1))scaled_data = scaler.fit_transform(df)# 创建训练数据集  这行代码的作用是创建训练数据集,其中包含前600行的归一化数据。training_data = scaled_data[0:600, :]# 将数据拆分为输入和输出。  这段代码的作用是将训练数据集拆分为输入和输出,其中每个输入序列由前60个数据点组成,而输出序列是一个单独的数据点。x_train, y_train = [], []for i in range(60, len(training_data)):    x_train.append(training_data[i-60:i, 0])    y_train.append(training_data[i, 0])# 将数据形状转换为LSTM模型适用的形式  这段代码的作用是将训练集数据形状转换为适合LSTM模型的形式,即将其转换为3D张量。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))# 构建LSTM模型  这段代码的作用是构建LSTM模型,其中包括三个LSTM层和一个Dense层。在LSTM层中使用了dropout来防止过拟合。model = Sequential()model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train.shape[1], 1)))model.add(Dropout(0.2))model.add(LSTM(units=50, return_sequences=True))model.add(Dropout(0.2))model.add(LSTM(units=50))model.add(Dropout(0.2))model.add(Dense(units=1))# 编译模型  这行代码的作用是编译LSTM模型,使用adam优化器和均方误差作为损失函数。model.compile(optimizer='adam', loss='mean_squared_error')# 训练模型  这行代码的作用是使用训练数据集来训练LSTM模型。model.fit(x_train, y_train, epochs=100, batch_size=32)# 加载测试数据   这行代码的作用是从归一化数据中加载测试数据集,其中包含从第540行开始的所有数据,以及前60个时间步长的历史数据。test_data = scaled_data[600-60:, :]# 创建测试数据集   这段代码的作用是将测试数据集拆分为输入序列。与训练数据集类似,每个输入序列由前60个数据点组成。x_test, y_test = [], df[600:]for i in range(60, len(test_data)):    x_test.append(test_data[i-60:i, 0])# 将数据形状转换为LSTM模型适用的形式x_test = np.array(x_test)x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))# 对测试数据进行预测   这段代码的作用是对测试数据集进行预测,并使用MinMaxScaler的逆变换将预测值还原为原始价格。predictions = model.predict(x_test)predictions = scaler.inverse_transform(predictions)# 计算预测结果的均方根误差(RMSE)   这段代码的作用是计算预测结果的均方根误差(RMSE)。rmse = np.sqrt(np.mean(((predictions - y_test) ** 2)))print("均方根误差(RMSE): ", rmse)# 绘制图表import matplotlib.pyplot as pltfrom pylab import mplmpl.rcParams["font.sans-serif"] = ["SimHei"]mpl.rcParams["axes.unicode_minus"] = False# 绘制原始股票价格图表plt.plot(df[600:].index, df[600:].values, label='原始数据')# 绘制预测股票价格图表plt.plot(df[600:].index, predictions, label='预测数据')# 添加标题和标签plt.title('甲醇价格预测')plt.xlabel('日期')plt.ylabel('价格')plt.legend()# 显示图表plt.show()


    以下是 '商品甲醇价格.csv' 数据示例

    Date

    Close

    2020/6/29

    1763

    2020/6/30

    1774

    2020/7/1

    1778

    2020/7/2

    1808

    2020/7/3

    1823

    2020/7/6

    1837

    2020/7/7

    1808

    2020/7/8

    1825

    2020/7/9

    1831

    2020/7/10

    1799

    2020/7/13

    1838

相关文章阅读

Copyright (c) 2022 玫瑰财经网 版权所有

备案号:冀ICP备17019481号

玫瑰财经网发布此信息的目的在于传播更多信息,与本站立场无关。玫瑰财经网不保证该信息(包含但不限于文字、视频、音频、数据及图表)全部或者部分内容的准确性、真实性、完整性、有效性、及时性、原创性等。
相关信息并未经过本网站证实,不对您构成任何投资建议,据此操作,风险自担。