基于遗传算法优化的lssvm回归预测matlab代码

news2024/11/27 2:25:35

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

本文提出一种基于最小二乘支持向量机的数据预测方法。LSSVM 是一种新型机器学习算法,其在传统支持向量机 SVM 基础上,将二次规划问题中的不等式约束改为等式约束,极大地方便了求解过程,克服了数据集粗糙、数据集波动性大等问题造成的异常回归,能有效避免 BP 神经网络等方法中出现的局部最优等问题。GA 算法是由美国密歇根大学的 Holland 于 1975 年提出的一种模拟生物进化论的自然选择和生物遗传的优化技术,是一种高度并行、自适应和全局性的概率搜索算法。GA 求解问题的核心过程包括: 编码( 二进制) 、遗传操作( 选择、交叉、变异) 、适应度函数。首先对优化参数进行二进制编码,将解空间转换成染色体空间; 设定进化代数、个体长度、种群大小等初始群体参数; 确定合适的适应度函数,计算群体中个体的适应度; 然后对种群进行遗传算子操作,如选择、交叉和变异,经过迭代计算,使种群不断向最优方向进化,从 而 得 到 最 优解。由于 LSSVM 模型需要优化的参数有两个( 惩罚因子 γ,核参数 σ2) ,所以种群维数为 2。

算法流程如下:

步骤1,采集时间序列的样本数据;

步骤2,建立基于遗传算法优化参数的LSSVM数据预测模型;

步骤3,应用预测模型对训练样本进行预测,得到训练样本的相对误差和预测值;步骤4,预测模型对训练样本的相对误差进行预测,从而得到相对误差的预测值;步骤5,对相对误差的预测值进行校正,从而得到预测速率;解决了由于最小二乘支持向量机核函数参数和惩罚参数的经验性赋值而导致的预测精度不足的问题.

⛄ 部分代码

function [A,B,C,D,E] = bay_lssvm(model,level,type, nb, bay)

% Compute the posterior cost for the 3 levels in Bayesian inference

% >> cost = bay_lssvm({X,Y,type,gam,sig2}, level, type)

% >> cost = bay_lssvm(model              , level, type)

% Description

% Estimate the posterior probabilities of model (hyper-) parameters

% on the different inference levels:

%     - First level: In the first level one optimizes the support values alpha 's and the bias b.

%     - Second level: In the second level one optimizes the regularization parameter gam.

%     - Third level: In the third level one optimizes the kernel

%                    parameter. In the case of the common 'RBF_kernel' the kernel

%                    parameter is the bandwidth sig2. 

%

% By taking the negative logarithm of the posterior and neglecting all constants, one

% obtains the corresponding cost. Computation is only feasible for

% one dimensional output regression and binary classification

% problems. Each level has its different in- and output syntax.

%

% Full syntax

%     1. Outputs on the first level

%

% >> [costL1,Ed,Ew,bay] = bay_lssvm({X,Y,type,gam,sig2,kernel,preprocess}, 1)

% >> [costL1,Ed,Ew,bay] = bay_lssvm(model, 1)

%       costL1 : Cost proportional to the posterior

%       Ed(*)  : Cost of the fitting error term

%       Ew(*)  : Cost of the regularization parameter

%       bay(*) : Object oriented representation of the results of the Bayesian inference

%     2. Outputs on the second level

% >> [costL2,DcostL2, optimal_cost, bay] = bay_lssvm({X,Y,type,gam,sig2,kernel,preprocess}, 2)

% >> [costL2,DcostL2, optimal_cost, bay] = bay_lssvm(model, 2)

%       costL2     : Cost proportional to the posterior on the second level

%       DcostL2(*) : Derivative of the cost

%       optimal_cost(*) : Optimality of the regularization parameter (optimal = 0)

%       bay(*)     : Object oriented representation of the results of the Bayesian inference

%     3. Outputs on the third level

% >> [costL3,bay] = bay_lssvm({X,Y,type,gam,sig2,kernel,preprocess}, 3)

% >> [costL3,bay] = bay_lssvm(model, 3)

%       costL3 : Cost proportional to the posterior on the third level

%       bay(*) : Object oriented representation of the results of the Bayesian inference

%     4. Inputs using the functional interface

% >> bay_lssvm({X,Y,type,gam,sig2,kernel,preprocess}, level)

% >> bay_lssvm({X,Y,type,gam,sig2,kernel,preprocess}, level, type)

