当前位置: 首页 > news >正文

【LSSVM预测】基于误差的LS-SVM与PLS相结合的非线性建模附Matlab代码

1 简介

提出使用非线性的偏最小二乘法(PLS)的方法来解决工业处理领域输入值是非线性的问题。这个处理方法是由PLS做外部框架和最小二乘支持向量机做内部处理相结合的方法。首先,利用PLS对输入输出变量进行提取以降低维数和消除相关性,并把得到的特征矩阵作为LS-SVM的输入来建立模型。而且,利用了一个权值更新的过程来提高预测的准确率。其中基于误差的非线性迭代最小二乘法(NIPALS)的详细步骤在论文中给出。最后,这种新方法的性能通过了基准数据集的验证。相比于原始的线性PLS方法和各种非线性的PLS方法,论文中的方法大约降低了30.4%~37.3%的预测误差。

2 部分代码

clc;

clear all;

close all

%% -----------加载数据--------

load servodata.mat

%% -----------处理数据--------

X=svnum(:,1:4);

X_train=X(1:135,:);

X_test=X(136:165,:);

Y=svnum(:,5);

Y_train1=Y(1:135,:);

Y_test1=Y(136:165,:);

%% -------数据做归一化处理----

[Yn,PS2] = mapstd(Y_train1',0,1);

Y_train=Yn';

[Yn,PS1] = mapstd(Y_test1',0,1);

Y_test=Yn';

[X,PS] = mapstd(X_train',0,1);

X_train=X';

[Xt,PS] = mapstd(X_test',0,1);

X_test=Xt';

%% 偏最小二乘法处理

[p,q,w,t,u,b,ssqdif,Y] = pls(X_train,Y_train,3);

[pt,qt,wt,tt,ut,bt,ssqdift,Yt] = pls(X_test,Y_test,3);

%% 计算误差矩阵E/F

E=X_train-t*p';

Et=X_test-tt*pt';

F=Y_train-u*q';

%% 绘图

u1=u(:,1);

t1=t(:,1);

A=polyfit(t1,u1,1) ;

t_2=t(:,2);

t_3=t(:,3);

plot(t1,u1,'o');

set(gca, 'XLim',[-3 3]);

set(gca, 'yLim',[-2 4]);

hold on

t2=t1;

e1=E(:,1);

e2=E(:,2);

e3=E(:,3);

u2=t2.*0.4163-0.0153*e1;

F2=u2-u1;

u2_2=t_2.*0.4163-0.63*e2;

u2_3=t_3.*0.4163-0.63*e3;

u_new=[u2 u2_2 u2_3];

Y_new=u_new*q';

plot(t1,u2,'r+')

xlabel('t1');

ylabel('u1');

legend('Acture','Predict');

hold off

%% 计算训练集误差

%Y_new = mapstd('reverse',Y_new,PS2);

n=size(u1,1);%n1等于x1矩阵的行数,括号里1代表取行数,2代表取列数%

s=0;

F1=Y_new;%-Y_train;

for i=1:n

s=s+(Y_new(i)-Y_train(i))*(Y_new(i)-Y_train(i));

end

RMSEx=sqrt(s/n)

%% 计算R2X / R2Y

[ne,me]=size(X_train);

X_reshape=reshape(X_train,1,ne*me);

E_reshape=reshape(E,1,ne*me);

Y_reshape=Y_train';

F_reshape=F1;

[nf,mf]=size(F_reshape);

xx=0;ee=0;

for i=1:ne*me

xx=xx+X_reshape(i)*X_reshape(i);

ee=ee+E_reshape(i)*E_reshape(i);

end

yy=0;ff=0;

for j=1:nf*mf

yy=yy+Y_reshape(j)*Y_reshape(j);

ff=ff+F_reshape(j)*F_reshape(j);

end

R2X=(1-ee/xx)*100

R2Y=(1-ff/yy)*100

%% 计算测试集误差

%Y_need=X_test(:,1).*0.4136;

tt1=tt(:,1);

tt2=tt(:,2);

tt3=tt(:,3);

utt1=tt1.*0.4163+0.65*Et(:,1);

utt2=tt2.*0.4163+0.65*Et(:,2);

utt3=tt3.*0.4163+0.65*Et(:,3);

utt=[utt1 utt2 utt3];

Y_need=utt*qt';

st=0;

Y_need = mapstd('reverse',Y_need,PS1);

for i=1:30

st=st+(Y_need(i)-Y_test1(i))*(Y_need(i)-Y_test1(i));

end

RMSEc=sqrt(st/30)

%%

3 仿真结果

4 参考文献

[1]熊富强, 桂卫华, 阳春华,等. 基于PLS-LSSVM方法的湿法炼锌过程预测建模[J]. 仪器仪表学报, 2011, 32(4):8.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

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

http://www.jsqmd.com/news/1242563/

相关文章:

  • 2026 年度淄博优质装修公司综合实力 TOP 榜(本地家居媒体联合测评) - 米諾
  • Offer之路工具推荐
  • TMS570系统控制寄存器深度解析:GLBSTAT、DEVID与核间通信实战
  • 为什么你用AI写的干货没人看?——顶级内容架构师亲授“信息密度增强术”与3秒抓人开头模板
  • 嵌入式系统EMIFA接口配置:从时序参数到寄存器实战
  • 钉钉消息永不已读功能怎么用?钉钉消息防撤回补丁高级技巧分享
  • 100、语义分割驱动的局部调优:场景感知的影像增强架构
  • nat123映:相隔几千公里,他远程修好了父母家的电脑
  • Kimi K3 开放权重实测:前端编码登顶,用云端推理零门槛跑通(附完整接入步骤)
  • Claude Code 个人跑通太顺,为什么一上真实项目却频频失控?
  • 别让“区域平均”吃掉利润:为何百亿级品牌都押注“一店一策”?
  • Boxed.AspNetCore.TagHelpers社交媒体优化:OpenGraph与Twitter卡片集成教程
  • 济南2026除甲醛市场乱象:绿舒环保等5大品牌实测 - 绿舒环保母婴除甲醛
  • 一文读懂 NF 纳滤膜系统:介于超滤与反渗透的分离工艺
  • 终极Orbot入门教程:5个简单步骤快速搭建你的第一个Tor连接
  • AI副业信任基建指南(2024实测版):7类高转化口碑话术+3套可复用传播SOP
  • 为什么83%的AI搜索项目在选型阶段就埋下失败种子?——2024企业级AI搜索技术栈选型白皮书首发
  • 深入解析I2C寄存器配置:从原理到稳定通信的实践指南
  • 信息管理毕业设计2026课题答疑
  • 10分钟上手aws2tf:从安装到生成VPC Terraform代码的快速教程
  • 江都、仪征产业园注册公司全流程,熊猫财税六区县专属注册代账园区地址扶持 - 博客万
  • 论文的实验设计原则:控制变量、样本量与统计功效的平衡方法
  • 深入解析TMS320F2837xS USB控制器核心寄存器与配置实战
  • 深入解析McBSP多通道通信:从硬件原理到工程实践
  • 嘎嘎降AI能降到多少?官方承诺+知网维普实测数据详细对比
  • RxJava在Android中的应用
  • 【Springboot毕设全套源码+文档】基于springboot中药材店铺管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • Kimi做对了什么?
  • 太原无人机小班教学培训
  • TMS320F2837xD模拟子系统与ADC配置:从硬件架构到Driverlib实战