时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测

时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测

目录

    • 时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测
      • 预测效果
      • 基本介绍
      • 程序设计
      • 参考资料

预测效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

基本介绍

使用先进的机器学习技术和优化算法开发石油产量预测模型,包括开发遗传算法-时间卷积神经网络-长短期记忆(GA-TCN-LSTM)集成模型,以及对循环神经网络(RNN)、门控循环单元( GRU)、长短期记忆LSTM)和时间卷积网络(TCN)。 此外,该程序还包括使用探索性数据分析和数据清理,旨在检测、可视化和处理数据集中的异常值。

在这里插入图片描述
利用先进的机器学习技术和优化算法可以通过考虑这些复杂性来提高预测的准确性 并确定每个模型的最佳超参数组合。

程序设计

  • 私信博主回复Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测
  • Python 3.10.7

在这里插入图片描述

# (找到将用于 TCN-LSTM 预测的加权平均指标的最佳权重)。
# decode bitstring to numbers
def decode(
    bounds: list, 
    n_bits: int, 
    bitstring: list
)-> list:
    """
    Decodes a bitstring into a list of values that correspond to the variables in an optimization problem.

    Args:
        bounds (list): A list of lists, where each list represents the lower and upper bounds of a variable in the optimization problem.
        n_bits (int): An integer that specifies the number of bits used to represent each variable in the bitstring.
        bitstring (list): A list of bits that represents a candidate solution in the optimization problem.

    Returns:
        list: A list of values that correspond to the variables in the optimization problem.

    """

    decoded = list()
    largest = 2**n_bits
    for i in range(len(bounds)):
        # extract the substring
        start, end = i * n_bits, (i * n_bits)+n_bits
    
        substring = bitstring[start:end]
        # convert bitstring to a string of chars
        chars = ''.join([str(s) for s in substring])
        # convert string to integer
        integer = int(chars, 2)
        # scale integer to desired range
        value = bounds[i][0] + (integer/largest) * (bounds[i][1] - bounds[i][0])
        value = np.round(value)
        value = int(value)
        # store
        decoded.append(value)
    return decoded

# tournament selection
def selection(
    pop: list, 
    scores: list, 
    k: int = 3
)-> list:
    """
    Selects a candidate solution from a population using tournament selection.

    Args:
        pop (list): A list of candidate solutions.
        scores (list): A list of fitness scores for the candidate solutions.
        k (int): The number of individuals to compete in each tournament.

    Returns:
        list: The selected candidate solution.
    """

    # first random selection
    selection_ix = randint(len(pop))
    for ix in randint(0, len(pop), k-1):
        # check if better (e.g. perform a tournament)
        if scores[ix] < scores[selection_ix]: # which individual has the lowest loss
            selection_ix = ix

    return pop[selection_ix]

# crossover two parents to create two children
def crossover(
    p1: list, 
    p2: list, 
    r_cross: float
)-> list:
    """
    Performs crossover between two parent candidate solutions to create two child candidate solutions.

    Args:
        p1 (list): The first parent candidate solution.
        p2 (list): The second parent candidate solution.
        r_cross (float): The crossover rate.

    Returns:
        list: A list containing the two child candidate solutions.
    """

    # children are copies of parents by default
    c1, c2 = p1.copy(), p2.copy()
	# check for recombination
    if rand() < r_cross:
		# select crossover point that is not on the end of the string
        pt = randint(1, len(p1)-2)
		# perform crossover
        c1 = np.append(p1[:pt] , p2[pt:])
        c2 = np.append(p2[:pt] , p1[pt:])
    return [c1, c2]

# mutation operator
def mutation(
    bitstring: list, 
    r_mut: float
)-> list:
    """
    Mutates a candidate solution by flipping bits in its bitstring.

    Args:
        bitstring (list): The bitstring of the candidate solution.
        r_mut (float): The mutation rate.

    Returns:
        None
    """
    for i in range(len(bitstring)):
		# check for a mutation
        if rand() < r_mut:
			# flip the bit
            bitstring[i] = 1 - bitstring[i]

