文章目录

  • 数据
  • 神经网络部分
  • 遗传算法优化部分
  • 结果格式

话不多说,直接上代码

数据

实验数据格式为单列的时间序列数据,不方便给出

神经网络部分

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: liujie
@software: PyCharm
@file: deep_learning.py
@time: 2020/11/18 11:06
"""
import warnings
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler,MinMaxScaler
from sklearn.metrics import mean_squared_error, mean_absolute_errorimport tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers, optimizers, metrics
from keras.layers.recurrent import LSTM# 加载数据
def read_data(filepath):data = pd.read_csv(filepath, index_col=0)data.fillna(method='pad', inplace=True)# data.dropna(inplace=True)return data# 分割数据
def splitdata(data, windows, horizon):all_data = []for dta in range(len(data) - windows - horizon + 1):all_data.append(data[dta: (dta + windows)])all_data = np.array(all_data)ydata = data[horizon - 1 + windows:]ydata = list(ydata)# 构造y变量all_data = pd.DataFrame(all_data)all_data['y'] = ydataall_data = np.array(all_data)# 训练集/测试集-0.8、0.2row_1 = round(0.2 * len(all_data))x_train_initial = all_data[:-row_1, :-1]y_train_initial = all_data[:-row_1, -1]x_test_initial = all_data[-row_1:, :-1]y_test_initial = all_data[-row_1:, -1]return x_train_initial, y_train_initial, x_test_initial, y_test_initial# 归一化
def min_max_scaler(x_train_initial, y_train_initial, x_test_initial, y_test_initial):mm_x = MinMaxScaler()x_train = mm_x.fit_transform(x_train_initial)x_test = mm_x.transform(x_test_initial)mm_y = MinMaxScaler()y_train = mm_y.fit_transform(y_train_initial.reshape(-1, 1))y_test = mm_y.transform(y_test_initial.reshape(-1, 1))return x_train, y_train, x_test, y_test,mm_ydef load():index = 'data'windows = 8horizon = 1filepath = '../data/Data.csv'data = read_data(filepath)[index]# 分割数据x_train_initial, y_train_initial, x_test_initial, y_test_initial = splitdata(data,windows,horizon)# 归一化x_train, y_train, x_test, y_test, mm_y = min_max_scaler(x_train_initial, y_train_initial, x_test_initial, y_test_initial)return x_train, y_train, x_test, y_test,mm_y# 定义LSTM层函数
def create_lstm(inputs,units,return_sequences):lstm = layers.LSTM(units,return_sequences=return_sequences)(inputs)return lstm# 定义Dense层函数
def create_dense(inputs,units):dense = layers.Dense(units,kernel_regularizer=keras.regularizers.l2(0.001),activation='relu')(inputs)dense_dropout = layers.Dropout(0.2)(dense)return dense,dense_dropoutdef classify(x_train,y_train,x_test,y_test,num):# 设置LSTM层参数lstm_num_layers = num[0]lstm_units = num[2:2 + lstm_num_layers]lstm_name = list(np.zeros((lstm_num_layers,)))# 设置LSTM_Dense层的参数lstm_dense_num_layers = num[1]lstm_dense_units = num[2 + lstm_num_layers: 2 + lstm_num_layers + lstm_dense_num_layers]lstm_dense_name = list(np.zeros((lstm_dense_num_layers,)))lstm_dense_dropout_name = list(np.zeros((lstm_dense_num_layers,)))windows = 8inputs_lstm = layers.Input(shape=(windows,1))for i in range(lstm_num_layers):if i == 0:inputs = inputs_lstmelse:inputs = lstm_name[i-1]if i == lstm_num_layers-1:return_sequences = Falseelse:return_sequences = Truelstm_name[i] = create_lstm(inputs=inputs,units=lstm_units[i],return_sequences=return_sequences)for i in range(lstm_dense_num_layers):if i == 0:inputs = lstm_name[lstm_num_layers - 1]else:inputs = lstm_dense_dropout_name[ i-1]lstm_dense_name[i],lstm_dense_dropout_name[i] = create_dense(inputs=inputs,units=lstm_dense_units[i])outputs_lstm = layers.Dense(1,activation='relu')(lstm_dense_dropout_name[lstm_dense_num_layers - 1])# 构建模型model = keras.Model(inputs=inputs_lstm,outputs = outputs_lstm)# 编译模型model.compile(optimizer=optimizers.Adam(),loss='mse',metrics=['accuracy'])history = model.fit(x_train,y_train,batch_size=32,epochs=20,validation_split=0.1,verbose=0)print('LSTM finished!')# 验证模型results = model.evaluate(x_test,y_test,verbose=0)return results[0]   # mse

遗传算法优化部分

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: liujie
@software: PyCharm
@file: GA.py.py
@time: 2020/11/18 14:15
"""
import numpy as np
import deep_learning as project
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'# 设置参数
DNA_size = 2
DNA_size_max = 8    # 每条染色体的长度
POP_size = 20       # 种群数量
CROSS_RATE = 0.5    # 交叉率
MUTATION_RATE = 0.01# 变异率
N_GENERATIONS = 20  # 迭代次数x_train,y_train,x_test,y_test,mm_y = project.load()# 适应度-构建符合mse的适应度,适应度为mse的导数
def get_fitness(x):return 1 / project.classify(x_train,y_train,x_test,y_test,num=x)# 生成新的种群
def select(pop,fitness):idx = np.random.choice(np.arange(POP_size),size=POP_size,replace=True,p=fitness/fitness.sum())return pop[idx]# 交叉函数
def crossover(parent,pop):if np.random.rand() < CROSS_RATE:i_ = np.random.randint(0,POP_size,size=1)   # 染色体的序号cross_points = np.random.randint(0,2,size=DNA_size_max).astype(np.bool)     # 用True、False表示是否置换# 对此位置上基因为0或是要交换的基因是关于层数的,则取消置换for i,point in enumerate(cross_points):if point == True and pop[i_,i] * parent[i] == 0:cross_points[i] = False# 修改关于层数的if point == True and i < 2:cross_points[i] = False# 将第i_条染色体上对应位置的基因置换到parent染色体上parent[cross_points] = pop[i_,cross_points]return parent# 定义变异函数
def mutate(child):for point in range(DNA_size_max):if np.random.rand() < MUTATION_RATE:if point >= 3:if child[point] != 0:child[point] = np.random.randint(8,257)return child# 层数
pop_layers = np.zeros((POP_size,DNA_size),np.int32)     # (20,2)
pop_layers[:,0] = np.random.randint(1,4,size=(POP_size,))
pop_layers[:,1] = np.random.randint(1,4,size=(POP_size,))# 种群
pop = np.zeros((POP_size,DNA_size_max))                 # (20,8)
# 随机构建pop
# 神经元个数
for i in range(POP_size):pop_neurons = np.random.randint(8,257,size=(pop_layers[i].sum(),))pop_stack = np.hstack((pop_layers[i],pop_neurons))for j,gene in enumerate(pop_stack):pop[i][j] = gene# 迭代次数
for each_generation in range(N_GENERATIONS):# 适应度fitness = np.zeros([POP_size,])# 第i个染色体for i in range(POP_size):pop_list = list(pop[i])# 第i个染色体上的基因# 将0去掉并变整数for j,each in enumerate(pop_list):if each == 0.0:index = jpop_list = pop_list[:j]for k,each in enumerate(pop_list):each_int = int(each)pop_list[k] = each_intfitness[i] = get_fitness(pop_list)print('第%d代第%d个染色体的适应度为%f'%(each_generation+1,i+1,fitness[i]))print('此染色体为:',pop_list)print('Generation:',each_generation+1,'Most fitted DNA:',pop[np.argmax(fitness),:],'适应度为:',fitness[np.argmax(fitness)])# 生成新的种群pop = select(pop,fitness)# 新的种群pop_copy = pop.copy()for parent in pop:child = crossover(parent,pop_copy)child = mutate(child)parent = child

