使用CNN-LSTM,以开盘价、收盘价、最高价、最低价、前收盘价、成交量、成交额、换手率、涨跌幅作为输入特征,以前五天的数据作为输入,后八天的数据作为输出写代码
时间: 2023-10-20 17:25:49 浏览: 88
CNN-LSTM组合预测模型,输入数据是多列输入,单列输出的回归预测模型,代码内部有基本注释,替换数据就可以使用,版本需求是20
以下是一个简单的使用CNN-LSTM模型的代码示例,用于预测股票价格:
```python
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, LSTM, Conv1D, MaxPooling1D, Flatten
# 加载数据
data = pd.read_csv('stock_data.csv')
# 特征选择
features = ['open', 'close', 'high', 'low', 'pre_close', 'volume', 'amount', 'turnover_rate', 'pct_chg']
data = data[features]
# 数据归一化
scaler = MinMaxScaler(feature_range=(0, 1))
data = scaler.fit_transform(data)
# 数据准备
X = []
y = []
for i in range(5, len(data)-8):
X.append(data[i-5:i, :])
y.append(data[i:i+8, 0]) # 预测开盘价
X = np.array(X)
y = np.array(y)
# 划分训练集和测试集
split = int(0.9 * len(X))
X_train = X[:split]
y_train = y[:split]
X_test = X[split:]
y_test = y[split:]
# 创建模型
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(X.shape[1], X.shape[2])))
model.add(MaxPooling1D(pool_size=2))
model.add(LSTM(50, return_sequences=True))
model.add(LSTM(50))
model.add(Dropout(0.5))
model.add(Dense(8))
model.compile(loss='mse', optimizer='adam')
# 模型训练
model.fit(X_train, y_train, epochs=50, batch_size=64, validation_data=(X_test, y_test), verbose=2)
# 模型评估
train_score = model.evaluate(X_train, y_train, verbose=0)
test_score = model.evaluate(X_test, y_test, verbose=0)
print('Train Loss:', train_score)
print('Test Loss:', test_score)
# 预测结果
y_pred = model.predict(X_test)
# 反归一化
y_pred = scaler.inverse_transform(y_pred)
y_test = scaler.inverse_transform(y_test)
# 打印前10个预测结果
for i in range(10):
print('Predicted:', y_pred[i], 'Actual:', y_test[i])
```
需要注意的是,这只是一个简单的示例,实际上预测股票价格是一个非常复杂的问题,需要更多的特征工程和模型优化。
阅读全文