Python使用卷积神经网络预测股票价格(Conv1D模型)
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv1D, MaxPooling1D, Flatten
# 读取CSV数据
data = pd.read_csv('stock_data.csv')
# 提取股票价格列
prices = data['Price'].values
# 数据归一化
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_prices = scaler.fit_transform(prices.reshape(-1, 1))
# 创建训练集和测试集
train_size = int(len(scaled_prices) * 0.8)
train_data = scaled_prices[:train_size]
test_data = scaled_prices[train_size:]
# 构建时间序列数据
def create_sequences(data, seq_length):
X = []
y = []
for i in range(len(data)-seq_length):
X.append(data[i:i+seq_length])
y.append(data[i+seq_length])
return np.array(X), np.array(y)
seq_length = 10
X_train, y_train = create_sequences(train_data, seq_length)
X_test, y_test = create_sequences(test_data, seq_length)
# 构建卷积神经网络模型
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(seq_length, 1)))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(50, activation='relu'))
model.add(Dense(1))
# 编译模型
model.compile(optimizer='adam', loss='mse')
# 训练模型
model.fit(X_train, y_train, epochs=50, batch_size=16)
# 使用模型进行预测
predicted_prices = model.predict(X_test)
# 反归一化
predicted_prices = scaler.inverse_transform(predicted_prices)
# 打印预测结果
for i in range(len(predicted_prices)):
print('Predicted:', predicted_prices[i], 'Actual:', test_data[i+seq_length])
原文地址: https://www.cveoy.top/t/topic/f28r 著作权归作者所有。请勿转载和采集!