1、(完整版)支持向量机非线性回归通用MATLAB源码支持向量机非线性回归通用MATLAB源码支持向量机和BP神经网络都可以用来做非线性回归拟合,但它们的原理是不相同的,支持向量机基于结构风险最小化理论,普遍认为其泛化能力要比神经网络的强。大量仿真证实,支持向量机的泛化能力强于BP网络,而且能避免神经网络的固有缺陷训练结果不稳定。本源码可以用于线性回归、非线性回归、非线性函数拟合、数据建模、预测、分类等多种应用场合,GreenSim团队推荐您使用。function Alpha1,Alpha2,Alpha,Flag,B=SVMNR(X,Y,Epsilon,C,TKF,Para1,Para2)% SV
2、MNR.m% Support Vector Machine for Nonlinear Regression All rights reserved 支持向量机非线性回归通用程序 GreenSim团队原创作品,转载请注明% GreenSim团队长期从事算法设计、代写程序等业务 欢迎访问GreenSim-算法仿真团队http:/blog.sina。com。cn/greensim% 程序功能: 使用支持向量机进行非线性回归,得到非线性函数y=f(x1,x2,xn)的支持向量解析式,% 求解二次规划时调用了优化工具箱的quadprog函数。本函数在程序入口处对数据进行了 1,1的归一化处理,所以计算
3、得到的回归解析式的系数是针对归一化数据的,仿真测 试需使用与本函数配套的Regression函数.% 主要参考文献: 朱国强,刘士荣等。支持向量机及其在函数逼近中的应用.华东理工大学学报 输入参数列表 X 输入样本原始数据,nl的矩阵,n为变量个数,l为样本个数% Y 输出样本原始数据,1l的矩阵,l为样本个数 Epsilon 不敏感损失函数的参数,Epsilon越大,支持向量越少% C 惩罚系数,C过大或过小,泛化能力变差 TKF Type of Kernel Function 核函数类型% TKF=1 线性核函数,注意:使用线性核函数,将进行支持向量机的线性回归 TKF=2 多项式核函数%
4、 TKF=3 径向基核函数% TKF=4 指数核函数% TKF=5 Sigmoid核函数% TKF=任意其它值,自定义核函数 Para1 核函数中的第一个参数% Para2 核函数中的第二个参数% 注:关于核函数参数的定义请见Regression.m和SVMNR。m内部的定义% 输出参数列表 Alpha1 系数 Alpha2 *系数% Alpha 支持向量的加权系数()向量 Flag 1l标记,0对应非支持向量,1对应边界支持向量,2对应标准支持向量 B 回归方程中的常数项-%-数据归一化处理-nntwarn offX=premnmx(X);Y=premnmx(Y);%-核函数参数初始化-sw
5、itch TKFcase 1线性核函数 K=sum(x.*y)没有需要定义的参数case 2多项式核函数 K=(sum(x。y)+c)pc=Para1;%c=0.1;p=Para2;%p=2;case 3%径向基核函数 K=exp((norm(xy))2/(2*sigma2))sigma=Para1;sigma=6;case 4指数核函数 K=exp(norm(xy)/(2sigma2))sigma=Para1;%sigma=3;case 5%Sigmoid核函数 K=1/(1+exp(v*sum(x.*y)+c))v=Para1;%v=0.5;c=Para2;%c=0;otherwise自定
6、义核函数,需由用户自行在函数内部修改,注意要同时修改好几处!暂时定义为 K=exp(-(sum((x-y).2)/(2sigma2))sigma=Para1;%sigma=8;end%-构造K矩阵-l=size(X,2);K=zeros(l,l);%K矩阵初始化for i=1:lfor j=1:lx=X(:,i);y=X(:,j);switch TKF根据核函数的类型,使用相应的核函数构造K矩阵case 1K(i,j)=sum(x。*y);case 2K(i,j)=(sum(x.y)+c)p;case 3K(i,j)=exp(-(norm(xy)2/(2sigma2));case 4K(i,j
7、)=exp(-norm(x-y)/(2sigma2);case 5K(i,j)=1/(1+exp(v*sum(x。y)+c));otherwiseK(i,j)=exp((sum((x-y).2)/(2sigma2);endendend%-构造二次规划模型的参数H,Ft,Aeq,Beq,lb,ub-%支持向量机非线性回归,回归函数的系数,要通过求解一个二次规划模型得以确定Ft=Epsilonones(1,l)Y,Epsilonones(1,l)+Y;Aeq=ones(1,l),-ones(1,l);Beq=0;ub=C*ones(2l,1);%-调用优化工具箱quadprog函数求解二次规划-O
8、PT=optimset;OPT。LargeScale=off;OPT。Display=off;%-整理输出回归方程的系数-Alpha1=(Gamma(1:l,1);Alpha2=(Gamma((l+1):end,1);Alpha=Alpha1Alpha2;Flag=2*ones(1,l);%-支持向量的分类-Err=0。000000000001;for i=1:lAA=Alpha1(i);BB=Alpha2(i);if (abs(AA-0)=Err)&(abs(BB-0)=Err)Flag(i)=0;非支持向量endif (AAErr)(AA Flag(i)=2;标准支持向量endif (ab
9、s(AA-0)=Err)&(BBErr)&(BB Flag(i)=2;%标准支持向量endif (abs(AAC)=Err)(abs(BB-0)=Err)Flag(i)=1;边界支持向量endif (abs(AA0)=Err)&(abs(BBC)Err)&(BB SUM=0;for j=1:lif Flag(j)0switch TKFcase 1SUM=SUM+Alpha(j)*sum(X(:,j)。*X(:,i);case 2SUM=SUM+Alpha(j)*(sum(X(:,j).*X(:,i))+c)p;case 3SUM=SUM+Alpha(j)*exp(norm(X(:,j)X(:,
10、i)2/(2sigma2));case 4SUM=SUM+Alpha(j)*exp(norm(X(:,j)X(:,i)/(2sigma2));case 5SUM=SUM+Alpha(j)1/(1+exp(v*sum(X(:,j)。*X(:,i)+c));otherwiseSUM=SUM+Alpha(j)*exp(sum(X(:,j)X(:,i).2)/(2*sigma2);endendendb=Y(i)-SUM+Epsilon;B=B+b;counter=counter+1;endendif counter=0B=0;elseB=B/counter;end欢迎访问GreenSim团队主页:ht
11、tp:/blog。sina。欢迎访问GreenSim算法仿真团队http:/blog。cn/greensimfunction y=Regression(Alpha,Flag,B,X,Y,TKF,Para1,Para2,x)%-% Regression。m% 与SVMNR。m函数配套使用的仿真测试函数% 函数功能: 本函数相当于支持向量得到的回归方程的解析方程,输入一个待测试的列向量x,得到一% 个对应的输出值y GreenSim团队原创作品,转载请注明 GreenSim团队长期从事算法设计、代写程序等业务% 欢迎访问GreenSim算法仿真团队http:/- 输入参数列表% Alpha 支持向
12、量的加权系数()向量% Flag 1l标记,0对应非支持向量,1对应边界支持向量,2对应标准支持向量% B 回归方程中的常数项 X 输入样本原始数据,nl的矩阵,n为变量个数,l为样本个数% Y 输出样本原始数据,1l的矩阵,l为样本个数 Para1 核函数中的第一个参数 Para2 核函数中的第二个参数% 注:关于核函数参数的定义请见Regression。m和SVMNR.m内部的定义% x 待测试的原始数据,n1的列向量% 输出参数列表 y 仿真测试的输出值%-核函数参数初始化-switch TKFcase 1%线性核函数 K=sum(x.*y)没有需要定义的参数case 2多项式核函数 K
13、=(sum(x.*y)+c)pc=Para1;%c=0.1;p=Para2;%p=2;case 3径向基核函数 K=exp(norm(x-y))2/(2*sigma2)sigma=Para1;%sigma=6;case 4%指数核函数 K=exp(-norm(xy)/(2*sigma2)sigma=Para1;%sigma=3;case 5%Sigmoid核函数 K=1/(1+exp(v*sum(x.y)+c))v=Para1;v=0。5;c=Para2;c=0;otherwise自定义核函数,需由用户自行在函数内部修改,注意要同时修改好几处!暂时定义为 K=exp((sum(x-y)。2)/
14、(2*sigma2))sigma=Para1;%sigma=8;end%-数据归一化处理-X,minX,maxX=premnmx(X);x=2(x-minX)。/(maxXminX)-1;Y,minY,maxY=premnmx(Y);%-计算仿真测试的输出值-l=length(Alpha);SUM=0;for i=1:lif Flag(i)0switch TKFcase 1SUM=SUM+Alpha(i)sum(x.X(:,i));case 2SUM=SUM+Alpha(i)(sum(x.X(:,i)+c)p;case 3SUM=SUM+Alpha(i)*exp(-(norm(x-X(:,i))2/(2sigma2));case 4SUM=SUM+Alpha(i)exp(-norm(x-X(:,i))/(2sigma2);case 5SUM=SUM+Alpha(i)*1/(1+exp(vsum(x.X(:,i))+c);otherwiseSUM=SUM+Alpha(i)*exp(-(sum(xX(:,i))。2)/(2sigma2);endendendy=SUM+B;%-反归一化处理-y=postmnmx(y,minY,maxY);
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100