【算法】灰狼算法GWO优化支持向量机回归SVR模型

这篇具有很好参考价值的文章主要介绍了【算法】灰狼算法GWO优化支持向量机回归SVR模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


灰狼算法GWO

GWO是一种基于灰狼行为的优化算法,由Mirjalili等人于2014年提出。该算法模拟灰狼群的捕猎行为,通过模拟狼群中的Alpha、Beta、Delta三种角色的行为来实现全局优化,具有收敛速度快、精度高、易于实现等特点。

GWO算法的基本流程

  1. 初始化狼群位置和适应度函数。
  2. 计算每个狼的适应度,并记录Alpha、Beta、Delta狼的位置。
  3. 根据Alpha、Beta、Delta狼的位置更新狼群位置。
  4. 重复步骤2和3,直到达到预设的停止条件。

在更新狼群位置时,GWO算法采用了三种不同的策略:

  1. 狼群中的Alpha狼对其他狼施加影响,使它们朝向Alpha狼的位置移动。
  2. 狼群中的Beta狼对其他狼施加影响,使它们朝向Beta狼的位置移动。
  3. 狼群中的Delta狼对其他狼施加影响,使它们朝向Delta狼的位置移动。

通过这些策略,GWO算法能够在搜索空间中快速地找到全局最优解。

优点

  1. 相对简单
    灰狼算法的原理比较简单,易于理解和实现。
  2. 全局搜索能力强
    灰狼算法在全局搜索中表现较好,能够有效地探索搜索空间,找到全局最优解。
  3. 收敛速度快
    灰狼算法能够快速收敛到最优解,具有较高的收敛速度

缺点

  1. 参数设置困难
    灰狼算法的性能受到参数设置的影响较大,不同的问题可能需要不同的参数设置,参数设置困难。
  2. 对问题的依赖性较强
    灰狼算法对问题的依赖性较强,对于复杂的多模态问题或非线性问题,可能无法取得很好的效果。
  3. 可能陷入局部最优
    灰狼算法在局部搜索能力上相对较弱,可能会陷入局部最优解而无法达到全局最优解。

总得来说,GWO算法是一种高效的全局优化算法,可以应用于多种优化问题中。

实例模型,6输入1输出

在本次实例模型中,数据集采用6输入1输出。针对其他的输入特征值数量,该模型依旧适用

数据集导入

X_train = np.array([[1, 2,3,4,5,6], [2, 4 ,3,4,5,6], [3, 6 ,7,8,9,10], [4, 8,11,12,3,1], [5, 10,2,3,2,3]])
y_train = np.array([3, 6, 9, 12, 15])
  • 该部分数据集导入的方法各异,可以采用excel、mat等各种形式。
  • 本示例模型中训练集和测试集没有进行划分,采用同一组数据集,如有需要,可以进行自定义添加。

定义适应度函数

def fitness_func(position):
    #防止valueError
    if position[1]<=0:
        position[1] =0.0001
    if position[0]<=0:
        position[0] = 0.0001
    svm.set_params(C=position[0], gamma=position[1])
    svm.fit(X_train, y_train)
    y_pred = svm.predict(X_train)
    mse = np.mean((y_train - y_pred) ** 2)
    fitness = 1 / (mse + 1e-6)
    return fitness

GWO优化

gwo = GWO(fitness_func, 2, lb=[0.1, 0.01], ub=[100, 10], N=N, Max_iter=Max_iter)
gwo.optimize()

GWO类在完整模型代码中有提供,已经封装完成文章来源地址https://www.toymoban.com/news/detail-421788.html

训练最佳SVR模型

svm.set_params(C=gwo.best_pos[0], gamma=gwo.best_pos[1])
svm.fit(X_train, y_train)
y_pred = svm.predict(X_train)
mse = np.mean((y_train - y_pred) ** 2)
  • 此时的超参数Cgamma已经为训练好的数值

完整模型代码

demo.py

import numpy as np
from sklearn.svm import SVR
from gwo import GWO

