news 2026/3/10 19:59:10

探索沙丘猫群优化算法 - GRNN(SCSO - GRNN)的奇妙世界

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
探索沙丘猫群优化算法 - GRNN(SCSO - GRNN)的奇妙世界

基于沙丘猫群优化算法-GRNN。 (SCSO-GRNN) 效果如下,代码注释详细,可移植性强,可自行更换excel数据,跑自己模型。

在数据建模与预测的领域中,不断涌现的新算法为我们提供了更高效、准确的解决方案。今天,咱们就来唠唠基于沙丘猫群优化算法 - GRNN(SCSO - GRNN),这组合可谓是独具特色,效果那也是杠杠滴,而且代码注释详细,可移植性强,还能轻松换上自己的 excel 数据,跑起属于自己的模型。

一、沙丘猫群优化算法(SCSO)

沙丘猫,生活在沙漠中的神秘猎手,它们独特的狩猎行为给了科学家们灵感,从而诞生了沙丘猫群优化算法。该算法模拟了沙丘猫在沙漠环境中的觅食、栖息等行为。

简单来说,沙丘猫们在沙漠中寻找食物(也就是最优解),每只沙丘猫都有自己的位置(对应解空间中的一个点)和速度(移动方向和步长)。它们会根据自己的经验(自身历史最优位置)和群体的经验(全局最优位置)来调整自己的移动方向和步长。

基于沙丘猫群优化算法-GRNN。 (SCSO-GRNN) 效果如下,代码注释详细,可移植性强,可自行更换excel数据,跑自己模型。

以下是一段简化的 SCSO 算法核心代码示例(以 Python 为例):

import numpy as np # 初始化沙丘猫位置和速度 def initialize_positions(n_cats, dim, bounds): positions = np.zeros((n_cats, dim)) for i in range(n_cats): for j in range(dim): positions[i, j] = np.random.uniform(bounds[0][j], bounds[1][j]) velocities = np.zeros((n_cats, dim)) return positions, velocities # 更新沙丘猫位置和速度 def update_positions_velocities(positions, velocities, pbest_positions, gbest_position, w, c1, c2, bounds): r1 = np.random.rand(*positions.shape) r2 = np.random.rand(*positions.shape) velocities = w * velocities + c1 * r1 * (pbest_positions - positions) + c2 * r2 * (gbest_position - positions) positions = positions + velocities for i in range(positions.shape[0]): for j in range(positions.shape[1]): if positions[i, j] < bounds[0][j]: positions[i, j] = bounds[0][j] elif positions[i, j] > bounds[1][j]: positions[i, j] = bounds[1][j] return positions, velocities

代码分析

  1. initialize_positions函数:
    - 它负责初始化沙丘猫的位置和速度。这里通过np.random.uniform在给定的边界范围内随机生成每只沙丘猫的初始位置。每只沙丘猫的位置是一个在解空间维度dim上的向量。速度则初始化为全零向量,因为刚开始沙丘猫还没有移动方向和步长。
  2. updatepositionsvelocities函数:
    - 此函数用于更新沙丘猫的位置和速度。w是惯性权重,它控制着沙丘猫保留先前速度的程度,类似于一种 “惯性”。c1c2是学习因子,分别表示沙丘猫向自身历史最优位置(pbestpositions)和全局最优位置(gbestposition)学习的程度。r1r2是在 0 到 1 之间的随机数,增加了算法的随机性和搜索能力。
    - 先计算出新的速度,然后根据新速度更新位置。最后,通过边界检查,确保沙丘猫的位置始终在合法的解空间范围内。

二、广义回归神经网络(GRNN)

GRNN 是一种基于径向基函数的神经网络,它在函数逼近、时间序列预测等方面表现出色。GRNN 的结构相对简单,由输入层、模式层、求和层和输出层组成。

以下是一个简单的 GRNN 代码示例(使用 Python 的scikit - learn库中的neighbors.KernelDensity来近似实现):

from sklearn.neighbors import KernelDensity import numpy as np # 训练 GRNN def train_grnn(X, y): kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(X) return kde # 预测 def predict_grnn(kde, X_test): log_dens = kde.score_samples(X_test) y_pred = np.exp(log_dens) return y_pred

代码分析

  1. train_grnn函数:
    - 这里使用KernelDensity来训练 GRNN。选择'gaussian'核函数,带宽bandwidth设置为 0.2。带宽的选择很关键,它决定了核函数的平滑程度,对预测结果有较大影响。训练时将输入数据X传入fit方法进行模型训练。
  2. predictgrnn函数:
    - 利用训练好的kde模型对测试数据X
    test进行预测。scoresamples方法返回样本的对数似然估计,通过np.exp转换为概率密度估计值,即得到预测结果ypred

三、SCSO - GRNN 的结合

将 SCSO 和 GRNN 结合起来,就是利用 SCSO 的寻优能力来优化 GRNN 的参数(比如带宽等),从而提升 GRNN 的性能。

# SCSO - GRNN 结合 def scso_grnn(X_train, y_train, X_test, n_cats, dim, bounds, max_iter, w, c1, c2): best_bandwidth = None best_score = float('inf') positions, velocities = initialize_positions(n_cats, dim, bounds) pbest_positions = positions.copy() pbest_scores = np.array([float('inf')] * n_cats) gbest_position = None gbest_score = float('inf') for t in range(max_iter): for i in range(n_cats): bandwidth = positions[i, 0] kde = KernelDensity(kernel='gaussian', bandwidth=bandwidth).fit(X_train) log_dens = kde.score_samples(X_train) loss = -np.mean(log_dens) if loss < pbest_scores[i]: pbest_scores[i] = loss pbest_positions[i] = positions[i] if loss < gbest_score: gbest_score = loss gbest_position = positions[i] best_bandwidth = bandwidth positions, velocities = update_positions_velocities(positions, velocities, pbest_positions, gbest_position, w, c1, c2, bounds) final_kde = KernelDensity(kernel='gaussian', bandwidth=best_bandwidth).fit(X_train) y_pred = predict_grnn(final_kde, X_test) return y_pred

