【Python时序预测系列】灰狼算法(GWO)优化LSTM实现单变量时间序列预测(案例+源码)

这是我的第279篇原创文章。

一、引言

       灰狼算法(GWO)是一种新型的优化算法,灵感来源于灰狼群体中的社会行为。在灰狼算法中,每只灰狼都有自己的位置和适应度值,通过模拟灰狼群体的行为来搜索最优解。将灰狼算法应用于优化LSTM网络的参数,可以帮助网络更快地收敛到最佳解。具体来说,我们可以将LSTM网络的参数作为灰狼的位置,将网络的性能作为适应度值,然后使用灰狼算法来搜索最优的参数组合。通过这种方式,我们可以提高LSTM网络的性能,加快模型训练的速度,并且更容易避免陷入局部最优解。下面是一个简单的步骤示例,演示如何使用GWO来优化LSTM的超参数。

二、实现过程

2.1 读取数据集

# 读取数据集
data = pd.read_csv('data.csv')
# 将日期列转换为日期时间类型
data['Month'] = pd.to_datetime(data['Month'])
# 将日期列设置为索引
data.set_index('Month', inplace=True)

data:

图片

2.2 划分数据集

# 拆分数据集为训练集和测试集
train_size = int(len(data) * 0.8)
train_data = data[:train_size]
test_data = data[train_size:]# 绘制训练集和测试集的折线图
plt.figure(figsize=(10, 6))
plt.plot(train_data, label='Training Data')
plt.plot(test_data, label='Testing Data')
plt.xlabel('Year')
plt.ylabel('Passenger Count')
plt.title('International Airline Passengers - Training and Testing Data')
plt.legend()
plt.show()

共144条数据,8:2划分:训练集115,测试集29。

训练集和测试集:

图片

2.3 归一化

# 将数据归一化到 0~1 范围
scaler = MinMaxScaler()
train_data_scaler = scaler.fit_transform(train_data.values.reshape(-1, 1))
test_data_scaler = scaler.transform(test_data.values.reshape(-1, 1))

2.4 构造数据集

# 定义滑动窗口函数
def create_sliding_windows(data, window_size):X, Y = [], []for i in range(len(data) - window_size):X.append(data[i:i + window_size, 0:data.shape[1]])Y.append(data[i + window_size, 0])return np.array(X), np.array(Y)# 定义滑动窗口大小
window_size = 1
# 创建滑动窗口数据集
X_train, Y_train = create_sliding_windows(train_data_scaler, window_size)
X_test, Y_test = create_sliding_windows(test_data_scaler, window_size)
# 将数据集转换为 LSTM 模型所需的形状(样本数,时间步长,特征数)
X_train = np.reshape(X_train, (X_train.shape[0], window_size, 1))
X_test = np.reshape(X_test, (X_test.shape[0], window_size, 1))

2.5 建立模型进行预测

ub = [51, 6, 0.055, 9]
lb = [50, 5, 0.05, 8]# 开始优化===========主程序================
Max_iter = 3  # 迭代次数
dim = 4  # 狼的寻值范围
SearchAgents_no = 5  # 寻值的狼的数量
Alpha_pos, Alpha_score = GWO(training, lb, ub, dim, SearchAgents_no, Max_iter)print('best_params is ', Alpha_pos)
print('best_precision is', Alpha_score)# 训练模型  使用GWO找到的最好的神经元个数
neurons1 = int(Alpha_pos[0])
neurons2 = int(Alpha_pos[1])
dropout = Alpha_pos[2]
batch_size = int(Alpha_pos[3])model = build_model(X_train, neurons1, neurons2, dropout)
history1 = model.fit(X_train, y_train, epochs=150, batch_size=batch_size, validation_split=0.2, verbose=1,callbacks=[EarlyStopping(monitor='val_loss', patience=9, restore_best_weights=True)])# 使用 LSTM 模型进行预测
train_predictions = model.predict(X_train)
test_predictions = model.predict(X_test)

best_params:

图片

test_predictions:

图片

2.6 预测效果展示

# 绘制测试集预测结果的折线图
plt.figure(figsize=(10, 6))
plt.plot(test_data, label='Actual')
plt.plot(list(test_data.index)[-len(test_predictions):], test_predictions, label='Predicted')
plt.xlabel('Month')
plt.ylabel('Passengers')
plt.title('Actual vs Predicted')
plt.legend()
plt.show()

测试集真实值与预测值:

图片