# genetic algorithm
def genetic_algorithm(
    series: pd.Series, 
    netowrk_type: str, 
    steps_ahead: int,
    evaluate: callable, 
    bounds: list, 
    n_bits: int, 
    n_iter: int, 
    n_pop: int, 
    r_cross: float, 
    r_mut: float
)-> list:
    """
    Implements a genetic algorithm to optimize the hyperparameters of a neural network.

    Args:
        series (pd.Series): The time series data to be used for training and validation.
        network_type (str): The type of neural network to be optimized ('lstm' or 'tcn').
        steps_ahead (int): The number of steps ahead to forecast.
        evaluate (callable): A function that evaluates the fitness of a candidate solution based on the validation loss.
        bounds (list): A list of lists, where each list represents the lower and upper bounds of a variable in the optimization problem.
        n_bits (int): An integer that specifies the number of bits used to represent each variable in the bitstring.
        n_iter (int): The number of generations to run the genetic algorithm.
        n_pop (int): The number of candidate solutions in each generation.
        r_cross (float): The crossover rate.
        r_mut (float): The mutation rate.

    Returns:
        list: A list containing the best candidate solution and its fitness score.
    """
    if network_type not in ['lstm', 'tcn']:
         raise ValueError("network_type must be either 'lstm' or 'tcn'")
    # initial population of random bitstring
    pop = [randint(0, 2, n_bits*len(bounds)).tolist() for _ in range(n_pop)]
    # keep track of best solution
    best, best_eval = 0, inf
    # enumerate generations
    for gen in range(1, n_iter+1):
        print(f"Generation:{gen}")
        # decode population
        decoded = [decode(bounds, n_bits, p) for p in pop]
        # evaluate all candidates in the population
        scores = [evaluate(series, steps_ahead, individual) for individual in decoded]
        # check for new best solution
        for i in range(n_pop):
            if scores[i] < best_eval: # find the lowest validation loss
                best, best_eval = pop[i], scores[i]
                if network_type == 'lstm':
                    print(">%d, new best combination, Epoch: %d, num_hidden_layers: %d, num_neurons:%d, batch_size: %d, window_size: %d, Loss = %.8f" % \
                            (gen,  decoded[i][0],decoded[i][1], decoded[i][2], decoded[i][3], decoded[i][4],
                                                                scores[i]))
                elif network_type == 'tcn':
                    print(">%d, new best combination, Epoch: %d, n_filters_1: %d, n_filters_2: %d, n_filters_3: %d, batch_size: %d, window_size: %d, Loss = %.8f" % \
                            (gen,  decoded[i][0],decoded[i][1], decoded[i][2], decoded[i][3], decoded[i][4], decoded[i][5],
                                                                scores[i]))
		# select parents (Tournament selection)
        selected = [selection(pop, scores) for _ in range(n_pop)]
		# create the next generation
        children = list()
        for i in range(0, n_pop, 2):
			# get selected parents in pairs
            p1, p2 = selected[i], selected[i+1]
			# crossover and mutation
            for c in crossover(p1, p2, r_cross):
				# mutation
                mutation(c, r_mut)
				# store for next generation
                children.append(c)
		# replace population
        pop = children
    return [best, best_eval]
#find the optimal weights for the weighted average metric that will be used for the prediction of TCN-LSTM
# Define a range for the weights to be searched
weights = np.linspace(0.0, 1, 100)
weights = np.round(weights,5)

# Initialize the best weights and best performance
# best_weights = (1,1)
best_performance = float('inf')

# Iterate over all possible weight combinations
for w1 in weights:
    for w2 in weights:        
        # Make predictions using the current weight combination
        predictions = ((w1 * yhat_tcn_test) + (w2 * yhat_lstm_test)) / (w1+w2+1e-10)
        
        # Evaluate the performance using some metric, e.g. accuracy
        performance = sqrt(mean_squared_error(y_tcn_test, predictions))

        # Update the best weights and best performance if the current performance is better
        if performance < best_performance:
            best_weights = (w1, w2)
            best_performance = performance

