#!/usr/bin/env python
# coding: utf-8
# In[1]:
import math
# 导入math模块,提供数学计算功能
import os
# 导入os模块,提供与操作系统交互的功能
import random
# 导入random模块,提供生成随机数的功能
import tensorflow as tf
# 导入tensorflow模块,用于构建和训练神经网络模型
import matplotlib.pyplot as plt
# 导入matplotlib.pyplot模块,用于绘制图表
import numpy as np
# 导入numpy模块,提供高性能的数值计算功能
import pandas as pd
# 导入pandas模块,用于数据处理和分析
from sklearn.metrics import mean_squared_error
# 从sklearn.metrics模块导入mean_squared_error函数,用于计算均方误差
from sklearn.metrics import mean_absolute_error
# 从sklearn.metrics模块导入mean_absolute_error函数,用于计算平均绝对误差
from sklearn.metrics import r2_score
# 从sklearn.metrics模块导入r2_score函数,用于计算R2评分
from sklearn.preprocessing import MinMaxScaler
# 从sklearn.preprocessing模块导入MinMaxScaler类,用于数据归一化
from tensorflow.python.keras.callbacks import EarlyStopping
# 从tensorflow.python.keras.callbacks模块导入EarlyStopping类,用于早停策略
from tensorflow.python.keras.layers import Dense, Dropout, LSTM
# 从tensorflow.python.keras.layers模块导入Dense、Dropout、LSTM类,用于构建神经网络层
from tensorflow.python.keras.layers.core import Activation
# 从tensorflow.python.keras.layers.core模块导入Activation类,用于设置激活函数
from tensorflow.python.keras.models import Sequential
# 从tensorflow.python.keras.models模块导入Sequential类,用于构建序列模型
import numpy
# 导入numpy模块,提供高性能的数值计算功能
import time
# 导入time模块,提供时间相关的功能
# In[2]:
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# In[3]:
#更多模型搜索机器学习之心,支持模型定制
# In[4]:
'''
定义一个函数用于创建数据集,输入参数包括:
dataset: 数据集
look_back: 回溯长度,即用多少个时间步作为输入预测下一个时间步
'''
def creat_dataset(dataset, look_back):
dataX, dataY = [], []
for i in range(len(dataset) - look_back - 1):# 循环遍历数据集
a = dataset[i: (i + look_back)]# 提取回溯长度的数据作为输入
dataX.append(a)# 将该输入数据添加到输入数据集
dataY.append(dataset[i + look_back])# 将下一个时间步的数据添加到输出数据集
return np.array(dataX), np.array(dataY)# 将输入输出数据集转换为numpy数组并返回
# In[5]:
dataframe = pd.read_csv('焦作.csv',header=0, parse_dates=[0],index_col=0, usecols=[0, 1])# 读取CSV文件,并设置第一列为日期,作为索引
dataset = dataframe.values# 获取数据集的值
dataframe.head(10)# 查看前10行数据
# In[6]:
scaler = MinMaxScaler(feature_range=(0, 1))# 使用 MinMaxScaler 进行数据归一化
dataset = scaler.fit_transform(dataset.reshape(-1, 1))# 将数据变为二维数组并进行归一化
# In[7]:
train_size = int(len(dataset) * 0.8) # 计算训练集大小,将数据集长度的 80% 转换为整数
test_size = len(dataset) - train_size # 计算测试集大小,将剩余的数据作为测试集
train, test = dataset[0: train_size], dataset[train_size: len(dataset)] # 将数据集划分为训练集和测试集,使用切片操作实现
# In[8]:
def build_model(lk, neurons1, neurons2, neurons3, dropout):
look_back = lk # 设置滑动窗口的大小为look_back
trainX, trainY = creat_dataset(train, look_back) # 根据训练集数据和滑动窗口大小创建训练集的输入序列和输出值
testX, testY = creat_dataset(test, look_back) # 根据测试集数据和滑动窗口大小创建测试集的输入序列和输出值
X_train, y_train = trainX, trainY # 将训练集的输入序列和输出值赋值给X_train和y_train
X_test, y_test = testX, testY # 将测试集的输入序列和输出值赋值给X_test和y_test
model = Sequential() # 创建Sequential模型
model.add(LSTM(units=neurons1, return_sequences=True, input_shape=(look_back, 1))) # 添加第一个LSTM层,设置神经元个数为neurons1,输入形状为(look_back, 1)
model.add(LSTM(units=neurons2, return_sequences=True)) # 添加第二个LSTM层,设置神经元个数为neurons2
model.add(LSTM(neurons3, return_sequences=False)) # 添加第三个LSTM层,设置神经元个数为neurons3,返回序列结果
model.add(Dropout(dropout)) # 添加Dropout层,设置丢弃率为dropout
model.add(Dense(100)) # 添加全连接层,神经元个数为100
model.add(Dense(units=1)) # 添加输出层,神经元个数为1
model.add(Activation('relu')) # 添加激活函数为ReLU的层
model.compile(loss='mean_squared_error', optimizer='Adam') # 编译模型,使用均方误差作为损失函数,使用Adam优化器
return model, X_train, y_train, X_test, y_test # 返回构建好的模型以及训练集和测试集的输入序列和输出值
# In[9]:
def training(X):
lk = int(X[0]) # 将X的第一个元素转换为整数,表示滑动窗口的大小
neurons1 = int(X[1]) # 将X的第二个元素转换为整数,表示第一个LSTM层中神经元的个数
neurons2 = int(X[2]) # 将X的第三个元素转换为整数,表示第二个LSTM层中神经元的个数
neurons3 = int(X[3]) # 将X的第四个元素转换为整数,表示第三个LSTM层中神经元的个数
dropout = round(X[4], 6) # 将X的第五个元素保留六位小数,表示Dropout层的丢弃率
batch_size = int(X[5]) # 将X的第六个元素转换为整数,表示批次大小
print(X) # 打印X的值
model, X_train, y_train, X_test, y_test = build_model(lk, neurons1, neurons2, neurons3, dropout) # 调用build_model函数构建模型,并获得训练集和测试集的输入序列和输出值
model.fit(
X_train,
y_train,
batch_size=batch_size,
epochs=100,
validation_split=0.1,
verbose=0,
callbacks=[EarlyStopping(monitor='val_loss', patience=22, restore_best_weights=True)]) # 使用训练集训练模型,并设置相关参数和回调函数
pred = model.predict(X_test) # 使用训练好的模型进行预测
temp_mse = mean_squared_error(y_test, pred) # 计算均方误差
print(temp_mse) # 打印均方误差的值
return temp_mse # 返回均方误差的值
# In[10]:
class solution:
def __init__(self):
self.best = 0 # 用于存储最佳适应度值
self.bestIndividual = [] # 用于存储最佳个体的解向量
self.convergence = [] # 用于存储迭代过程中适应度值的变化
self.optimizer = "" # 用于存储优化算法的名称
self.objfname = "" # 用于存储优化目标函数的名称
self.startTime = 0 # 用于记录算法开始执行的时间
self.endTime = 0 # 用于记录算法结束执行的时间
self.executionTime = 0 # 用于记录算法执行的时间
self.lb = 0 # 用于存储解向量中每个元素的下界
self.ub = 0 # 用于存储解向量中每个元素的上界
self.dim = 0 # 用于存储解向量的维度
self.popnum = 0 # 用于存储种群中个体的数量
self.maxiers = 0 # 用于存储最大迭代次数
# In[11]:
def JAYA(objf, lb, ub, dim, SearchAgents_no, Max_iter):
# Best and Worst position initialization
Best_pos = numpy.zeros(dim) # 初始化最佳位置
Best_score = float("inf") # 初始化最佳得分
Worst_pos = numpy.zeros(dim) # 初始化最差位置
Worst_score = float(0) # 初始化最差得分
fitness_matrix = numpy.zeros((SearchAgents_no)) # 初始化适应度�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.Python实现JAYA-LSTM算法优化长短期记忆神经网络时间序列预测(完整源码和数据) anaconda + pycharm + python +Tensorflow 注意事项:保姆级注释,几乎一行一注释,方便小白入门学习! 2.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 3.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 4.作者介绍:某大厂资深算法工程师,从事Matlab、Python算法仿真工作8年;擅长智能优化算法、神经网络预测、信号处理、元胞自动机等多种领域的算法仿真实验,更多仿真源码、数据集定制私信+
资源推荐
资源详情
资源评论
收起资源包目录
JAYA-LSTM.zip (3个子文件)
JAYA-LSTM.py 16KB
焦作.csv 62KB
焦作全.csv 112KB
共 3 条
- 1
资源评论
机器学习之心
- 粉丝: 2w+
- 资源: 1065
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 西门子EPOS效率倍增-伺服驱动功能库详解-简易非循环功能库之EPOS程序段读写.mp4
- windows鼠标美化
- 基于python-CNN深度学习识别10种蔬菜-含5000张以上的图片.zip
- 车辆、标志、人员检测28-YOLO(v5至v11)、COCO数据集合集.rar
- zotero-reference插件-版本号1.3.1.xpi
- 基于javaswing的可视化学生信息管理系统
- 车辆、人检测14-TFRecord数据集合集.rar
- 车辆、人员、标志检测26-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 一款完全免费的屏幕水印工具
- 基于PLC的空调控制原理图
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功