基于Liquid State Machine的时间序列预测:利用储备池计算实现高效建模

dffaa67b09cadf93660419ad94630ec4.png

来源:Deephub Imba
本文约2400字,建议阅读5分钟本文提介绍了受大脑自然信息处理过程启发而提出的一种脉冲神经网络。

Liquid State Machine (LSM) 是一种 脉冲神经网络 (Spiking Neural Network, SNN) ,在计算神经科学和机器学习领域中得到广泛应用,特别适用于处理时变或动态数据。它是受大脑自然信息处理过程启发而提出的一种脉冲神经网络。

设想你正处于一片平静的湖面,四周环绕着高山,你向水中投入一块石头。涟漪开始形成,向四周扩散。此时,在附近再投入一块石头。第二块石头产生的涟漪与第一块s石头产生的涟漪相互交叠,在水面上形成复杂多变的图案。这种图案并非随机产生;它包含了每块石头落水的位置、时间、大小,甚至每次撞击释放的能量等信息。

利用这种涟漪效应来理解和解决问题。在某种程度上,这就是 Liquid State Machines (LSMs) 的工作原理。

由于其处理时间信息的独特方法和特殊的网络结构,Liquid State Machine (LSM) 模型与传统神经网络存在显著差异。

2bc625ad03575c2b3e6b058c809943f8.jpeg

LSM简介

标准神经网络,如前馈网络,本身并不处理时间信息。循环神经网络(Recurrent Neural Network, RNN),如长短期记忆网络(Long Short-Term Memory, LSTM),通过反馈回路捕获序列信息,但需要对每一步进行显式训练。相比之下,LSM使用随机连接的神经元储备池("液体")将输入数据转化为高维动态状态。储备池的设计目的是随时间"回响"输入信号,被动捕捉时间模式而无需直接训练。这种结构以稀疏、高效的方式捕获输入数据的时间依赖性。

传统模型如RNN、LSTM和GRU(Gated Recurrent Unit)依赖于通过时间的反向传播(Backpropagation Through Time, BPTT)算法进行训练,这可能 计算量很大 ,而且经常出现梯度消失和梯度爆炸等问题。在LSM中,只对读出层进行训练,通常使用线性回归模型(例如岭回归),而储备池保持固定不变。这种方法 降低了计算负荷 ,简化了训练过程,因为只需要优化输出层的参数。

尽管RNN和LSTM可以对 时间模式 进行建模,但除非经过明确调优和多次迭代训练,否则这些模型在处理高度混沌或非线性系统时表现欠佳。得益于储备池的随机连接和丰富的非线性内部动力学,LSM可以有效处理 高度复杂和混沌的数据 。这种结构特别有利于需要对时间输入的微小变化保持敏感的任务,例如语音识别或混沌时间序列预测。

RNN主要用于顺序预测任务,而LSM则可以同时执行分类和预测任务。

代码实现

我们将使用Python构建一个时间序列数据的预测模型。

安装必要的库

 
 
!pip install reservoirpy matplotlib numpy

导入库并加载数据集

import numpy as np  
 import matplotlib.pyplot as plt  
 from reservoirpy.nodes import Reservoir, Ridge  
 from reservoirpy.datasets import mackey_glass  
   
 # 加载Mackey-Glass数据集
 data = mackey_glass(n_timesteps=1000, tau=17)  
   
 # 可视化时间序列数据
 plt.plot(data)  
 plt.title("Mackey-Glass Timeseries Data")  
 plt.xlabel("Time Step")  
 plt.ylabel("Value")  
 plt.show()

ed8ba2b4d095e6d45f06a04d78c271e6.jpeg

Mackey-Glass数据集 是一个在非线性系统建模和预测研究中经常使用的混沌时间序列。它模拟了一个生理反馈回路,根据延迟参数的不同可以表现出混沌特性。这使得它成为评估需要捕获复杂时间依赖性模型的理想数据集。

数据预处理

# 对数据进行归一化处理
 data = (data - np.mean(data)) / np.std(data)
划分训练集和测试集
 # 将数据集划分为训练集和测试集
 split_ratio = 0.8  
 split_idx = int(split_ratio * len(data))  
 train_data, test_data = data[:split_idx], data[split_idx:]
 定义储备池参数
 # 构建并配置Liquid State Machine(储备池)
 reservoir_size = 500 # 储备池中的神经元数量

LSM模型由一个储备层和一个读出层组成。储备池 在高维空间中捕获时间动力学信息,读出层 对这些动力学信息进行回归。

 
 
# 创建储备池和读出层
    reservoir = Reservoir(units=reservoir_size, lr=0.1, input_scaling=0.5, sr=0.9) # 将'spectral_radius'参数简写为'sr'
    readout = Ridge(ridge=1e-6)

