文档详情

支持向量机非线性回归通用MATLAB源码

cl****1
实名认证
店铺
DOCX
15.34KB
约7页
文档ID:409352275
支持向量机非线性回归通用MATLAB源码_第1页
1/7

支持向量机非线性回归通用MATLAB源码 支持向量机和BP神经网络都可以用来做非线性回归拟合,但它们的原理是不相同的,支持 向量机基于结构风险最小化理论,普遍认为其泛化能力要比神经网络的强大量仿真证实, 支持向量机的泛化能力强于BP网络,而且能避免神经网络的固有缺陷一一训练结果不稳定 本源码可以用于线性回归、非线性回归、非线性函数拟合、数据建模、预测、分类等多种应 用场合, GreenSim 团队推荐您使用function [Alpha1,Alpha2,Alpha,Flag,B]=SVMNR(X,Y,Epsilon,C,TKF,Para1,Para2)%%% SVMNR.m% Support Vector Machine for Nonlinear Regression% All rights reserved%%% 支持向量机非线性回归通用程序% GreenSim 团队原创作品,转载请注明% GreenSim 团队长期从事算法设计、代写程序等业务% 欢迎访问 GreenSim 算法仿真团队— 程序功能:%使用支持向量机进行非线性回归,得到非线性函数y=f(xl,x2,…,xn)的支持向量解析式,%求解二次规划时调用了优化工具箱的quadprog函数。

