ARIMA-LSTM 股票预测 Python Jupyter Notebook 示例代码
时间: 2025-01-06 09:35:16 浏览: 16
### ARIMA-LSTM混合模型用于股票预测
在Jupyter Notebook环境中实现ARIMA-LSTM混合模型进行股票预测,可以分为几个部分来构建完整的流程。下面提供了一个详细的Python代码示例。
#### 导入必要的库
为了处理时间序列数据并建立预测模型,首先需要加载一些基本的Python库:
```python
import warnings
warnings.filterwarnings("ignore")
import itertools
import pandas as pd
import numpy as np
from datetime import datetime
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
import statsmodels.api as sm
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM
```
这段代码片段展示了如何引入所需的各种工具包[^1]。
#### 数据预处理
接下来准备训练集和测试集的数据,并对其进行标准化处理以便于后续建模工作:
```python
def preprocess_data(data):
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)
X_train, y_train = [], []
for i in range(60,len(scaled_data)):
X_train.append(scaled_data[i-60:i])
y_train.append(scaled_data[i])
X_train, y_train = np.array(X_train), np.array(y_train)
return X_train, y_train, scaler
```
此函数负责将原始股价转换成适合输入给LSTM网络的形式[^3]。
#### 构建ARIMA模型
对于历史趋势成分,采用经典的统计方法——自回归积分滑动平均(AutoRegressive Integrated Moving Average, ARIMA)。这里假设已经获取到了合适的p,d,q参数配置:
```python
model_arima = sm.tsa.statespace.SARIMAX(
training_set,
order=(p, d, q),
seasonal_order=(P,D,Q,s),
enforce_stationarity=False,
enforce_invertibility=False
)
results_arima = model_arima.fit()
print(results_arima.summary().tables[1])
```
上述代码实现了基于SARIMAX类创建一个季节性的ARIMA实例,并进行了拟合操作[^2]。
#### 定义LSTM结构
针对非线性波动特性,则通过深层神经元架构中的长短期记忆单元来进行捕捉:
```python
regressor = Sequential()
# Adding the first LSTM layer and some Dropout regularisation
regressor.add(LSTM(units=50, return_sequences=True))
regressor.add(Dropout(0.2))
# Adding a second LSTM layer and some Dropout regularisation
regressor.add(LSTM(units=50))
regressor.add(Dropout(0.2))
# Adding the output layer
regressor.add(Dense(units=1))
# Compiling the RNN
regressor.compile(optimizer='adam', loss='mean_squared_error')
```
这部分定义了两层带有dropout机制防止过拟合现象发生的LSTM层以及最终输出节点。
#### 训练过程与评估指标计算
最后一步就是把之前得到的结果结合起来完成整个系统的搭建,并对性能做出评价:
```python
history = regressor.fit(X_train, y_train, epochs=epochs, batch_size=batch_size)
predicted_stock_price = regressor.predict(X_test)
predicted_stock_price = scaler.inverse_transform(predicted_stock_price)
rmse = np.sqrt(np.mean(((predicted_stock_price - test_set)**2)))
print(f'Root Mean Squared Error: {rmse}')
```
以上完成了从读取数据到模型训练再到结果分析的一系列步骤,在实际应用过程中还需要不断调整超参数以获得更好的表现效果。
阅读全文