% >> bay_lssvm({X,Y,type,gam,sig2,kernel,preprocess}, level, type, nb)

%         X            : N x d matrix with the inputs of the training data

%         Y            : N x 1 vector with the outputs of the training data

%         type         : 'function estimation' ('f') or 'classifier' ('c')

%         gam          : Regularization parameter

%         sig2         : Kernel parameter (bandwidth in the case of the 'RBF_kernel')

%         kernel(*)    : Kernel type (by default 'RBF_kernel')

%         preprocess(*) : 'preprocess'(*) or 'original'

%         level        : 1, 2, 3

%         type(*)      : 'svd'(*), 'eig', 'eigs', 'eign'

% initiate and ev. preprocess

%

if ~isstruct(model), model = initlssvm(model{:}); end

model = prelssvm(model);

if model.y_dim>1,

  error(['Bayesian framework restricted to 1 dimensional regression' ...

 ' and binary classification tasks']);

end

%

% train with the matlab routines

%model = adaptlssvm(model,'implementation','MATLAB');

eval('nb;','nb=ceil(sqrt(model.nb_data));');

if ~(level==1 | level==2 | level==3),

  error('level must be 1, 2 or 3.');

end

%

% delegate functions

%

if level==1,

  eval('type;','type=''train'';');

  %[cost, ED, EW, bay, model] = lssvm_bayL1(model, type);

  eval('[A,B,C,D,E] = lssvm_bayL1(model,type,nb,bay);','[A,B,C,D,E] = lssvm_bayL1(model,type,nb);');

  

elseif level==2,  

  % default type

  eval('type;','type=''svd'';');

  %[costL2, DcostL2, optimal, bay, model] = lssvm_bayL2(model, type);

  

  eval('[A,B,C,D,E] = lssvm_bayL2(model,type,nb,bay);',...

       '[A,B,C,D,E] = lssvm_bayL2(model,type,nb);')

elseif level==3,

  % default type

  eval('type;','type=''svd'';');

  %[cost, bay, model] = lssvm_bayL3(model, bay);

  [A,B,C] = lssvm_bayL3(model,type,nb);

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%  FIRST LEVEL                   %

%                                %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%

function [cost, Ed, Ew, bay, model] = lssvm_bayL1(model, type, nb, bay)

%

% [Ed, Ew, cost,model] = lssvm_bayL1(model)

% [bay,model] = lssvm_bayL1(model)

%

% type = 'retrain', 'train', 'svd'

if ~(strcmpi(type,'train') | strcmpi(type,'retrain') | strcmpi(type,'eig') | strcmpi(type,'eigs')| strcmpi(type,'svd')| strcmpi(type,'eign')),

  error('type should be ''train'', ''retrain'', ''svd'', ''eigs'' or ''eign''.');

end

%type(1)=='t'

%type(1)=='n'

N = model.nb_data;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% compute Ed, Ew en costL1 based on training solution %

% TvG, Financial Timeseries Prediction using LS-SVM, 27-28 %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

if (type(1)=='t'), % train 

  % find solution of ls-svm

  model = trainlssvm(model);

  % prior %

  if model.type(1) == 'f',

    Ew = .5*sum(model.alpha.*  (model.ytrain(1:model.nb_data,:) - model.alpha./model.gam - model.b));

  elseif model.type(1) == 'c',

    Ew = .5*sum(model.alpha.*model.ytrain(1:model.nb_data,:).*  ...

((1-model.alpha./model.gam)./model.ytrain(1:model.nb_data,:) - model.b));

  end

  % likelihood

  Ed = .5.*sum((model.alpha./model.gam).^2);  

  % posterior

  cost = Ew+model.gam*Ed

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

% compute Ed, Ew en costL1 based on SVD or nystrom %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