本函数在程序入口处对数据进行了% [-1,1]的归一化处理,所以计算得到的回归解析式的系数是针对归一化数据的,仿真测%试需使用与本函数配套的Regression函数 主要参考文献:% 朱国强,刘士荣等.支持向量机及其在函数逼近中的应用.华东理工大学学报% 输入参数列表% X输入样本原始数据,nXl的矩阵,n为变量个数,l为样本个数% Y输出样本原始数据,1Xl的矩阵,l为样本个数% Epsilon &不敏感损失函数的参数,Epsilon越大,支持向量越少% C惩罚系数,C过大或过小,泛化能力变差% TKF Type of Kernel Function 核函数类型% TKF=1 线性核函数,注意:使用线性核函数,将进行支持向量机的线性回归% TKF=2 多项式核函数% TKF=3 径向基核函数% TKF=4 指数核函数% TKF=5 Sigmoid 核函数% TKF=任意其它值,自定义核函数% Para1 核函数中的第一个参数% Para2 核函数中的第二个参数%注:关于核函数参数的定义请见Regression.m和SVMNR.m内部的定义% 输出参数列表% Alpha1 a系数% Alpha2 a *系数% Alpha支持向量的加权系数(a — a*)向量% Flag 1X1标记,0对应非支持向量,1对应边界支持向量,2对应标准支持向量% B 回归方程中的常数项% %%% 数据归一化处理 nntwarn offX=premnmx(X);Y=premnmx(Y);%%%%% 核函数参数初始化 switch TKFcase 1%线性核函数 K=sum(x.*y)%没有需要定义的参数case 2%多项式核函数K=(sum(x.*y)+c)Apc=Para1;%c=0.1;p=Para2;%p=2;case 3%径向基核函数 K=exp(-(norm(x-y))A2/(2*sigmaA2))sigma=Para1;%sigma=6;case 4%指数核函数 K=exp(-norm(x-y)/(2*sigmaA2))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).A2)/(2*sigmaA2)))sigma=Para1;%sigma=8;end%%%%% 构造K矩阵 l=size(X,2);K=zeros(1,1);%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)Ap;case 3K(i,j)=exp(-(norm(x-y))A2/(2*sigmaA2));case 4K(i,j)=exp(-norm(x-y)/(2*sigmaA2));case 5K(i,j)=1/(1+exp(-v*sum(x.*y)+c));otherwiseK(i,j)=exp(-(sum((x-y).A2)/(2*sigmaA2)));endendend%%%%% 构造二次规划模型的参数 H,Ft,Aeq,Beq,lb,ub %支持向量机非线性回归,回归函数的系数,要通过求解一个二次规划模型得以确定 Ft=[Epsilon*ones(1,l)-Y,Epsilon*ones(1,l)+Y];Aeq=[ones(1,l),-ones(1,l)];Beq=0;ub=C*ones(2*l,1);%%%%% 调用优化工具箱quadprog函数求解二次规划 OPT=optimset;OPT.LargeScale='off';OPT.Display='off';%%%%% 整理输出回归方程的系数 Alpha1=(Gamma(1:l,1))';Alpha2=(Gamma((l+1):end,1))';Alpha=Alpha1-Alpha2;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)=O;%非支持向量endif (AA>Err )&&(AA Flag(i)=2;%标准支持向量endif (abs(AA-O)v=Err )&&(BB>Err )&&(BB Flag(i)=2;%标准支持向量 endif (abs(AA-C)<=Err)&&(abs(BB-0)<=Err)Flag(i)=1;%边界支持向量endif (abs(AA-0)<=Err)&&(abs(BB-C)<=Err)Flag(i)=1;%边界支持向量endend%% %%% 计算回归方程中的常数项 B B=0;counter=0;for i=1:lAA=Alpha1(i);BB=Alpha2(i);if (AA>Err)&&(AA %计算支持向量加权值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)Ap;case 3SUM=SUM+Alpha(j)*exp(-(norm(X(:,j)-X(:,i)))A2/(2*sigmaA2)); case 4SUM=SUM+Alpha(j)*exp(-norm(X(:,j)-X(:,i))/(2*sigmaA2)); 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)).A2)/(2*sigmaA2))); endendendb=Y(i)-SUM-Epsilon;B=B+b;counter=counter+1;endif (abs(AA-0)<=Err)&&(BB>Err)&&(BB SUM=0;for j=1:lif Flag(j)>0switch TKFcase 1 SUM=SUM+Alpha(j)*sum(X(:,j).*X(:,i));case 2SUM=SUM+Alpha(j)*(sum(X(:,j).*X(:,i))+cFp;case 3SUM=SUM+Alpha(j)*exp(-(norm(X(:,j)-X(:,i)))A2/(2*sigmaA2));case 4SUM=SUM+Alpha(j)*exp(-norm(X(:,j)-X(:,i))/(2*sigmaA2));case 5 SUM=SUM+Alpha(j)*1/(1+exp(-v*sum(X(:,j).*X(:,i))+c)); otherwiseSUM=SUM+Alpha(j)*exp(-(sum((X(:,j)-X(:,i)).A2)/(2*sigmaA2)));endendendb=Y(i)-SUM+Epsilon;B=B+b;counter=counter+1;endendif counter==0B=0;elseB=B/counter;end欢 迎 访 问 GreenSim 团 队 主 页 算法仿真团队_ y=Regression(Alpha,Flag,B,X,Y,TKF,Para1,Para2,x)% % Regression.m% 与 SVMNR.m 函数配套使用的仿真测试函数% 函数功能:% 本函数相当于支持向量得到的回归方程的解析方程,输入一个待测试的列向量 x ,得到% 个对应的输出值 y% GreenSim 团队原创作品,转载请注明% GreenSim 团队长期从事算法设计、代写程序等业务% 欢迎访问 GreenSim 算法仿真团队— % 输入参数列表% Alpha支持向量的加权系数(a — a*)向量% Flag 1Xl标记,0对应非支持向量,1对应边界支持向量,2对应标准支持向量% B 回归方程中的常数项% X输入样本原始数据,nXl的矩阵,n为变量个数,l为样本个数% Y输出样本原始数据,1Xl的矩阵,l为样本个数% Para1 核函数中的第一个参数% Para2 核函数中的第二个参数%注:关于核函数参数的定义请见Regressions和SVMNR.m内部的定义% x待测试的原始数据,nX1的列向量% 输出参数列表% y 仿真测试的输出值%%% 核函数参数初始化 switch TKFcase 1%线性核函数 K=sum(x.*y)%没有需要定义的参数case 2%多项式核函数K=(sum(x.*y)+c)Apc=Para1;%c=0.1;p=Para2;%p=2;case 3%径向基核函数 K=exp(-(norm(x-y))A2/(2*sigmaA2)) sigma=。

下载提示
相似文档
正为您匹配相似的精品文档