# 绘制原始数据、训练集预测结果和测试集预测结果的折线图
plt.figure(figsize=(10, 6))
plt.plot(data, label='Actual')
plt.plot(list(train_data.index)[look_back:train_size], train_predictions, label='Training Predictions')
plt.plot(list(test_data.index)[-(len(test_data)-look_back):], test_predictions, label='Testing Predictions')
plt.xlabel('Year')
plt.ylabel('Passenger Count')
plt.title('International Airline Passengers - Actual vs Predicted')
plt.legend()
plt.show()

原始数据、训练集预测结果和测试集预测结果:

图片

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx内网环境开启https

文章目录 前言一、open-ssl1. 验证2. 安装3.生成ssl证书 一、nginx1. 验证支持模块2. 安装必要模块2.1 重新编译nginx2.2 替换原文件 3. 配置https 总结 前言 nginx开启https前提: 服务器支持open-sslnginx 包含--with-http_ssl_module --with-stream --with-stre…

【漏洞复现】泛微OA E-Cology ResourceServlet文件读取漏洞

漏洞描述: 泛微OA E-Cology是一款面向中大型组织的数字化办公产品,它基于全新的设计理念和管理思想,旨在为中大型组织创建一个全新的高效协同办公环境。泛微OA E-Cology ResourceServlet存在任意文件读取漏洞,允许未经授权的用户…

Android手机恢复软件——如何从Android手机内存中恢复已删除或丢失的文件?

大多数 Android 手机的内存上都有数据。通常,我们会在手机上存储大量私人和重要数据,例如联系人,图片,音乐,便笺等。有时我们不小心删除了这些项目,我们需要想办法恢复它。那么,您是否有任何可靠…

【专利】一种日志快速分析方法、设备、存储介质

公开号CN116560938A申请号CN202310311478.5申请日2023.03.28 是我在超音速人工智能科技股份有限公司(833753) 职务作品,第一发明人是董事长夫妇,第二发明人是我。 ** 注意** : 内容比较多,还有流程图、界面等。请到 专利指定页面…

实现 Flask 应用的 HTTPS 加密保护

文章目录 1. 获得免费的 SSL 证书步骤: 2. 配置 Flask 应用3. 测试和部署结论结论 在今天的网络环境中,保护网站和用户数据的安全至关重要。通过在 Flask 应用中启用 HTTPS 加密,您可以确保用户的数据在传输过程中得到保护。本文将介绍如何结…

数字化转型:超越信息化,构建数字化营销体系!

在数字化的浪潮中,企业仅仅做好信息化数字能力基础已远远不够!那么,还需要什么呢?没错,就是在数字化经营思维的指导下,建立起数字化营销体系和执行方案!这是企业在数字时代中立于不败之地的关键…

Linux 第二十九章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

HCIP的学习(16)

BGP的状态机 ​ OSPF的状态机是在描述整个协议的完整工作过程,而BGP的状态机仅描述的是对等体关系建立过程中的状态变化。-----因为BGP将邻居建立过程以及BGP路由收发过程完全隔离。 ​ IGP协议在启动后,需要通过network命令激活接口,从而使…

使用PageHelper分页插件,发现获取到的total总记录数量不对,无法获取到正确的total数量

目录 1.1、错误描述 1.2、解决方案 1.1、错误描述 周一在工作中,写了一个列表分页的接口,其中使用的是PageHelper分页依赖,原本想着挺简单的,也就是使用PageHelper.startPage(pageNum, pageSize);方法就可以了,代码…

适用于 Windows 8/10/11 的 10 大 PC 迁移工具:电脑克隆迁移软件

当您发现自己拥有一台新的 PC 或笔记本电脑时,PC 迁移变得至关重要。将数据从旧计算机传输到新计算机的过程似乎令人生畏,尤其是如果您是第一次这样做。迁移过程中数据丢失的潜在风险加剧了焦虑。为确保文件和系统设置的无缝无忧传输,使用专为…

ARM架构安全特性之通用平台安全服务

安全之安全(security)博客目录导读 目录 一、符合PSA认证标准 二、Arm平台安全规范 三、跨安全边界通信 四、FF-A 五、FF-M 六、开放和标准设备固件 七、Trustedfirmware.org 在一个需要高度信任设备的世界中,每个设备都必须是独一无二的可识别的、不可克隆…

leetcode-151 翻转字符串里的单词

一、题目描述 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 输入:s "the sky is blue" 输出:"blue is sky the"输入&#…