用Keras框架写出用CNN来进行股票多变量预测的代码
时间: 2024-03-24 22:36:15 浏览: 72
好的,以下是一个用Keras框架实现的股票多变量预测的CNN模型:
```python
import numpy as np
import pandas as pd
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense, Conv1D, MaxPooling1D, Flatten
# 读取数据
data = pd.read_csv('stock_data.csv')
# 数据预处理
X = data.iloc[:, 1:-1].values
Y = data.iloc[:, -1].values
# 数据归一化
X = (X - np.mean(X)) / np.std(X)
Y = (Y - np.mean(Y)) / np.std(Y)
# 将数据转换为3D数组
X = np.reshape(X, (X.shape[0], X.shape[1], 1))
# 划分训练集和测试集
train_size = int(len(data) * 0.8)
test_size = len(data) - train_size
train_X, test_X = np.array(X[0:train_size]), np.array(X[train_size:len(X)])
train_Y, test_Y = np.array(Y[0:train_size]), np.array(Y[train_size:len(Y)])
# 定义CNN模型
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=2, activation='relu', input_shape=(train_X.shape[1], 1)))
model.add(Conv1D(filters=32, kernel_size=2, activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(1))
# 编译模型
model.compile(loss='mse', optimizer='adam')
# 训练模型
model.fit(train_X, train_Y, epochs=50, batch_size=16, verbose=1)
# 测试模型
test_loss = model.evaluate(test_X, test_Y, verbose=0)
print('Test loss:', test_loss)
# 预测结果
predicted_Y = model.predict(test_X)
# 可视化预测结果和真实结果
import matplotlib.pyplot as plt
plt.plot(test_Y, color='blue', label='True')
plt.plot(predicted_Y, color='red', label='Prediction')
plt.legend()
plt.show()
```
其中,`stock_data.csv`是包含多变量股票数据的CSV文件,每行数据包含多个特征和一个标签,如下所示:
```
feat1,feat2,feat3,feat4,feat5,label
0.1,0.2,0.3,0.4,0.5,0.6
0.2,0.3,0.4,0.5,0.6,0.7
...
```
该模型包含两个卷积层和一个全连接层,使用均方误差作为损失函数,Adam优化器进行优化。训练过程中,每次使用16个样本进行训练,共进行50个epoch。最终测试集上的损失为`test_loss`。预测结果通过`predicted_Y`得到,可以使用Matplotlib库将预测结果和真实结果进行可视化。
阅读全文