# 训练数据
X_train = np.array([[1, 2,3,4,5,6], [2, 4 ,3,4,5,6], [3, 6 ,7,8,9,10], [4, 8,11,12,3,1], [5, 10,2,3,2,3]])
y_train = np.array([3, 6, 9, 12, 15])

# GWO参数
N = 5  # 狼群数量
Max_iter = 100  # 最大迭代次数

# 定义SVR模型
svm = SVR(kernel='rbf', C=1, gamma=0.1)

# 定义适应度函数
def fitness_func(position):
    #防止valueError
    if position[1]<=0:
        position[1] =0.0001
    if position[0]<=0:
        position[0] = 0.0001
    svm.set_params(C=position[0], gamma=position[1])
    svm.fit(X_train, y_train)
    y_pred = svm.predict(X_train)
    mse = np.mean((y_train - y_pred) ** 2)
    fitness = 1 / (mse + 1e-6)
    return fitness

# GWO优化
gwo = GWO(fitness_func, 2, lb=[0.1, 0.01], ub=[100, 10], N=N, Max_iter=Max_iter)
gwo.optimize()

# 训练最佳SVR模型
svm.set_params(C=gwo.best_pos[0], gamma=gwo.best_pos[1])
svm.fit(X_train, y_train)
y_pred = svm.predict(X_train)
mse = np.mean((y_train - y_pred) ** 2)

# 输出结果
print('最小均方误差:', mse)
print('最佳参数:', gwo.best_pos)

gwo.py

import numpy as np

class GWO:
    def __init__(self, fitness_func, dim, lb, ub, N, Max_iter):
        self.fitness_func = fitness_func  # 适应度函数
        self.dim = dim  # 变量维度
        self.lb = lb  # 变量下限
        self.ub = ub  # 变量上限
        self.N = N  # 狼群数量
        self.Max_iter = Max_iter  # 最大迭代次数

    def optimize(self):
        # 初始化狼群位置
        X = np.random.uniform(self.lb, self.ub, (self.N, self.dim))
        alpha_pos = np.zeros(self.dim)
        beta_pos = np.zeros(self.dim)
        delta_pos = np.zeros(self.dim)
        alpha_fit = float('-inf')
        beta_fit = float('-inf')
        delta_fit = float('-inf')

        # 迭代优化
        for t in range(self.Max_iter):
            for i in range(self.N):
                # 计算适应度
                fitness = self.fitness_func(X[i])
                if fitness > alpha_fit:
                    alpha_fit = fitness
                    alpha_pos = X[i].copy()
                elif fitness > beta_fit:
                    beta_fit = fitness
                    beta_pos = X[i].copy()
                elif fitness > delta_fit:
                    delta_fit = fitness
                    delta_pos = X[i].copy()

            # 更新狼群位置
            a = 2 - 2 * t / self.Max_iter
            for i in range(self.N):
                r1 = np.random.rand(self.dim)
                r2 = np.random.rand(self.dim)
                A = 2 * a * r1 - a
                C = 2 * r2
                D_alpha = np.abs(C * alpha_pos - X[i])
                X1 = alpha_pos - A * D_alpha
                r1 = np.random.rand(self.dim)
                r2 = np.random.rand(self.dim)
                A = 2 * a * r1 - a
                C = 2 * r2
                D_beta = np.abs(C * beta_pos - X[i])
                X2 = beta_pos - A * D_beta
                r1 = np.random.rand(self.dim)
                r2 = np.random.rand(self.dim)
                A = 2 * a * r1 - a
                C = 2 * r2
                D_delta = np.abs(C * delta_pos - X[i])
                X3 = delta_pos - A * D_delta
                X[i] = (X1 + X2 + X3) / 3

        # 记录最佳位置
        self.best_pos = alpha_pos