else

  if nargin<4,

    [bay.eigvals, bay.scores, ~, omega_r] = kpca(model.xtrain(model.selector,1:model.x_dim), ...

                                                  model.kernel_type, model.kernel_pars, [],type,nb,'original');

    

    bay.eigvals = bay.eigvals.*(N-1);

    bay.tol = 1000*eps;

    bay.Peff = find(bay.eigvals>bay.tol);

    bay.Neff = length(bay.Peff);

    bay.eigvals = bay.eigvals(bay.Peff);

    bay.scores = bay.scores(:,bay.Peff);  

    %Zc = eye(N)-ones(model.nb_data)/model.nb_data; 

   

    %disp('rescaling the scores');

    for i=1:bay.Neff,

      bay.Rscores(:,i) = bay.scores(:,i)./sqrt(bay.scores(:,i)'*bay.eigvals(i)*bay.scores(:,i));

    end  

  end

  Y = model.ytrain(model.selector,1:model.y_dim);  

  %%% Ew %%%%

  % (TvG: 4.75 - 5.73)) 

  YTM = (Y'-mean(Y))*bay.scores;

  Ew = .5*(YTM*diag(bay.eigvals)*diag((bay.eigvals+1./model.gam).^-2))*YTM';

  %%% cost %%%

  YTM = (Y'-mean(Y));

  %if model.type(1) == 'c', % 'classification'  (TvG: 5.74)

  %  cost = .5*YTM*[diag(bay.eigvals); zeros(model.nb_data-bay.Neff,bay.Neff)]*diag((bay.eigvals+1./model.gam).^-1)*bay.scores'*YTM';

  %elseif model.type(1) == 'f', % 'function estimation' % (TvG: 4.76)  

       % + correctie of zero eignwaardes

    cost = .5*(YTM*model.gam*YTM')-.5*YTM*bay.scores*diag((1+1./(model.gam.*bay.eigvals)).^-1*model.gam)*bay.scores'*YTM';   

  %end

  

  %%% Ed %%%

  Ed = (cost-Ew)/model.gam;

end

bay.costL1 = cost;

bay.Ew = Ew;

bay.Ed = Ed;

bay.mu = (N-1)/(2*bay.costL1);

bay.zeta = model.gam*bay.mu;

  

% SECOND LEVEL

%

%

function [costL2, DcostL2, optimal, bay, model] = lssvm_bayL2(model,type,nb,bay)

%

%

%

if ~(strcmpi(type,'eig') | strcmpi(type,'eigs')| strcmpi(type,'svd')| strcmpi(type,'eign')),

  error('The used type needs to be ''svd'', ''eigs''  or ''eign''.')

end

  N = model.nb_data;

  % bayesian interference level 1

  

  eval('[cost, Ed, Ew, bay, model] = bay_lssvm(model,1,type,nb,bay); ',...

       '[cost, Ed, Ew, bay, model] = bay_lssvm(model,1,type,nb);');  

  

  all_eigvals = zeros(N,1); all_eigvals(bay.Peff) = bay.eigvals; 

  % Number of effective parameters

  bay.Geff = 1 + sum(model.gam.*all_eigvals ./(1+model.gam.*all_eigvals));

  bay.mu = .5*(bay.Geff-1)/(bay.Ew);

  bay.zeta = .5*(N-bay.Geff)/bay.Ed;

  % ideally: bay.zeta = model.gam*bay.mu;

  

  % log posterior (TvG: 4.73 - 5.71)

  costL2 = sum(log(all_eigvals+1./model.gam)) + (N-1).*log(bay.Ew+model.gam*bay.Ed);

  % gradient (TvG: 4.74 - 5.72)   

  DcostL2 = -sum(1./(all_eigvals.*(model.gam.^2)+model.gam)) ...

    + (N-1)*(bay.Ed/(bay.Ew+model.gam*bay.Ed));

  % endcondition fullfilled if optimal == 0;

  optimal = model.gam  - (N-bay.Geff)/(bay.Geff-1) * bay.Ew/bay.Ed;        

   

  % update structure bay

  bay.optimal = optimal;

  bay.costL2 = costL2;

  bay.DcostL2 = DcostL2;

  

  

  

% THIRD LEVEL

%

%

function [costL3, bay, model] = lssvm_bayL3(model,type,nb)

%

% costL3 = lssvm_bayL3(model, type)

if ~(strcmpi(type,'svd') | strcmpi(type,'eigs') | strcmpi(type,'eign')), 

  error('The used type needs to be ''svd'', ''eigs'' or ''eign''.')

end

% lower inference levels;

[model,~, bay] = bay_optimize(model,2,type,nb);

% test Neff << N

N = model.nb_data;

if sqrt(N)>bay.Neff,

  %model.kernel_pars

  %model.gam

  warning on;

  warning(['Number of degrees of freedom not tiny with respect to' ...

   ' the number of datapoints. The approximation is not very good.']);

  warning off

end

% construct all eigenvalues

all_eigvals = zeros(N,1); 

all_eigvals(bay.Peff) = bay.eigvals; 

% L3 cost function

%costL3 = sqrt(bay.mu^bay.Neff*bay.zeta^(N-1)./((bay.Geff-1)*(N-bay.Geff)*prod(bay.mu+bay.zeta.*all_eigvals)));

%costL3 = .5*bay.costL2 - log(sqrt(2/(bay.Geff-1))) - log(sqrt(2/(N-bay.Geff)))

costL3 = -(bay.Neff*log(bay.mu) + (N-1)*log(bay.zeta)...

 - log(bay.Geff-1) -log(N-bay.Geff) - sum(log(bay.mu+bay.zeta.*all_eigvals)));

bay.costL3 = costL3;

  

⛄ 运行结果

⛄ 参考文献

[1]聂敬云, 李春青, 李威威, & 王韬. (2015). 关于遗传算法优化的最小二乘支持向量机在mbr仿真预测中的研究. 软件(5), 6.

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为云WeLink协作文档,助您开启职场高效办公

Word、PPT、Excel&#xff0c;是大家在日常工作中最常用的Office三件套&#xff0c;很多人都经历过&#xff0c;写一份Word或者PPT&#xff0c;从v1写到v10&#xff0c;不断接收、汇总、修改同事提供的素材&#xff0c;不断向领导或客户发送最新审核版本&#xff0c;最后可能还…

前端框架搭建(四)改造导入项目插件流程【vite】

1.改造为函数 默认模板创建的vite.config.ts文件是这样的 我们在上一节也提到过&#xff0c;这样将使得vite的一些配置十分杂乱&#xff0c;无法统一进行管理&#xff0c;因此我们可以将其函数化 export default defineConfig(configEnv > {const viteEnv loadEnv(config…

Python基础语法之注释、缩进、数字类型、一句多行和多行一句等的讲解及演示(超详细 附源码)

Python是实现了平台无关性的高级程序设计语言&#xff0c;它是在源代码程序与各平台的机器码之间插入了一个虚拟机&#xff0c;也就是说源代码程序不再直接翻译成机器码&#xff0c;而是先编译成虚拟机的字节码&#xff0c;再将字节码解释成各平台可执行的机器码。 Python源代…

传输层协议 —— TCP(图解2)

​ 目录 一、前言 二、重传机制 1. 超时重传 2. 快速重传 3. SACK 4. D-SACK 三、滑动窗口 1. 发送方的滑动窗口 2. 程序是如何表示发送方的四个部分 3. 接收方的滑动窗口 四、流量控制 五、拥塞控制 1. 慢启动 2. 拥塞避免 3. 拥塞发生 4. 快速恢复 六、TCP…

Moonbeam生态说|聊聊平行链Bifrost及其与Moonbeam集成最新动态

「Moonbeam生态说」是Moonbeam中文爱好者社区联合Moonbeam中文高级大使组织的社区AMA活动。 该活动为已部署Moonriver或Moonbeam的项目方提供了在主流Moonbeam非官方中文社区内介绍自己的项目信息&#xff0c;包括&#xff1a;项目介绍、团队介绍、技术优势等&#xff0c;帮助社…

[附源码]Node.js计算机毕业设计高校本科毕业及资料存档管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

基于Android的迷你桌球游戏设计与实现

目录 摘要11 关键词11 绪论11 1 游戏开发概述22 1.1 背景22 1.2 课题来源33 1.3 国内外研究现状33 1.4 Android应用程序构成44 1.4.1 应用程序55 1.4.2 应用程序框架55 1.4.3 库与运行环境55 1.4.4 内核55 2 游戏开发平台搭建55 2.1 SDK的下载与安装55 2.2 Ecli…

Chrome 解决 主页被qsearch 拦截

原文地址&#xff1a;谷歌浏览器被劫持如何解决&#xff08;附完美攻略&#xff09; - 知乎 今天&#xff0c;发现Chrome浏览器主页被修改了&#xff0c;尝试使用设置里主页&#xff0c;外观设置&#xff0c;都没有效果。改好了&#xff0c;但只要一刷新&#xff0c;主页又恢复…

短链是什么原理?怎么实现呢?

目录一、为什么需要短链二、短链跳转访问原理三、短链生成实现方案1、自增序列算法2、Hash算法四、代码示例1、表结构及索引2、外部依赖3、Base62Utils4、DAO层5、业务层五、测试用例一、为什么需要短链 内容营销中给用户推送营销消息最常见的方式就是发短信&#xff0c;比如三…

Hadoop的MapReduce基本流程体验

目录 MapReduce 编程规范 Mapper阶段 Reducer阶段 Driver阶段 常用数据序列化类型 案例实施 WordCountMapper类 WordCountReducer类 WordCountDriverr 驱动类 HDFS测试 MapReduce 编程规范 用户编写的程序分成三个部分&#xff1a;Mapper、Reducer 和 Driver。 Mappe…

使用粒子效果动画组成模型[自定义shader实现]

文章目录优点实现思路传递给Shader的数据根据模型数据生成数据传递给Shader自定义shader 连接cpu与gpu顶点着色器 计算位置片元着色器优点 性能卓越 上一篇使用的更改坐标实现 9万个点 页面非常卡顿 光是计算9万个点坐标更替的js就已经造成了堵塞 尝试了在顶点着色器中实现动画…

大数据Kudu(五):Kudu基于Cloudera Manager安装及配置

文章目录 Kudu基于Cloudera Manager安装及配置 一、启动CM集群 二、登录ClouderaManager平台安装Kudu

TCO-PEG-RGD 反式环辛烯聚乙二醇线肽RGD

反式环辛烯(TCO)作为亲双烯体与S-四嗪(Tetrazine)在生理条件下的反应有无需催化剂、反应速率快的优点&#xff0c;被广泛应用于生物和材料科学的研究中。 产品名称 TCO-PEG-RGD 反式环辛烯聚乙二醇线肽RGD 中文名称 线肽-聚乙二醇-反式环辛烯 英文名称 TCO-PEG-RGD 分…

“引进来,走出去”,锦江国际集团多重创新力引领绿色新发展

2022年12月13日&#xff0c;由南方财经全媒体集团指导&#xff0c;21世纪经济报道主办的“21世纪住宿业高峰论坛&#xff08;2022&#xff09;暨2022&#xff08;第十九届&#xff09;【金枕头】酒店大赏发布典礼”在上海如期举行。锦江国际集团副总裁周维应邀出席并发表“创新…

【开源项目】SFUD--通用串口Flash驱动库的移植和使用

1.简介 SFUD 是一款开源的串行 SPI Flash 通用驱动库。由于现有市面的串行 Flash 种类居多&#xff0c;各个 Flash 的规格及命令存在差异&#xff0c; SFUD 就是为了解决这些 Flash 的差异现状而设计&#xff0c;让我们的产品能够支持不同品牌及规格的 Flash&#xff0c;提高了…

JeecgBoot部署(Nginx+Tomcat)

环境搭建JeecgBoot搭建、Linux安装Nginx、Linux安装JDK8、Linux安装MySql8、Linux安装Redis、Linux安装Tomcat9前端打包 1.进入目录&#xff1a;cd D:\win11\git_data\jeecg_3.4.4\jeecgboot-vue32.安装依赖&#xff1a;pnpm install-->node_modules3.打包编译&#xff1a;p…

矩阵树定理

用途 矩阵树一般用于生成树计数的问题&#xff0c;比如求一个无向图中生成树的个数。用矩阵树定理能极大地降低时间复杂度。 前置知识&#xff1a;行列式 此部分可粗略浏览&#xff0c;了解即可。 对于一个一阶行列式&#xff0c;可写作 det(a1,1)a1,1det \left( \begin{ma…

[附源码]Node.js计算机毕业设计房车营地在线管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

大数据学习:shell脚本

文章目录一、执行shell脚本1、直接执行脚本&#xff08;1&#xff09;绝对路径方式执行脚本&#xff08;2&#xff09;相对路径方式执行脚本2、利用source命令执行脚本3、利用bash或sh命令执行脚本二、shell脚本实战任务一&#xff1a;显示当前用户主目录1&#xff09;编写脚本…

3ds Max发生闪退怎么办?

3ds Max闪退 最近&#xff0c;小编在后台收到了一位炫云小伙伴的反馈&#xff1a;“我打开3ds Max后&#xff0c;总是出现闪退&#xff0c;究竟是什么情况&#xff1f;”实际上&#xff0c;闪退也细分为多种类型。例如&#xff1a;打开3ds Max直接闪退&#xff08;logo加载界面…