通过将数据输入到储备池神经元,可以生成高维状态,捕获输入数据的时间依赖性。线性回归读出层(Ridge)将储备池状态映射到下一个时间步的值。

现在,创建完整的LSM模型。

 
 
# 连接各层,构建LSM模型
    model = reservoir >> readout

使用训练数据的储备池状态训练模型,目标是预测下一个时间步的值。

 
 
# 调整数据形状以适应训练
 X_train = train_data[:-1].reshape(-1, 1) # 输入数据
 y_train = train_data[1:] # 目标数据(下一个时间步的值)
   
 # 训练模型
 model = model.fit(X_train, y_train, warmup=100)

使用训练好的模型对测试集进行预测,并将预测结果与真实值进行对比。

 
 
# 生成预测结果
 X_test = test_data[:-1].reshape(-1, 1)  
 y_test = test_data[1:]  
 predictions = model.run(X_test)
 #绘制预测结果与真实测试数据的对比图
 plt.figure(figsize=(12, 6))
 plt.plot(y_test, label="Actual", color='b')
 plt.plot(predictions, label="Predicted", color='r')
 plt.title("Mackey-Glass Prediction with Liquid State Machine")
 plt.xlabel("Time Step")
 plt.ylabel("Value")
 plt.legend()
 plt.show()

5c7b2977417849f55f632d655d5f8d5f.jpeg

通过观察储备池神经元的激活情况,可以深入了解储备池如何将时间序列输入转化为高维状态。

 
 
# 通过观察部分神经元的激活情况来分析储备池动力学
    plt.figure(figsize=(10, 6))  
    states = reservoir.run(X_train)  
    for i in range(5): # 绘制前5个神经元的激活情况
        plt.plot(states[:, i], label=f"Neuron {i+1}")  
    plt.title("Reservoir Neuron Activations (Subset)")  
    plt.xlabel("Time Step")  
    plt.ylabel("Activation")  
    plt.legend()  
    plt.show()

18db580585b414d17853ef25c4f95a9b.jpeg

LSM最初的设计灵感来自脉冲神经元,它对于需要实时处理和高时间精度的任务非常有效。在计算效率和训练复杂度要求较高的场景下,LSM也是一种强大的技术选择。

总结

这篇文章介绍了一种基于Liquid State Machine (LSM)模型的时间序列预测方法。LSM是一种脉冲神经网络,特别适用于处理时变或动态数据。与传统的神经网络模型相比,LSM通过随机连接的储备池捕获时间依赖性,并且只需训练读出层,大大降低了计算负荷。文章详细阐述了LSM的工作原理,并使用Python和ReservoirPy库实现了一个完整的时间序列预测案例。以Mackey-Glass数据集为例,展示了数据预处理、模型构建、训练和预测的完整流程。同时,通过可视化储备池神经元的激活情况,直观地展现了LSM将时间序列转化为高维状态的过程。文章表明,LSM模型在处理复杂时间序列和实时预测任务方面具有显著优势,为时间序列预测提供了一种高效、可扩展的新思路。

编辑:王菁

关于我们

数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。

7600f83924aa42aa21f9348cf3510291.png

新浪微博:@数据派THU

微信视频号:数据派THU

今日头条:数据派THU

基于gcc的stm32环境搭建源码+文档说明.zip,个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的
内容概要:本文档是2017年全国大学生电子设计竞赛的试题,针对单相用电器分析监测装置的设计与制作提出了具体任务和要求。该装置需具备学习和分析监测两种模式,在学习模式下测试并存储电器特征参量,在分析监测模式下实时指示用电器类别和工作状态。基本要求包括电器电流范围、可识别的电器工作状态数、响应时间、最小电流电器的自制等。发挥部分则鼓励提高装置性能,如学习功能优化、增强识别能力、低功耗设计以及无线传输等功能。文档还详细规定了参赛注意事项,如参赛队伍组成、比赛时间安排、纪律要求等,并给出了评分标准,涵盖设计报告、基本要求完成情况及发挥部分的表现; 适合人群:参加全国大学生电子设计竞赛的本科生及高职高专学生,特别是对电子设计、单相用电器监测感兴趣的团队; 使用场景及目标:①作为竞赛指南,帮助参赛队伍明确设计目标和要求;②指导参赛队伍进行单相用电器分析监测装置的设计与制作,确保满足竞赛的基本要求和发挥部分的要求; 其他说明:文档强调了参赛纪律,要求参赛者必须是有正式学籍的全日制在校生,并且在竞赛期间只能在学校指定场地内进行设计制作,不得与他人交流。此外,文档还提供了详细的评分标准,以确保评审过程的公平性和透明度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值