日期:2023-11-20
来源:玫瑰财经网
浏览:次
文中预测使用一种称为长短时记忆(LSTM)网络的循环神经网络(RNN)算法。
LSTM网络是一种特定设计用于处理序列数据的RNN,例如时间序列数据。它们能够通过选择性地记忆或遗忘来自先前时间步的信息,学习数据中的长期依赖关系。
在代码中,LSTM网络用于基于历史数据预测未来商品及股票价格。该模型在一系列60个数据点上进行训练,然后用于预测下一个数据点。该过程针对整个测试集重复进行,以生成一系列预测值。
代码如下
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 |
500吨汽车吊作业性能表(汽车吊支腿反力及抗倾覆验算)
石碣镇汽车站(今天,石碣汽车客运站恢复运营)
招贤汽车站(9月14日起,莒县K601路增开大站快车)
北京福田汽车图片(自重不到两吨,详解福田领航S1小卡)
东风轻型汽车(“东风轻型车”横空出世 未来无人驾驶车将快递送到家门口)
周口市汽车东站(郑阜高速铁路上的主要客运站——周口东站)
Copyright (c) 2022 玫瑰财经网 版权所有
备案号:冀ICP备17019481号
玫瑰财经网发布此信息的目的在于传播更多信息,与本站立场无关。玫瑰财经网不保证该信息(包含但不限于文字、视频、音频、数据及图表)全部或者部分内容的准确性、真实性、完整性、有效性、及时性、原创性等。
相关信息并未经过本网站证实,不对您构成任何投资建议,据此操作,风险自担。