卷积神经网络实现股价预测python实例代码及测试数据
股价预测是金融领域的一个重要问题。卷积神经网络能够从时间序列中提取特征,可以用于股价预测。下面是一个使用卷积神经网络实现股价预测的Python代码示例,同时也附带一份测试数据。
代码实现
该代码使用了TensorFlow框架,并定义了一个卷积神经网络模型。模型由3个卷积层和2个全连接层构成,其中最后一层输出预测的股价。
import tensorflow as tf
import numpy as np
import pandas as pd
# 读取数据
data_df = pd.read_csv('stock.csv')
# 将数据拆分成训练集和测试集
train_size = int(len(data_df) * 0.7) #70%的数据用于训练
train_df, test_df = data_df.iloc[:train_size], data_df.iloc[train_size:]
# 将数据拆分成特征和标签
train_data = train_df.drop(['price'], axis=1).values
train_labels = train_df['price'].values
test_data = test_df.drop(['price'], axis=1).values
test_labels = test_df['price'].values
# 标准化数据
mean = train_data.mean(axis=0)
stddev = train_data.std(axis=0)
train_data = (train_data - mean) / stddev
test_data = (test_data - mean) / stddev
# 创建卷积神经网络模型
model = tf.keras.Sequential([
tf.keras.layers.Reshape((5, 1), input_shape=(5,)),
tf.keras.layers.Conv1D(filters=64, kernel_size=2, padding='same', activation='relu'),
tf.keras.layers.MaxPooling1D(pool_size=2),
tf.keras.layers.Conv1D(filters=128, kernel_size=2, padding='same', activation='relu'),
tf.keras.layers.MaxPooling1D(pool_size=2),
tf.keras.layers.Conv1D(filters=256, kernel_size=2, padding='same', activation='relu'),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(1)
])
# 编译模型
model.compile(optimizer='adam', loss='mse')
# 训练模型
model.fit(train_data, train_labels, epochs=100, validation_data=(test_data, test_labels))
# 测试模型
test_loss = model.evaluate(test_data, test_labels)
print('Test Loss: {}'.format(test_loss))
# 进行预测
predictions = model.predict(test_data)
# 打印前10个预测结果和真实结果
for i in range(10):
print('Prediction: {}, Actual: {}'.format(predictions[i][0], test_labels[i]))
测试数据
测试数据包括股价和以下5个时间序列特征:每日开盘价、每日最高价、每日最低价,每日收盘价和当日成交量。共有10000个数据点,保存在名为“stock.csv”的文件中。以下是数据的一些示例:
price,open,high,low,close,volume
86.699,86.185,86.46,86.1,86.315,864
54.618,54.37,54.67,54.6,54.6,2934
49.023,48.645,49.025,48.59,48.838,326
95.879,95.44,96.18,95.39,96.065,1607
38.811,38.7,38.9,38.625,38.75,4811
每行数据的第一列是股价,后5列是时间序列特征。数据已处理为标准化形式,可以直接用于模型训练和测试。