print("Best weights:", best_weights)
print("Best performance:", best_performance)    

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/128247182

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/205457.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu systemd-analyze命令(系统启动性能分析工具:分析系统启动时间,找出可能导致启动缓慢的原因)

文章目录 Ubuntu systemd-analyze命令剖析目录简介systemd与systemd-analyze工作原理 安装和使用命令参数详解用例与示例显示启动时间&#xff08;systemd-analyze time&#xff09;列出启动过程中各个服务的启动时间&#xff08;systemd-analyze blame&#xff09;显示系统启动…

没想法、没经验做不了BI?求你,别再自我pua了

“我没想法&#xff0c;没经验&#xff0c;做不了BI报表&#xff0c;是不是不适合现代职场啊&#xff01;”在网上看到不少姐妹有这种迷惘发言&#xff0c;真的就&#xff0c;恨铁不成钢。求你了&#xff0c;别再自我pua了。你没想法没经验多正常啊&#xff0c;因为你没用过BI报…

Django 模板引擎 (四)

一、Django模板引擎 一个强大的工具&#xff0c;用于在HTML页面中嵌入动态内容。它使用一种被称为Django模板语言&#xff08;Django Template Language&#xff09;的简单而强大的语法来处理模板。该模板语言使用”{% %}”进行标记&#xff0c;用于执行各种操作。 二、Django…

指针数组以及利用函数指针来实现简易计算器及typedef关键字(指针终篇)

文章目录 &#x1f680;前言&#x1f680;两段有趣的代码✈️typedef关键字 &#x1f680;指针数组&#x1f680;简易计算器的实现 &#x1f680;前言 基于阿辉前两篇博客指针的基础篇和进阶篇对于指针的了解&#xff0c;那么今天阿辉将为大家介绍C语言的指针剩下的部分&#…

计算机组成原理期中题库

计算机组成原理题目集 2.1 下面是关于计算机中存储器容量单位的叙述&#xff0c;其中错误的是 A. 最基本的计量单位是字节&#xff08;Byte&#xff09;&#xff0c;一个字节等于8bit B. 一台计算机的编址单位、指令字长和数据字长都一样&#xff0c;且是字节的整数倍 C. 最小…

零基础编程入门视频教程,零基础编程从哪学起,分享中文编程工具构件实例

零基础编程入门视频教程&#xff0c;零基础编程从哪学起&#xff0c;分享中文编程工具构件实例 1、零基础编程入门视频教程&#xff0c;系统化编程教程链接 https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 2、零基础编程从哪学起 建议初学…

多多跨境跑出高质量发展“加速度”,解锁拼多多Q3财报背后的王牌

互联网红利渐趋消退&#xff0c;用户拉新难度加大&#xff0c;这些现象也在表明过去电子商务依靠资本、流量快速增长的发展模式已经成为过去式。由高速发展转为高质量发展&#xff0c;在今天每一个经济体与宏观经济发展态势一般&#xff0c;发展的“质量”价值正在被放大开来。…

Zabbix“专家坐诊”第213期问答汇总

问题一 Q&#xff1a;Zabbix报错&#xff1a;Zabbix server is not running :the information displayed may not be current&#xff0c;是什么问题呢&#xff1f; A&#xff1a; 1、数据库软件问题导致导入的zabbix数据库不完整2、zabbix Server配置问题3、zabbix-server没…

超赞!让vue开发效率翻倍的工具分享

分享一个很实用的工具库 VueUse&#xff0c;它是基于 Vue Composition Api&#xff0c;也就是组合式API。支持在Vue2和Vue3项目中进行使用&#xff0c;据说是目前世界上Star最高的同类型库之一。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 它的初衷就…

2023.11.29 深度学习框架理解

