LSTM进行股票预测的代码示例
时间: 2023-10-24 22:16:21 浏览: 127
金融科技-LSTM-股票预测-数据分析-基于LSTM模型的股票预测模型-python
以下是使用LSTM进行股票预测的示例代码。请注意,这只是一个简单的示例,仅用于演示如何使用LSTM进行时间序列预测。在实际应用中,需要进行更多的数据预处理和模型优化。
首先,我们需要导入所需的库:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM
```
接下来,我们可以加载股票数据集并进行数据预处理:
```python
# 加载数据集
df = pd.read_csv('stock_data.csv')
# 选择需要预测的特征
data = df.filter(['Close'])
# 将数据集转换为numpy数组
dataset = data.values
# 将数据集中的所有值转换为浮点型
dataset = dataset.astype('float32')
# 将数据缩放到0和1之间
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)
# 将数据集划分为训练集和测试集
train_size = int(len(dataset) * 0.7)
test_size = len(dataset) - train_size
train_data, test_data = dataset[0:train_size, :], dataset[train_size:len(dataset), :]
```
接下来,我们可以创建函数来生成LSTM模型:
```python
def create_lstm_model(train_data, window_size):
# 创建数据集X和Y
X, Y = [], []
for i in range(len(train_data) - window_size - 1):
a = train_data[i:(i + window_size), 0]
X.append(a)
Y.append(train_data[i + window_size, 0])
X, Y = np.array(X), np.array(Y)
# 将数据集重塑为3D
X = np.reshape(X, (X.shape[0], X.shape[1], 1))
# 创建LSTM模型
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(X.shape[1], 1)))
model.add(LSTM(50, return_sequences=False))
model.add(Dense(25))
model.add(Dense(1))
# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')
# 拟合模型
model.fit(X, Y, epochs=50, batch_size=1, verbose=2)
return model
```
最后,我们可以使用生成的LSTM模型来进行预测:
```python
# 创建LSTM模型
lstm_model = create_lstm_model(train_data, window_size=10)
# 创建测试数据集X和Y
test_X, test_Y = [], []
for i in range(len(test_data) - 10 - 1):
a = test_data[i:(i + 10), 0]
test_X.append(a)
test_Y.append(test_data[i + 10, 0])
test_X, test_Y = np.array(test_X), np.array(test_Y)
# 将测试数据集重塑为3D
test_X = np.reshape(test_X, (test_X.shape[0], test_X.shape[1], 1))
# 进行预测
predictions = lstm_model.predict(test_X)
# 将预测的值转换为原始值
predictions = scaler.inverse_transform(predictions)
# 计算均方根误差(RMSE)
rmse = np.sqrt(np.mean(((predictions - test_Y) ** 2)))
print('RMSE:', rmse)
# 绘制预测结果
plt.plot(test_Y)
plt.plot(predictions)
plt.show()
```
阅读全文