#!/usr/bin/env python
# coding: utf-8
# In[1]:
import random
# 导入random模块,用于生成随机数
import numpy
# 导入numpy模块,提供对多维数组和矩阵的支持
import numpy as np
# 导入numpy模块,并给它起了一个别名np,方便后续使用
import math
# 导入math模块,提供对数学运算的支持
import sys
# 导入sys模块,提供对Python解释器的访问
from numpy import linalg as LA
# 导入numpy模块的linalg子模块,并给它起了一个别名LA,用于线性代数运算
import math
# 导入math模块,提供对数学运算的支持
import os
# 导入os模块,提供对操作系统的接口
import matplotlib.pyplot as plt
# 导入matplotlib.pyplot模块,用于绘图
import pandas as pd
# 导入pandas模块,提供高性能、易于使用的数据结构和数据分析工具
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
# 从sklearn.metrics模块中导入mean_squared_error、mean_absolute_error、r2_score函数,用于评估模型的性能指标
from sklearn.preprocessing import MinMaxScaler
# 导入MinMaxScaler类,用于特征缩放
from tensorflow.python.keras.callbacks import EarlyStopping
# 导入EarlyStopping类,用于在训练过程中实施早停策略
from tensorflow.python.keras.layers import Dense, Dropout, LSTM
# 导入Dense、Dropout、LSTM类,用于构建神经网络模型的层
from tensorflow.python.keras.layers.core import Activation
# 导入Activation类,用于设置激活函数
from tensorflow.python.keras.models import Sequential
# 导入Sequential类,用于构建序列模型
import tensorflow as tf
# 导入tensorflow模块,并给它起了一个别名tf,用于进行机器学习和深度学习任务
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]:
look_back = 10# 定义时序窗口大小
trainX, trainY = creat_dataset(train, look_back)# 生成训练集
testX, testY = creat_dataset(test, look_back)# 生成测试集
# In[9]:
def build_model(neurons1, neurons2, dropout):#定义一个函数,用于构建 LSTM 模型
# 将训练集和测试集的输入和输出数据分别赋值给 X_train、y_train、X_test 和 y_test
X_train, y_train = trainX, trainY
X_test, y_test = testX, testY
model = Sequential()# 创建 Sequential 模型
model.add(LSTM(units=neurons1, return_sequences=True, input_shape=(look_back, 1)))# 添加第一个 LSTM 层,指定神经元个数和输入数据形状
model.add(LSTM(units=neurons2, return_sequences=False))# 添加第二个 LSTM 层,指定神经元个数
model.add(Dropout(dropout))# 添加 Dropout 层,指定失活率
model.add(Dense(units=1))# 添加全连接层,输出维度为 1
model.add(Activation('relu'))# 添加激活函数层,使用 ReLU 函数
model.compile(loss='mean_absolute_error', optimizer='Adam')# 编译模型,指定损失函数和优化器
return model, X_train, y_train, X_test, y_test# 返回构建好的模型以及训练集和测试集的输入和输出数据
# In[10]:
def training(X):
neurons1 = int(X[0]) # 从 X 中获取超参数 neurons1,并将其转换为整数
neurons2 = int(X[1]) # 从 X 中获取超参数 neurons2,并将其转换为整数
dropout = round(X[2], 6) # 从 X 中获取超参数 dropout,并将其保留 6 位小数
batch_size = int(X[3]) # 从 X 中获取超参数 batch_size,并将其转换为整数
print([neurons1, neurons2, dropout, batch_size]) # 打印超参数列表
model, X_train, y_train, X_test, y_test = build_model(neurons1, neurons2, dropout) # 构建模型并获取训练集、测试集
model.fit(
X_train,
y_train,
batch_size=batch_size,
epochs=100,
validation_split=0.1,
verbose=0,
callbacks=[EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)]) # 训练模型
pred = model.predict(X_test) # 在测试集上进行预测
temp_mse = mean_squared_error(y_test, pred) # 计算预测结果与真实值之间的均方误差
print(temp_mse) # 打印均方误差
return temp_mse # 返回均方误差作为适应度函数的结果
# In[11]:
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[12]:
def MFO(objf, lb, ub, dim, N, Max_iteration):
if not isinstance(lb, list):
lb = [lb] * dim
if not isinstance(ub, list):
ub = [ub] * dim
print('#更多模型搜索机器学习之心,支持模型定制')
Moth_pos = numpy.zeros((N, dim)) # Moth_pos存储种群位置信息,初始化为0矩阵,形状为(N, dim)
for i in range(dim):
Moth_pos[:, i] = numpy.random.uniform(0, 1, N) * (ub[i] - lb[i]) + lb[i] # 在lb和ub之间随机生成N个位置
Moth_fitness = numpy.full(N, float("inf")) # Moth_fitness存储每个位置的适应度值,初始化为正无穷
Convergence_curve = numpy.zeros(Max_iteration) # 用于存储收敛曲线的数组
sorted_population = numpy.copy(Moth_pos) # 将Moth_pos复制到sorted_population中
fitness_sorted = numpy.zeros(N) # 用于存储排序后的适应度值
best_flames = numpy.copy(Moth_pos) # 将Moth_pos复制到best_flames中
best_flame_fitness = numpy.zeros(N) # 用于存储最佳位置的适应度值
double_population = numpy.zeros((2 * N, dim)) # 用于存储双倍种群的数组
机器学习之心
- 粉丝: 2w+
- 资源: 1081
最新资源
- 机械臂代码_Mechanical_arm.zip
- 自己开发的一款桌面级模块化的协作机械臂(A desktop level modular collabora
- 我的超迷你机械臂机器人项目。_Dummy-Robot.zip
- dummy机械臂出自稚晖君_dummy-solidworks-.zip
- 大模型AI机械臂,结合机械臂+大模型+多姿态+语音识别,能看图识物、听懂指令、精准执行任务_xzarm.zip
- Unity2d上位机,通过Arduino辅助机械手的直线电机移动实现抓握_UnityRboticHandGrispHelper.zip
- 机械革命蛟龙5黑苹果EFI_jiaolong5-EFI.zip
- 古月居ROS机械臂开发代码和笔记_Development-of-robot-with-ROS.zip
- 我的超迷你机械臂机器人项目。_Dummy-Robot.zip
- 中国大学MOOC《ROS机械臂开发技术》课程代码示例 _ROS-Academy-for-RoboticArm.zip
- 这是2023年华南理工大学机器人校内赛五山五狼—车车难造队的机械建模开源,我是本队机械建模队员杨欣然_-.zip
- 高级开发简单游戏制作,期末项目答辩小组作业
- MySQL存储引擎解析及其应用场景与优化策略
- 电机控制器,谐波电流注入 为解决汽车NvH而开发,旨在消除转矩谐波,降低运行噪声…… 已成功应用于某项目
- MATLAB代码:基于小生境粒子群算法的配电网有功-无功协调优化 关键词:配电网优化 有功-无功优化 小升境粒子群 光伏波动性 DG配电网 参考文档:模型部分参考:基于粒子群算法的含光伏电站的配
- 2024更新付费进群源码/9.9付费进群系统/付费进群系统源码教程【带详细教程】
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