结果格式

LSTM finished!
第1代第1个染色体的适应度为522.216378
此染色体为: [1, 3, 60, 120, 83, 173]
LSTM finished!
第1代第2个染色体的适应度为942.327845
此染色体为: [2, 2, 52, 24, 68, 78]
LSTM finished!
第1代第3个染色体的适应度为2302.586755
此染色体为: [3, 1, 96, 124, 188, 201]
LSTM finished!
第1代第4个染色体的适应度为1092.475943
此染色体为: [3, 2, 118, 182, 99, 110, 107]
LSTM finished!
第1代第5个染色体的适应度为1151.874246
此染色体为: [2, 2, 84, 226, 169, 187]
LSTM finished!
第1代第6个染色体的适应度为248.099399
此染色体为: [3, 3, 60, 92, 199, 255, 191, 47]
LSTM finished!
第1代第7个染色体的适应度为2452.897083
此染色体为: [1, 1, 173, 213]
LSTM finished!
第1代第8个染色体的适应度为1613.689639
此染色体为: [2, 1, 121, 72, 30]
LSTM finished!
第1代第9个染色体的适应度为1094.261693
此染色体为: [2, 2, 100, 100, 223, 57]
LSTM finished!
第1代第10个染色体的适应度为267.459530
此染色体为: [1, 1, 149, 11]
LSTM finished!
第1代第11个染色体的适应度为2111.992278
此染色体为: [2, 1, 241, 125, 67]
LSTM finished!
第1代第12个染色体的适应度为722.338804
此染色体为: [3, 2, 66, 242, 206, 57, 84]
LSTM finished!
第1代第13个染色体的适应度为1962.326380
此染色体为: [2, 1, 15, 203, 148]
LSTM finished!
第1代第14个染色体的适应度为1670.653626
此染色体为: [3, 1, 121, 63, 101, 181]
LSTM finished!
第1代第15个染色体的适应度为650.192519
此染色体为: [3, 3, 35, 45, 255, 250, 219, 166]
LSTM finished!
第1代第16个染色体的适应度为2516.311356
此染色体为: [2, 1, 80, 222, 86]
LSTM finished!
第1代第17个染色体的适应度为1224.642328
此染色体为: [2, 2, 126, 184, 152, 185]
LSTM finished!
第1代第18个染色体的适应度为1338.741317
此染色体为: [1, 2, 200, 114, 137]
LSTM finished!
第1代第19个染色体的适应度为1030.776978
此染色体为: [2, 2, 204, 105, 18, 180]
LSTM finished!
第1代第20个染色体的适应度为2659.318736
此染色体为: [2, 1, 140, 134, 209]
Generation: 1 Most fitted DNA: [  2.   1. 140. 134. 209.   0.   0.   0.] 适应度为: 2659.3187361731398