到了这里,关于【算法】灰狼算法GWO优化支持向量机回归SVR模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 回归拟合 | 灰狼算法优化核极限学习机(GWO-KELM)MATLAB实现

    这周有粉丝私信想让我出一期GWO-KELM的文章,因此乘着今天休息就更新了(希望不算晚) 作者在前面的文章中介绍了ELM和KELM的原理及其实现,ELM具有训练速度快、复杂度低、克服了传统梯度算法的局部极小、过拟合和学习率的选择不合适等优点,而KELM则利用了核学习的方法,用

    2024年02月09日
    浏览(34)
  • 回归预测 | MATLAB实现GWO-ELM灰狼算法优化极限学习机多输入单输出回归预测(多指标,多图)

    效果一览 基本介绍 回归预测 | MATLAB实现GWO-ELM灰狼算法优化极限学习机多输入单输出回归预测(多指标,多图),输入多个特征,输出单个变量,多输入单输出回归预测; 多指标评价,代码质量极高;excel数据,方便替换,运行环境2018及以上。 灰狼算法(Grey Wolf Optimization,

    2024年02月10日
    浏览(38)
  • 回归预测 | MATLAB实现GWO-BP灰狼算法优化BP神经网络多输入单输出回归预测(多指标,多图)

    效果一览 基本介绍 回归预测 | MATLAB实现GWO-BP灰狼算法优化BP神经网络多输入单输出回归预测(多指标,多图),输入多个特征,输出单个变量,多输入单输出回归预测;优化权值和阈值。 多指标评价,代码质量极高;excel数据,方便替换,运行环境2018及以上。 ---------------

    2024年02月12日
    浏览(35)
  • 时序预测 | Matlab实现基于SVR支持向量机回归的电力负荷预测模型

    预测结果 基本介绍 时序预测 | Matlab实现基于SVR支持向量机回归的电力负荷预测模型 支持向量机(英语:support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于

    2024年02月14日
    浏览(35)
  • Python实现GWO智能灰狼优化算法优化XGBoost分类模型(XGBClassifier算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。 灰狼优化算法(GWO),由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法。灵感来自于灰狼群体捕食行为。优点:较强的

    2023年04月13日
    浏览(45)
  • 碳排放预测模型 | Python实现基于SVR支持向量机回归的碳排放预测模型

    效果一览 文章概述 碳排放预测模型 | Python实现基于SVR支持向量机回归的碳排放预测模型 研究内容 碳排放被认为是全球变暖的最主要原因之一。 该项目旨在提供各国碳排放未来趋势的概述以及未来十年的全球趋势预测。 其方法是分析这些国家各种经济因素的历史数据,学习

    2024年02月12日
    浏览(37)
  • 多元分类预测 | Matlab 灰狼算法(GWO)优化xgboost的分类预测模型,多特征输入模型,GWO-xgboost分类预测

    效果一览 文章概述 多元分类预测 | Matlab 灰狼算法(GWO)优化xgboost的分类预测模型,多特征输入模型,GWO-xgboost分类预测 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程序可出分类效果图,迭代优化图,混淆矩阵图。

    2024年02月13日
    浏览(37)
  • 时间序列预测 | Matlab灰狼算法(GWO)优化极限梯度提升树XGBoost时间序列预测,GWO-XGBoost时间序列预测模型,单列数据输入模型

    效果一览 文章概述 时间序列预测 | Matlab灰狼算法(GWO)优化极限梯度提升树XGBoost时间序列预测,GWO-XGBoost时间序列预测模型,单列数据输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码

    2024年02月13日
    浏览(40)
  • 灰狼优化算法(GWO)

    一、背景知识 灰狼优化算法(Grey Wolf Optimizer, GWO),由澳大利亚格里菲斯大学学者Mirjalili等人于2014年提出来的一种群智能优化算法。灵感来自于灰狼群体捕食行为。GWO算法模拟了自然界中灰狼的领导等级和狩猎机制。将灰狼分为四种类型,用来模拟等级阶层。此外,还模拟了

    2024年04月14日
    浏览(33)
  • 灰狼优化(GWO)算法(含MATLAB代码)

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号: 启发式算法讨论 。 文献[1]中的灰狼优化(Grey Wolf Optimizer, GWO)算法是2014年提出的一种群智能优化算法。严格来讲,应该叫灰狼优化器。GWO简单易

    2024年02月05日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包