帮我写一段lstm预测股票价格趋势的python代码
时间: 2023-08-28 15:20:47 浏览: 164
好的,以下是一个简单的LSTM预测股票价格趋势的Python代码:
```python
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM
# 读取数据
df = pd.read_csv('stock_prices.csv')
# 只保留收盘价
data = df[['close']].values
# 归一化数据
scaler = MinMaxScaler(feature_range=(0, 1))
data = scaler.fit_transform(data)
# 划分训练集和测试集
train_size = int(len(data) * 0.7)
test_size = len(data) - train_size
train_data, test_data = data[0:train_size,:], data[train_size:len(data),:]
# 转换为有监督学习问题
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 = 20
train_X, train_Y = create_dataset(train_data, look_back)
test_X, test_Y = create_dataset(test_data, look_back)
# 转换为3D格式 [样本数,时间步长,特征数]
train_X = np.reshape(train_X, (train_X.shape[0], train_X.shape[1], 1))
test_X = np.reshape(test_X, (test_X.shape[0], test_X.shape[1], 1))
# 创建和拟合LSTM模型
model = Sequential()
model.add(LSTM(32, input_shape=(look_back, 1)))
model.add(Dense(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])
# 计算训练集和测试集的RMSE
train_score = np.sqrt(np.mean(np.power(train_Y - train_predict, 2)))
test_score = np.sqrt(np.mean(np.power(test_Y - test_predict, 2)))
print('Train RMSE: %.2f' % (train_score))
print('Test RMSE: %.2f' % (test_score))
```
解释一下每一步:
1. 读取股票价格数据并只保留收盘价。
2. 使用MinMaxScaler归一化数据。
3. 划分训练集和测试集。
4. 将数据转换为有监督学习问题。在这种情况下,我们将前20天的收盘价作为输入,第21天的收盘价作为输出。
5. 将数据转换为3D格式以适应LSTM模型。
6. 创建和拟合LSTM模型。
7. 使用模型预测训练集和测试集。
8. 反归一化预测结果。
9. 计算训练集和测试集的RMSE。
请注意,这只是一个简单的LSTM模型,可以添加更多的层和参数来提高准确性。另外,股票价格预测是一种非常复杂的问题,需要考虑很多因素,因此这个模型的准确性可能不是很高。
阅读全文