【lssvm回归预测】基于遗传算法优化最小二乘支持向量机GA-lssvm实现数据回归预测附matlab代码

news2024/11/27 14:39:05

✅作者简介:热爱科研的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/88516.html

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

相关文章

图书商城小程序开发,实现图书便捷式选购

1995年联合国教文组织将4月23日规定为世界读书日&#xff0c;由此可见对全世界人民来说读书都是一件很重要的事。并且据调查数据显示&#xff0c;去年我国成年国民图书阅读量达到了59.7%&#xff0c;同比增长了0.2个百分点&#xff1b;人均纸质图书阅读量为4.76&#xff0c;较上…

记一次线上问题 → 对 MySQL 的 ON UPDATE CURRENT_TIMESTAMP 的片面认知

问题背景 需求背景 需求&#xff1a;对商品的上架与下架进行管控&#xff0c;下架的商品不能进行销售 上架与下架的管控&#xff0c;在我负责的项目&#xff08;单据系统&#xff09;中实现&#xff1b;销售的控制则是在另外一个项目&#xff08;POS系统&#xff09;中实现的…

人工智能课后作业_python实现广度优先遍历搜索(BFS)(附源码)

2 广度优先遍历搜索(BFS) 2.1算法介绍2.2实验代码2.3实验结果2.4实验总结 2.1算法介绍 广度优先搜索算法&#xff08;英语&#xff1a;Breadth-First-Search&#xff0c;缩写为BFS&#xff09;&#xff0c;是一种图形搜索算法。简单的说&#xff0c;BFS是从根节点开始&#…

MATLAB动态导入文件功能(txt文件读入)

目录 一、界面搭建 1.axes坐标轴 2.LIST表 3.button按钮 二、属性 三、代码实现 一、界面搭建 1.axes坐标轴 需要有一个可以显示点的axes&#xff0c;以及一个展示点坐标XYZ的LIST表控件 2.LIST表 LIST需要添加表头&#xff0c;XYZ&#xff0c;行1,2,3,4,.. 右键列表…

降本增效: 蚂蚁在 Sidecarless 的探索和实践

文&#xff5c;王发康 &#xff08;花名&#xff1a;毅松 &#xff09; 蚂蚁集团技术专家、MOSN 项目核心开发者 深耕于高性能网络服务器研发&#xff0c;目前专注于云原生 ServiceMesh、Nginx、MOSN、Envoy、Istio 等相关领域。 本文 5574 字 阅读 14 分钟 前言 从单体到分…

三、数据链路层(二)封装成帧和透明传输

目录 2.1字符计数法 2.2字符填充的首尾定界符法 2.3零比特填充的首尾标志法 2.4违规编码法 组帧就是一段数据的前后分别添加首部和尾部&#xff0c;确定帧的界限。 组帧的目的是解决帧定界、帧同步&#xff08;接收方应能从接收到的二进制比特流中区分出帧的起始和终止&am…

java计算机毕业设计ssm智能交通信息管理平台6w258(附源码、数据库)

java计算机毕业设计ssm智能交通信息管理平台6w258&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#…

气象数据相关分析及使用系列:基于CALMET诊断模型的高时空分辨率精细化风场模拟

【查看原文】气象数据相关分析及使用系列&#xff1a;基于CALMET诊断模型的高时空分辨率精细化风场模拟技术应用​​​​​​ 在研究流场时&#xff0c;常用观测、模型风洞测试和数值模拟方法进行研究。但时常遇到研究区气象站点分布稀疏&#xff0c;不能代表周边复杂地形的风场…

PHP session相关知识详解

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是PHP session相关知识详解。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未…

JavaScript 版文章自动创建目录导航菜单控件源代码,用来生成文章导航,可生成独立的侧边栏导航菜单

特点 支持 UMD 规范&#xff1b;拥有 AnchorJS 基础功能&#xff1b;支持中文和英文标题文字生成ID&#xff1b;支持生成独立的侧边栏导航菜单&#xff1b;支持直接在文章中生成文章导读导航&#xff1b;自动分析标题关系&#xff0c;生成段落层级索引值&#xff1b;可以作为 …

