使用LSTM模型对沪深300(2010-2022)数据进行预测loss代码·
时间: 2024-01-12 22:03:09 浏览: 73
以下是一个使用LSTM模型对沪深300(2010-2022)数据进行预测并计算loss的Python代码,供您参考:
```
import pandas as pd
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
# 读取数据
df = pd.read_csv('沪深300.csv')
df = df[['date', 'close']]
df.set_index('date', inplace=True)
df = df.dropna()
# 数据归一化
scaler = MinMaxScaler(feature_range=(0, 1))
df_scaled = scaler.fit_transform(df)
# 划分训练集和测试集
train_size = int(len(df_scaled) * 0.8)
test_size = len(df_scaled) - train_size
train_data, test_data = df_scaled[0:train_size, :], df_scaled[train_size:len(df_scaled), :]
# 将数据转化为时间序列数据
def create_dataset(dataset, look_back=1):
X, Y = [], []
for i in range(len(dataset) - look_back - 1):
a = dataset[i:(i + look_back), 0]
X.append(a)
Y.append(dataset[i + look_back, 0])
return np.array(X), np.array(Y)
look_back = 30
trainX, trainY = create_dataset(train_data, look_back)
testX, testY = create_dataset(test_data, look_back)
# 将数据转化为LSTM模型所需的格式
trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))
testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1))
# 创建LSTM模型
model = Sequential()
model.add(LSTM(50, input_shape=(look_back, 1)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)
# 使用模型进行预测
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)
trainPredict = scaler.inverse_transform(trainPredict)
trainY = scaler.inverse_transform([trainY])
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform([testY])
# 计算预测误差
trainScore = mean_squared_error(trainY[0], trainPredict[:, 0])
testScore = mean_squared_error(testY[0], testPredict[:, 0])
print('Train Score: %.2f MSE' % (trainScore))
print('Test Score: %.2f MSE' % (testScore))
```
其中,代码中的数据文件为一个名为“沪深300.csv”的CSV文件,包含了从2010年1月份至2022年5月份的沪深300指数收盘价数据。代码首先读取数据,然后对数据进行归一化处理。接着,将数据划分为训练集和测试集,并将其转化为时间序列数据,用于训练和测试LSTM模型。代码中采用了一个含有50个神经元的LSTM层和一个含有1个神经元的全连接层,使用adam优化器进行训练。最后,将训练集和测试集输入模型进行预测,并计算预测误差(loss),使用均方误差(MSE)作为误差指标。
阅读全文