如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论留言!


遗传优化算法优化LSTM-MSE相关推荐

  1. Python实现BOA蝴蝶优化算法优化支持向量机分类模型(SVC算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 蝴蝶优化算法(butterfly optimization al ...

  2. Python实现BOA蝴蝶优化算法优化支持向量机回归模型(SVR算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 蝴蝶优化算法(butterfly optimization al ...

  3. Python实现ABC人工蜂群优化算法优化支持向量机回归模型(SVR算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 人工蜂群算法(Artificial Bee Colony, AB ...

  4. Python实现GWO智能灰狼优化算法优化支持向量机分类模型(SVC算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 灰狼优化算法(GWO),由澳大利亚格里菲斯大学学者 Mirjal ...

  5. Python实现GWO智能灰狼优化算法优化支持向量机回归模型(svr算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 灰狼优化算法(GWO),由澳大利亚格里菲斯大学学者 Mirjal ...

  6. Python实现ACO蚁群优化算法优化支持向量机回归模型(SVR算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 蚁群优化算法(Ant Colony Optimization, ...

  7. 麻雀优化算法 优化XGBoost的参数 python代码

    文章目录 麻雀优化算法 麻雀优化算法的改进 加入Ten混沌序列 XGBoost原理 麻雀优化算法优化XGBoost 参数范围 部分代码 画图 优化结果 评价结果和运行时间 适应度曲线 训练集结果 测试 ...

  8. Python实现ALO蚁狮优化算法优化支持向量机分类模型(SVC算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 蚁狮优化(Ant Lion Optimizer,ALO)算法是M ...

  9. Python实现ALO蚁狮优化算法优化支持向量机回归模型(SVR算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 蚁狮优化(Ant Lion Optimizer,ALO)算法是M ...

  10. Python实现ABC人工蜂群优化算法优化支持向量机分类模型(SVC算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 人工蜂群算法(Artificial Bee Colony, AB ...

最新文章

  1. 短视频风口创业不容易,您信吗?
  2. 数据库SQL面试题七则
  3. 有了这些经典书籍+配套实验环境上线,还有什么借口说学不好编程?
  4. android v4包自动导入吧,android如何导入v4包的源码
  5. 移植内核过程的几个问题
  6. 如何转换并压缩png格式图片
  7. 【TSP】基于matlab自重启伪遗传改良算法求解旅行商问题【含Matlab源码 1510期】
  8. IEEE Access 模板大坑之添加子图
  9. python3 scrapy中文文档_Python3爬虫入门:Scrapy 框架
  10. 数据分析之正态性检验
  11. 教你如何使用语雀提高效率
  12. 弄了一整天,终于把打印自定义纸张大小搞定了
  13. 比赛即实战!中国软件杯发布全新产业创新赛项,校企可联合参赛
  14. 以太坊用户体验的痛点
  15. 华为 社招 C语言笔试,华为笔试C语言笔试题之3
  16. 杰理690系列开发板添加录音功能
  17. 联想适合计算机专业的游戏本,全球最佳游戏笔记本电脑Top 10
  18. 订单BOM -销售BOM-标准BOM
  19. Merlin部署KMS
  20. 计算机的教育领域的应用研究,浅析计算机科学技术在现代教育中的应用研究

热门文章

  1. 关于sharepoint2013的SPUtility.GetGenericSetupPath()方法过期解决办法
  2. Emeditor 常用的正则表达式
  3. PowerShell中远程管理简单配置
  4. 学习完windows网络编程第一章后做的UDPTest程序
  5. Mybatis-plus的两种分页插件的配置方式
  6. 云锵基金 2019 年 02 月简报
  7. 爬虫练习五:多进程爬取股市通股票数据
  8. 利用Python网络爬虫抓取微信好友的签名及其可视化展示
  9. Domain应用之 根据某个Many2one的对象的 X2many对象 过滤
  10. VS2015中搭建lua环境