卷积神经网络实现简单股价预测

卷积神经网络实现股价预测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列是时间序列特征。数据已处理为标准化形式,可以直接用于模型训练和测试。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值