代码分析

  1. 首先初始化一些变量,包括最优带宽bestbandwidth、最优得分bestscore等。同时初始化沙丘猫的位置、速度、个体最优位置和得分,以及全局最优位置和得分。
  2. 在迭代过程中,每只沙丘猫对应的位置中的第一个维度值作为 GRNN 的带宽参数。根据这个带宽训练 GRNN 并计算在训练集上的损失。如果损失小于个体最优得分,则更新个体最优位置和得分;如果损失小于全局最优得分,则更新全局最优位置、得分和最优带宽。
  3. 每次迭代结束后,根据 SCSO 算法更新沙丘猫的位置和速度。
  4. 最后,利用找到的最优带宽训练最终的 GRNN 模型,并对测试数据进行预测,返回预测结果。

四、数据替换与模型运行

要使用自己的 excel 数据跑模型也很简单。假设数据格式为:第一列为自变量 1,第二列为自变量 2,最后一列为因变量。

import pandas as pd # 读取数据 data = pd.read_excel('your_data.xlsx') X = data.iloc[:, :-1].values y = data.iloc[:, -1].values # 划分训练集和测试集(简单示例,实际应用中可采用更复杂的划分方式) split = int(len(X) * 0.8) X_train, X_test = X[:split], X[split:] y_train, y_test = y[:split], y[split:] # 运行 SCSO - GRNN 模型 y_pred = scso_grnn(X_train, y_train, X_test, n_cats=10, dim=1, bounds=[[0.1], [1.0]], max_iter=50, w=0.7, c1=1.5, c2=1.5)

代码分析

  1. 使用pandasread_excel函数读取 excel 数据。
  2. 将数据划分为自变量X和因变量y,并简单地按照 80% 和 20% 的比例划分训练集和测试集。实际应用中,可以使用更科学的交叉验证等方式进行划分。
  3. 调用scsogrnn函数,传入训练集、测试集数据以及 SCSO 算法的相关参数,运行模型并得到预测结果ypred

基于沙丘猫群优化算法 - GRNN(SCSO - GRNN)为我们在数据建模和预测任务中提供了一种强大的工具。通过灵活运用它,相信能在不少实际项目中取得优异的成果。希望大家都能尝试跑一跑自己的数据,挖掘出数据背后更多的价值!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/4 4:45:55

端云一体 一天开发的元服务-奇趣故事匣经验分享

端云一体 一天重新开发的元服务-奇趣故事匣经验分享 ​ 万少&#xff1a;华为HDE、鸿蒙极客 个人主页&#xff1a;https://blog.zbztb.cn/ 2025年参与孵化了20鸿蒙应用、技术文章300、鸿蒙知识库用户500、鸿蒙免费课程2套。 如果你也喜欢交流AI和鸿蒙技术&#xff0c;欢迎扣我。…

作者头像 李华
网站建设 2026/3/4 4:45:46

MySQL死锁问题分析与解决:从日志解读到根治方案

前言 死锁是MySQL并发场景下的“隐形杀手”&#xff0c;轻则导致个别事务失败&#xff0c;重则引发系统雪崩。本文将从死锁监控、日志解读、原因分析、解决方案四个维度&#xff0c;提供一套完整的死锁处理流程&#xff0c;助你快速定位并彻底解决死锁问题。 一、死锁现场&…

作者头像 李华
网站建设 2026/3/9 21:43:13

DeepSeek是如何思考的?一文读懂大模型的工作原理

DeepSeek&#xff08;以及所有类似的大模型&#xff09;在回答你的问题时&#xff0c;并不是像搜索引擎那样去“调取”或“查询”一个后台数据库。 它不会去翻阅它训练时看过的资料&#xff0c;然后找出一段话复制给你。它的工作方式要更加神奇和复杂。 一、DeepSeek是如何“回…

作者头像 李华
网站建设 2026/3/8 7:23:39

从自测到部署:DMXAPI如何为AI编程提供全方位的技术保障?

前言&#xff1a;AI编程的“死亡之谷”与技术护城河2026年&#xff0c;全球AI应用开发成功率出现了一个令人深思的数据&#xff1a;从概念验证到生产部署&#xff0c;仅有18%的AI项目能够成功跨越这个“死亡之谷”。那些失败的82%&#xff0c;并非因为创意不足或技术不先进&…

作者头像 李华
网站建设 2026/3/5 5:56:34

Linux 内存映射与显存操作深度解析

Linux 内存映射与显存操作深度解析 一、内存映射基础概念 1. 什么是内存映射&#xff1f; 内存映射&#xff08;Memory Mapping&#xff09;是一种将文件或设备直接映射到进程地址空间的技术&#xff0c;使得应用程序可以像访问内存一样访问文件或设备。通过 mmap() 系统调用&a…

作者头像 李华
网站建设 2026/3/10 2:43:12

柑橘叶片病害数据集(5类)

该数据集包含健康的柑橘叶和4类柑橘叶病Citrus_Canker_Diseases_Leaf_Orange&#xff1a;拥有11248张照片Citrus_Nutrient_Deficiency_Yellow_Leaf_Orange&#xff1a;拥有12800张照片Healthy_Leaf_Orange&#xff1a;6384张照片Multiple_Diseases_Leaf_Orange:4800张照片Young…

作者头像 李华