《支持向量机非线性回归通用MATLAB源码》由会员分享,可在线阅读,更多相关《支持向量机非线性回归通用MATLAB源码(8页珍藏版)》请在金锄头文库上搜索。
1、支持向量机非线性回归通用MATLAB源码支持向量机和BP神经网结都可以用来做非线性回归拟合,但它们的原理是不相同的,支持 向量机基于结构风险最小化理论,普遍认为其泛化能力要比神经网结的强。大量仿真证实, 支持向量机的泛化能力强于BP网络,而且能避免神经网络的固有缺陷一一训练结果不稳定。 本源码可以用于线性回归、非线性回归、非线性函数拟合、数据建模、预测、分类等多种应 用场合,GieenSun团队推荐您使用。fiinction Alpha 1 Alpha2Alpha,Flag,B=SVMNR(X,Y,Epsilon,C,TKF,ParaLPaia2)% SVMNR.m% Support Vect
2、or Machine for Noiilmear Regression% All rights reseived%支持向量机非线性回归通用程序% GreenSim团队原创作品,转载请注明% GreenSim团队长期从事算法设计、代写程序等业务%欢迎访问GreenSim算法仿真团队f%程序功能:%使用支持向量机进行非线性回归,得到非线性函数y=f(xl,x2,-,xii)的支持向量解析式, %求解二次规划时调用了优化工具箱的quadprog函数。本函数在程序入II处对数据进行了 %-!,!的归一化处理,所以计算得到的回归解析式的系数是针对归一化数据的,仿真测 %试需使用与本函数配套的Regres
3、sion函数。%主要参考文献:%朱国强,刘士荣等.支持向量机及其在函数逼近中的应用.华东理工大学学报%输入参数列表%X输入样本原始数据,nXl的矩阵,n为变量个数,1为样本个数%Y输出样本原始数据,1X1的矩阵,1为样本个数% Epsilon 不敏感损失函数的参数,Epsilon越大,支持向量越少%C惩罚系数,C过大或过小,泛化能力变差% TKF Type of Kernel Function 核函数类型%TKF=1线性核函数,注意:使用线性核函数,将进行支持向量机的线性回归%TKF=2多项式核函数%TKF=3径向基核函数%TKF=4指数核函数% TKF=5 Sigmoid 核函数%TKF=任
4、意其它值,自定义核函数%Paial核函数中的第一个参数% Paia2核函数中的第二个参数%注:关于核函数参数的定义请见Regiession.m和SVMNR.m内部的定义%输出参数列表% Alpha 1 a 系数% Alpha2 a *系数% Alpha支持向量的加权系数(a a *)向量% Flag 1X1标记,0对应非支持向量,1对应边界支持向量,2对应标准支持向量 %B回归方程中的常数项%数据归一化处理nntwarn offX=prenumix(X);Y=prenumix(Y);%核函数参数初始化switch TKFcase 1%线性核函数K=sum(x.*y)%没有需要定义的参数case
5、 2%多项式核函数K=(sum(x.*y)+c)Apc=Paral;%c=0.1;p=Paia2;%p=2;case 3%径向基核函数 K=exp(-(noim(x-y)A2/(2 *sigmaA2)signia=Paia 1 ;%sigma=6;case 4%指数核函数 K=exp(-norm(x-y)/(2* sigmaA2)signia=Paia 1 ;%sigma=3;case 5%Sigmoid 核函数 K= 1 /(1 +exp(-v*sum(x. *y)+c)v=Paral;%v=0.5;c=Paia2;%c=0;othenvise%自定义核函数,需由用户自行在函数内部修改,注意
6、要同时修改好几处!%暂时定义为 K=exp(-(sum(x-y).A2)/(2*sigmaA2)signia=Paia 1 ;%sigma=8;end%构造K矩阵l=size(X,2);K=zeios(l,l);%K矩阵初始化fbii=l:lfor j=l:lx=X(:,i);y=x(:j);switchTKF%根据核函数的类型,使用相应的核函数构造K矩阵case 1K(ij)=sum(x.*y);case 2K(ij)=(sum(x. *y)+c)Ap;case 3K(ij)=exp(-(norm(x-y)A2/(2*signiaz 2);case 4K(ij)=exp(-norm(x-y)
7、/(2*sigmaA2);case 5K(ij)=l/( 1+exp(-v*sum(x. *y)+c);othenviseK(ij)=exp(-(sum(x-y).A2)/(2*sigmaA2);endendend%构造二次规划模型的参数H,Ft,Aeq,Beq,lb,ub%支持向量机非线性回归,回归函数的系数,要通过求解一个二次规划模型得以确定Ft=Epsilon*ones( 1 J)-YEpsilon*ones( 1,1)+Y;Aeq=ones( 1 J),-ones(l J);Beq=0;ub=C*ones(2*lJ);%调用优化工具箱quadpiog函数求解二次规划OPT=optims
8、et;OPT.LargeScale-off;OPT.Display=,off;%整理输出回归方程的系数Alpha 1=(Gamma( 1:1,1):Alpha2=(Ganmia(l+1): end)9;Alpha=Alpha 1-Alpha2;Flag=2*ones(l J);%支持向量的分类Eit=0.1;fbii=l:lAA=Alphal(i);BB=Alpha2(i);if (abs(AA-O)v=Err)&(abs(BB-O)v=Err)Flag(i)=O;%非支持向量endif (AAEn)&(AA Flag(i)=2;% 标准支持向量endif (abs(AA-O)v=Err)&(
9、BBErr)&(BB Flag(i)=2;%标准支持向量endif (abs(AA-C)=En)&(abs(BB-O)=En)Flag(i)=l;%边界支持向量endif (abs(AA-O)=Err)&(abs(BB-C)Err)&(AA %计算支持向量加权值SUM=O;for j=l:lifFlag(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(-(nonn(X(j)-X(
10、:4)A2/(2*sigina/2);case 4SUM=SUM+Alpha (j)*exp(-iiorm(X(:,j)-X(:,i)/(2*sigma 八 2);case 5SUM=SUM+Alpha(j)*l/(l+exp(v*sum(X(:j).*X(:,i)+c);othenviseSUM=SUNI+AlphaO)*exp(Err)&(BB SUM=O;fbij=l:lifFlag(j)0switch TKFcase 1SUM=SUM+Alpha(j 尸 sum(X(:,j).*X(:,i);case 2SUM=SUM+Alpha(j)*(sum(X(: ,j). *X(: ,i)+c
11、),p;case 3SUM=SUM+Alpha(j)*exp(-(norm(X(j)-X(: j)A2/(2*signiaA2);case 4SUM=SUM+Alpha(j)*exp(-iiorm(X(:,j)-X(:,i)/(2*sigma 八 2);case 5SUM=SUM+Alpha(j)*U(l+exp(v*sum(X(:j).*X(:,i)+c);othenviseSUM=SUM+Alpha(j)*exp(.(sum(X(:j).X(:,i)C2)/(2*sigma,、2);b=Y(i)-SUM+Epsilon;B=B+b;countei-counter+1;if counter=
12、0B=0;elseB=B/counter;end欢迎访问GreenSim团队主页:欢迎访问GreenSim算法仿真团队fiinction y=Regression( Alpha,Flag,B,X,Y,TKFPara 1 .Para2,x)% Regression.m%与SVMNR.m函数配套使用的仿真测试函数%函数功能:%本函数相当于支持向量得到的回归方程的解析方程,输入一个待测试的列向量X,得到%个对应的输出值y% GreenSim团队原创作品,转载请注明% GreenSim团队长期从事算法设计、代写程序等业务%欢迎访问GreenSim算法仿真团队f%输入参数列表% Alpha支持向量的加权
13、系数(a - a *)向量% Flag 1X1标记,0对应非支持向量,1对应边界支持向量,2对应标准支持向量%B回归方程中的常数项%X输入样本原始数据,nXl的矩阵,n为变量个数,1为样本个数%Y输出样本原始数据,1X1的矩阵,1为样本个数%Paial核函数中的第一个参数%Paia2核函数中的第二个参数%注:关于核函数参数的定义请见Regiession.m和SVMNR.m内部的定义%x待测试的原始数据,nXl的列向量%输出参数列表%y仿真测试的输出值%核函数参数初始化switch TKFcase 1%线性核函数K=sum(x.*y)%没有需要定义的参数case 2%多项式核函数K=(sum(x.*y)+c)Apc=Paial;%c=0.1;p=Paia2;%p=2;case 3%径向基核函数 K=exp(-(noim(x-y)A2/(2 *sigmaA2)signia=Paia 1 ;%sigma=6;case 4%指数核函数 K=exp(-norm(x-y)/(2* sigmaA2)signia=Paia 1 ;%sigma=3;case 5%Sigmoid 核函数 K= 1 /(1 +exp(-v*sum(x. *y)+c)v=Paral;%v=0.5;c=Paia2;%c=0;othenvise%自定义核