# -*- coding: utf-8 -*-
# 导入库pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.metrics import mean_squared_error # 评价指标
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM, GRU
from keras import optimizers
import keras
import tensorflow as tf
# mse rmse mae rmape
# adam sgd
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
import warnings
warnings.filterwarnings("ignore") # 忽略一些警告 不影响运行
from data_read import date_process
train_x,train_y=date_process()
# 序列长度
int_sequence_len = train_x.shape[1]
# 每个序列的长度
int_a = train_x.shape[2]
# 输出几个元素 几步:
out_len = train_y.shape[1]
# 划分验证集和测试集
x_train, x_test, y_train, y_test = train_test_split(np.array(train_x), np.array(train_y), test_size=0.2, random_state=1,shuffle=False)
print(x_train.shape)
print(len(x_train), len(x_test)) # 1243 311
x_train = x_train.reshape(len(x_train),int_sequence_len, int_a) # 三维度数据 全部数据长度 序列长度 每个序列维度
y_train = y_train.reshape(len(x_train),out_len)
print(x_train.shape)
print(y_train.shape)
x_test = x_test.reshape(len(x_test),int_sequence_len, int_a)
y_test = y_test.reshape(len(x_test),out_len)
print(x_test.shape)
print(y_test.shape)
from keras import backend as K
from keras.layers import Layer
# def create_model_1():
# model = keras.models.Sequential([
# keras.layers.LSTM(100, activation='relu', input_shape=(int_sequence_len, int_a)), # (1,9) 要与三维度的(1243,1,9) 一一对应
# # 序列长度 每个序列维度
# # (1,9) 要与三维度的(1243,1,9) 一一对应
# # 序列长度 每个序列维度
# AttentionLayer(),
# keras.layers.Dense(128, activation='relu'), # 全连接
# keras.layers.Dense(64), # 全连接
# keras.layers.Dense(out_len) # 1个全链接
# ])
# op=optimizers.adam_v2.Adam(lr=0.01)
# model.compile(loss='mean_absolute_error', optimizer=op) # 回归损失函数和优化器 Adam SGD
# return model
from keras.models import Model
from keras.layers import Input, LSTM, Dense, Permute, Multiply, Activation, Lambda
def build_model(n_timesteps, n_features):
inputs = Input(shape=(n_timesteps, n_features))
lstm_out = LSTM(10, return_sequences=True)(inputs)
print(lstm_out.shape)
# Attention层
attention = Dense(1, activation='tanh')(lstm_out)
attention = Permute([2, 1])(attention)
attention = Activation('softmax')(attention)
attention = Multiply()([lstm_out, attention])
attention = Lambda(lambda x: K.sum(x, axis=1))(attention)
outputs = Dense(128, activation='relu')(attention)
outputs = Dense(1, activation='relu')(outputs)
model = Model(inputs=inputs, outputs=outputs)
return model
model1 = build_model(int_sequence_len,int_a)
op=optimizers.adam_v2.Adam(lr=0.01)
model1.compile(loss='mean_absolute_error', optimizer=op) # 回归损失函数和优化器 Adam SGD
model1.summary()
history=model1.fit(x_train, y_train, validation_data=(x_train, y_train), epochs=50, batch_size=32, shuffle=True)
# 训练世代 batch
# model1.save_weights('lstmmoxing') # 模型保存
import matplotlib.pyplot as plt
training_loss = history.history['loss']
test_loss = history.history['val_loss']
# 创建迭代数量
epoch_count = range(1, len(training_loss) + 1)
# 可视化损失历史
plt.plot(epoch_count, training_loss, 'r--')
plt.plot(epoch_count, test_loss, 'b-')
plt.legend(['Training Loss', 'Test Loss'])
plt.title("train loss and test loss")
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.show()
from sklearn.metrics import mean_squared_error # 均方误差
from sklearn.metrics import mean_absolute_error # 平方绝对误差
from sklearn.metrics import r2_score # R square
# 调用
# 引用上边的模型实例
# 加载保存好的模型
y1_pred_lstm = model1.predict(x_test)
y_true=[]
y_pred=[]
for i in range(len(y1_pred_lstm)):
y_true.extend(y_test[i])
y_pred.extend(y1_pred_lstm[i])
from metra import metric
mae, mse, rmse, mape, mspe,r2=metric(np.array(y_pred),np.array(y_true))
print('mae, mse, rmse, mape, mspe,r2')
print(mae, mse, rmse, mape, mspe,r2)
# 所有画图
len_ = [i for i in range(len(y_true))]
plt.xlabel('数据id', fontsize=8)
plt.ylabel('收盘价', fontsize=8)
plt.plot(len_, y_true, label='y_true', color="blue")
plt.plot(len_, y_pred, label='y_pred', color="yellow")
plt.title("收盘价预测图")
plt.legend()
plt.show()
plt.clf()
# # 输出到excle
# name = ['真实值', '预测值']
# test = pd.DataFrame(columns=name, data=result)
# test.to_excel('result_.xlsx')
# # 输出 。。。excle表
代码.rar代码.rar代码.rar代码.rar代码.rar代码.rar代码.rar
需积分: 5 2 浏览量
2024-04-30
11:15:04
上传
评论
收藏 117KB RAR 举报
mqdlff_python
- 粉丝: 1465
- 资源: 71
最新资源
- python开心麻花影视作品分析程序+源码.zip
- pythonExcel数据分析师程序+源码.zip
- PlatformUI.jar 支持RCP控件环境插件
- VB+ACCESS大型机房学生上机管理系统(源代码+系统).zip
- 基于BP神经网络的回归分析,基于优化动量因子的BP神经网络,基于优化学习率的BP神经网络,基于优化隐藏层神经元的bp神经网络
- python读取excel数据Python-file-reading-master.zip
- STC15单片机串口2使用程序例子
- 读取日志的excel生成周报 用python3开发weekplan-master.zip
- python 读取excel数据导入dbimport-data-master.zip
- K折交叉验证BP神经网络,多输入多输出BP神经网络(代码完整,数据齐全)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