基于lstm写一个股价预测代码
时间: 2024-01-25 19:03:52 浏览: 30
好的,以下是一个基于 LSTM 的简单股价预测代码示例:
```python
import pandas as pd
import numpy as np
from keras.models import Sequential
from keras.layers import LSTM, Dense
from sklearn.preprocessing import MinMaxScaler
# 加载数据
df = pd.read_csv("stock_data.csv")
# 数据预处理
scaler = MinMaxScaler(feature_range=(0, 1))
df["Close"] = scaler.fit_transform(np.array(df["Close"]).reshape(-1, 1))
# 准备训练数据
train_size = int(len(df) * 0.8)
train_data = df.iloc[:train_size, :]
test_data = df.iloc[train_size:, :]
def create_dataset(dataset, look_back=1):
data_X, data_Y = [], []
for i in range(len(dataset) - look_back - 1):
a = dataset[i:(i + look_back), 0]
data_X.append(a)
data_Y.append(dataset[i + look_back, 0])
return np.array(data_X), np.array(data_Y)
look_back = 3
train_X, train_Y = create_dataset(train_data[["Close"]].values, look_back)
test_X, test_Y = create_dataset(test_data[["Close"]].values, look_back)
# 调整输入数据的形状
train_X = np.reshape(train_X, (train_X.shape[0], 1, train_X.shape[1]))
test_X = np.reshape(test_X, (test_X.shape[0], 1, test_X.shape[1]))
# 定义模型
model = Sequential()
model.add(LSTM(units=50, input_shape=(1, look_back)))
model.add(Dense(units=1))
model.compile(loss="mean_squared_error", optimizer="adam")
# 训练模型
model.fit(train_X, train_Y, epochs=100, batch_size=1, verbose=2)
# 预测股价
train_predict = model.predict(train_X)
test_predict = model.predict(test_X)
# 反归一化
train_predict = scaler.inverse_transform(train_predict)
train_Y = scaler.inverse_transform([train_Y])
test_predict = scaler.inverse_transform(test_predict)
test_Y = scaler.inverse_transform([test_Y])
# 计算误差
train_score = np.sqrt(mean_squared_error(train_Y[0], train_predict[:, 0]))
test_score = np.sqrt(mean_squared_error(test_Y[0], test_predict[:, 0]))
print("Train Score: %.2f RMSE" % (train_score))
print("Test Score: %.2f RMSE" % (test_score))
```
这个代码示例中,我们首先加载了一份股票数据,然后使用了 MinMaxScaler 对数据进行归一化处理,接着使用 create_dataset 函数将数据转换成了适合 LSTM 训练的数据格式,然后定义了一个简单的 LSTM 模型,使用训练集对模型进行了训练,最后使用模型对测试集进行了预测,并计算了预测误差。