试着开发一个Pagination组件

1 组件需求和模块设计 我们要实现的分页组件大致效果如下&#xff1a; 组件需求 点击左右分页按钮可以跳转到上一页/下一页&#xff1b;点击中间的页码按钮可以跳转到相应的页码&#xff1b;首页尾页需要始终显示出来&#xff08;如果只有1页则不显示尾页&#xff09;&#x…

数字孪生助力油气管道行业实现资产管理

随着数字孪生技术的发展日臻成熟&#xff0c;各个行业领域都在经历一场翻天覆地的变化。结合国内的油气管网系统建设现状&#xff0c;数字孪生技术对油气管道行业数智化建设必将有重大而深远的意义。 数字孪生助力油气管道行业实现资产管理 北京智汇云舟科技有限公司成立于201…

【发表案例】2/3区计算机视觉类SCI,3个月19天录用

2/3区计算机视觉类SCI 【期刊简介】IF:2.5-3.0&#xff0c;JCR2/3区&#xff0c;中科院4区 【检索情况】SCI 在检&#xff0c;正刊 【征稿领域】面向智能交通应用的物联网驱动计算机视觉技术 录用案例&#xff1a;3个月19天录用 2022.12.05 | Accepted 2022.11.17 | Edit…

全新的 React 组件设计理念 Headless UI

其实&#xff0c;最早接触 Headless UI 是在去年&#xff0c;碰巧看到了一个非常前沿且优秀的组件库 ---- Chakra UI&#xff0c;这个组件库本身就是 Headless UI 的实践者&#xff0c;同时也是 CSS-IN-JS 的集大成者。 我当时看过之后&#xff0c;就对该理念产生了很大的兴趣…

(2022最新)Xray、Rad两款工具的使用与联动

1、Xray的简介 xray 是一款功能强大的安全评估工具&#xff0c;由多名经验丰富的一线安全从业者呕心打造而成&#xff0c;主要特性有: 1、检测速度快。发包速度快; 漏洞检测算法效率高。 2、支持范围广。大至 OWASP Top 10 通用漏洞检测&#xff0c;小至各种 CMS 框架 POC&am…

ClickHouse Senior Course Ⅵ

序言 这里单独说明下分布式表引擎,不用分布式表引擎,感觉ClickHouse就没必要使用了cuiyaonan2000163.com 参考网址: 分布式引擎 | ClickHouse Docs 分布式表引擎的位置: 分布式引擎 分布式引擎本身不存储数据, 但可以在多个服务器上进行分布式查询。 读是自动并行的。读取…

内核动力之源——内存管理

目录 内存管理背后的故事 内存管理概述 常见内存分配策略 LwIP的宏配置及内存管理 见招拆招——动态内存堆 数据结构描述 函数实现 ​以不变应万变——动态内存池 数据结构描述 函数实现 使用C库管理内存策略 无论在哪种系统中&#xff0c;动态内存都是一个非常重要的…

12.5、后渗透测试--内网主机屏幕截图

攻击主机&#xff1a; Kali 192.168.11.106靶机&#xff1a;windows server 2008 r2 192.168.11.134前提&#xff1a;获得 meterpreter shell操作屏幕的几种方式&#xff1a;screenshotscreenshare加载espia模块&#xff0c;使用screengrab一、screenshot # 截图 meterprete…

数据分析案例-往届世界杯数据可视化

目录 1.引言 2.项目简介 2.1数据集介绍 2.2技术工具 3.数据可视化 3.1往届世界杯获奖国家TOP5 3.2往届世界杯比赛数据情况 3.3往届世界杯观众人数情况 3.4往届世界杯主办方情况 3.5往届世界杯冠军队情况 1.引言 足球是世界上非常受欢迎的运动之一&#xff0c;在全球…

数据可视化的最佳实践【不容错过】

在当前的市场中&#xff0c;数据可视化已经成为了传播数据信息的标准和载体。从商业智能BI到新闻媒体行业&#xff0c;处处都存在着数据可视化的影子&#xff0c;它帮助了我们更好的理解数据和交流数据中传达出的信息。研究表明&#xff0c;大脑对于可视化呈现出来的信息更加容…