2023.11.29 深度学习框架理解 对深度学习框架进行复习&#xff0c;选最简单的“三好学生”问题的四个变化&#xff0c;简要总结其具体思路。 深度学习一开始就是为分类问题研究的&#xff0c;因此其框架的设计都是基于分类的问题&#xff0c;虽然现在也已经演变为可以执行多种…

高效解决在本地打开可视化服务器端的tensorboard

文章目录 问题解决方案 问题 由于连着远程服务器构建模型&#xff0c;但是想在本地可视化却做不到&#xff0c;不要想当然天真的以为CTRLC点击链接http://localhost:6006就真能在本地打开tensorboard。你电脑都没连接服务器&#xff0c;只是pycharm连上了而已 解决方案 你需要…

1000多页!LeetCode刷题手册分享

这本手册确实是一部令人印象深刻的作品。&#xff08;手册链接在文末&#xff01;&#xff01;&#xff01;&#xff09; 首先&#xff0c;内容充实是这本手册的一大亮点。它涵盖了广泛的算法和数据结构主题&#xff0c;包括数组、链表、树、图、排序算法、动态规划等等。每个…

基于SpringBoot房产销售系统

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于房产销售系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了房产销售系统&#xff0c;它彻底改变了过去传统的…

自定义链 SNAT / DNAT 实验举例

参考原理图 实验前的环境搭建 1. 准备三台虚拟机&#xff0c;定义为内网&#xff0c;外网以及网卡服务器 2. 给网卡服务器添加网卡 3. 将三台虚拟机的防火墙和安全终端全部关掉 systemctl stop firewalld && setenforce 0 4. 给内网虚拟机和外网虚拟机 yum安装 httpd…

CityEngine2023 根据shp数据构建三维模型并导入UE5

目录 0 引言1 基本操作2 实践2.1 导入数据&#xff08;.shp&#xff09;2.2 构建三维模型2.3 将模型导入UE5 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;CityEngine专栏&#x1f4a5; 标题&#xff1a;CityEngine2023 根据shp数据构建三维模型…

麒麟操作系统进入单用户模式

Kylin V4 桌面版&#xff1a; 启动系统后&#xff0c;在启动菜单界面选择 Kylin 4.0.2 高级选项后回车。 在高级模式选项下选择第二行 recovery mode 模式后&#xff0c;按 e 编辑。 按 e 后如下图&#xff0c;找到 linux 开头的一行&#xff0c;修改 ro 为 rw 后&#xff0c…

浅聊langchain-chatchat

个人的一点经验和总结&#xff0c;希望能帮助到大家。有不对的地方请留言和指正&#xff01; langchain-GLM是什么 langchain-GLM是一个本地知识库应用解决方案&#xff0c;支持以cli、web、api方式提供以本地知识库或在线资源为知识素材的对话服务&#xff0c;对中英文场景对…

ESP32-Web-Server编程- 通过文本框向 Web 提交数据

ESP32-Web-Server编程- 通过文本框向 Web 提交数据 概述 前述章节我们通过简单 HTML、AJAX、Websocket、SSE 在网页上显示数据&#xff0c;通过网页上的按钮控制 ESP32 的行为。从本节开始&#xff0c;我们将进一步了解通过网页与 ESP32 进行交互的方法。 实现更复杂的交互功…

软件工程--需求工程--学习笔记(超详细)

软件需求工程是软件开发周期的第一个阶段&#xff0c;也是关系到软件开发成败最关键阶段&#xff0c;本章讲解需求的基础知识和需求工程的关键活动。这些知识对于结构化方法、面向对象方法、面向服务方法等都是适用的 本文参考教材&#xff1a;沈备军老师的《软件工程原理》 目…

ERP软件对Oracle安全产品的支持

这里的ERP软件仅指SAP ECC和Oracle EBS。 先来看Oracle EBS&#xff1a; EBS的认证查询方式&#xff0c;和数据库认证是一样的。这个体验到时不错。 结果中和安全相关的有&#xff1a; Oracle Database VaultTransparent Data Encryption TDE被支持很容易理解&#xff0c;…