基于小波神经网络的时间序列预测 内涵详细的代码注释
时间序列预测是一个广泛的研究领域,涉及金融、气象、股票等多方面的应用。小波神经网络(Wavelet Neural Network, WNN)结合了小波变换(Wavelet Transform, WT)和神经网络(Neural Network, NN)的优势,能够有效处理非平稳时间序列数据。本文将介绍如何利用小波神经网络进行时间序列预测,并附上详细的代码示例。
1. 数据预处理
首先,我们需要加载并预处理数据。这里使用一个简单的股票价格数据集,数据集包含时间戳和对应的股票收盘价。
import pandas as pd import numpy as np import pywt import matplotlib.pyplot as plt from sklearn.preprocessing import MinMaxScaler from keras.models import Sequential from keras.layers import Dense, LSTM # 加载数据集 data = pd.read_csv('stock_price.csv') time = data['Time'].values price = data['Price'].values # 数据归一化 scaler = MinMaxScaler() price_scaled = scaler.fit_transform(price.reshape(-1, 1))2. 小波分解
接下来,我们对时间序列数据进行小波分解。小波变换可以将信号分解为不同尺度(分辨率)的系数,从而提取信号的特征。
# 选择小波基 wavelet = 'db4' level = 3 # 分解的层数 # 小波分解 coeffs = pywt.wavedec(price_scaled, wavelet, level=level) # 可视化小波系数 plt.figure(figsize=(12, 6)) for i, coeff in enumerate(coeffs): plt.subplot(2, 2, i+1) plt.plot(coeff) plt.title(f'Level {i}') plt.suptitle('Wavelet Decomposition Coefficients') plt.show()3. 特征提取
从分解结果中选择一个合适的分辨率作为输入特征。通常,较高分辨率的系数能够更好地捕捉局部特征,而较低分辨率的系数则能够捕捉全局特征。
# 选择中间分辨率作为输入特征 feature = coeffs[level]4. 构建神经网络模型
我们使用LSTM(Long Short-Term Memory)神经网络来建模时间序列数据,因为LSTM适合处理序列数据中的长期依赖关系。
# 定义模型 model = Sequential() model.add(Dense(32, activation='relu', input_dim=feature.shape[1])) model.add(LSTM(16, activation='relu', return_sequences=False)) model.add(Dense(1)) # 编译模型 model.compile(optimizer='adam', loss='mean_squared_error') # 训练模型 model.fit(feature, price_scaled, epochs=100, batch_size=10, verbose=2)5. 模型评估
在训练完成后,我们需要评估模型在验证集上的表现。
# 使用模型进行预测 predicted_price = model.predict(feature) # 反归一化 predicted_price = scaler.inverse_transform(predicted_price) # 可视化预测结果 plt.figure(figsize=(12, 6)) plt.plot(time, price, label='Actual Price') plt.plot(time, predicted_price, label='Predicted Price') plt.title('Stock Price Prediction') plt.xlabel('Time') plt.ylabel('Price') plt.legend() plt.show()6. 代码分析
- 数据预处理:使用
MinMaxScaler对数据进行归一化,以提高神经网络的训练效率。 - 小波分解:使用PyWavelets库进行小波分解,选择
db4作为小波基,并分解到3层。这样可以提取不同尺度的特征。 - 特征提取:选择第3层的小波系数作为输入特征,认为这些系数能够更好地捕捉股票价格的短期波动。
- 模型构建:使用一个简单的LSTM结构,包含一个全连接层和一个LSTM层,激活函数选择
relu,优化器选择Adam。 - 模型评估:通过绘制实际价格和预测价格的对比图,直观评估模型的预测效果。
7. 总结
通过上述步骤,我们构建了一个基于小波神经网络的时间序列预测模型。小波变换帮助提取了信号的特征,而神经网络则用于建模和预测。这种方法在处理非平稳和非线性时间序列数据时具有显著优势。
基于小波神经网络的时间序列预测 内涵详细的代码注释