matlab支持向量回归,支持向量回归 MATLAB代码

matlab支持向量回归,支持向量回归 MATLAB代码支持向量回归MATLAB代码(2013-05-3116:30:35)标签:教育支持向量机和神经网络都可以用来做非线性回归拟合,但它们的原理是不相同的,支持向量机基于结构风险最小化理论,普遍认为其泛化能力要比神经网络的强。大量仿真证实,支持向量机的泛化能力强于神经网络,而且能避免神经网络的固有缺陷——训练结果不稳定。本源码可以用于线性回归、非线性回归、非线性函数拟合、数据建模、预测、分类等多种应…

大家好,又见面了,我是你们的朋友全栈君。

支持向量回归 MATLAB代码

(2013-05-31 16:30:35)

标签:

教育

支持向量机和神经网络都可以用来做非线性回归拟合,但它们的原理是不相同的,支持向量机基于结构风险最小化理论,普遍认为其泛化能力要比神经网络的强。大量仿真证实,支持向量机的泛化能力强于神经网络,而且能避免神经网络的固有缺陷——训练结果不稳定。本源码可以用于线性回归、非线性回归、非线性函数拟合、数据建模、预测、分类等多种应用场合。

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

%%

% 支持向量机非线性回归通用程序

% 程序功能:

% 使用支持向量机进行非线性回归,得到非线性函数y=f(x1,x2,…,xn)的支持向量解析式,

% 求解二次规划时调用了优化工具箱的quadprog函数。本函数在程序入口处对数据进行了

% [-1,1]的归一化处理,所以计算得到的回归解析式的系数是针对归一化数据的,仿真测

% 试需使用与本函数配套的Regression函数。

% 输入参数列表

% X 输入样本原始数据,n×l的矩阵,n为变量个数,l为样本个数

% Y 输出样本原始数据,1×l的矩阵,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 α系数

% Alpha2 α*系数

% Alpha 支持向量的加权系数(α-α*)向量

% Flag 1×l标记,0对应非支持向量,1对应边界支持向量,2对应标准支持向量

% B 回归方程中的常数项

%————————————————————————–

%%

%———————–数据归一化处理————————————–

nntwarn off

X=premnmx(X);

Y=premnmx(Y);

%%

%%

%———————–核函数参数初始化————————————

switch TKF

case 1

%线性核函数 K=sum(x.*y)

%没有需要定义的参数

case 2

%多项式核函数 K=(sum(x.*y)+c)^p

c=Para1;%c=0.1;

p=Para2;%p=2;

case 3

%径向基核函数 K=exp(-(norm(x-y))^2/(2*sigma^2))

sigma=Para1;%sigma=6;

case 4

%指数核函数 K=exp(-norm(x-y)/(2*sigma^2))

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)/(2*sigma^2)))

sigma=Para1;%sigma=8;

end

%%

%%

%———————–构造K矩阵——————————————-

l=size(X,2);

K=zeros(l,l);%K矩阵初始化

for i=1:l

for j=1:l

x=X(:,i);

y=X(:,j);

switch TKF%根据核函数的类型,使用相应的核函数构造K矩阵

case 1

K(i,j)=sum(x.*y);

case 2

K(i,j)=(sum(x.*y)+c)^p;

case 3

K(i,j)=exp(-(norm(x-y))^2/(2*sigma^2));

case 4

K(i,j)=exp(-norm(x-y)/(2*sigma^2));

case 5

K(i,j)=1/(1+exp(-v*sum(x.*y)+c));

otherwise

K(i,j)=exp(-(sum((x-y).^2)/(2*sigma^2)));

end

end

end

%%

%%

%————构造二次规划模型的参数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:l

AA=Alpha1(i);

BB=Alpha2(i);

if (abs(AA-0)<=Err)&&(abs(BB-0)<=Err)

Flag(i)=0;%非支持向量

end

if (AA>Err)&&(AA<=ERR)

Flag(i)=2;%标准支持向量

end

if (abs(AA-0)<=Err)&&(BB>Err)&&(BB

Flag(i)=2;%标准支持向量

end

if (abs(AA-C)<=Err)&&(abs(BB-0)<=Err)

Flag(i)=1;%边界支持向量

end

if (abs(AA-0)<=Err)&&(abs(BB-C)<=Err)

Flag(i)=1;%边界支持向量

end

end

%%

%%

%——————–计算回归方程中的常数项B———————————

B=0;

counter=0;

for i=1:l

AA=Alpha1(i);

BB=Alpha2(i);

if (AA>Err)&&(AA<=ERR)

%计算支持向量加权值

SUM=0;

for j=1:l

if Flag(j)>0

switch TKF

case 1

SUM=SUM+Alpha(j)*sum(X(:,j).*X(:,i));

case 2

SUM=SUM+Alpha(j)*(sum(X(:,j).*X(:,i))+c)^p;

case 3

SUM=SUM+Alpha(j)*exp(-(norm(X(:,j)-X(:,i)))^2/(2*sigma^2));

case 4

SUM=SUM+Alpha(j)*exp(-norm(X(:,j)-X(:,i))/(2*sigma^2));

case 5

SUM=SUM+Alpha(j)*1/(1+exp(-v*sum(X(:,j).*X(:,i))+c));

otherwise

SUM=SUM+Alpha(j)*exp(-(sum((X(:,j)-X(:,i)).^2)/(2*sigma^2)));

end

end

end

b=Y(i)-SUM-Epsilon;

B=B+b;

counter=counter+1;

end

if (abs(AA-0)<=Err)&&(BB>Err)&&(BB

SUM=0;

for j=1:l

if Flag(j)>0

switch TKF

case 1

SUM=SUM+Alpha(j)*sum(X(:,j).*X(:,i));

case 2

SUM=SUM+Alpha(j)*(sum(X(:,j).*X(:,i))+c)^p;

case 3

SUM=SUM+Alpha(j)*exp(-(norm(X(:,j)-X(:,i)))^2/(2*sigma^2));

case 4

SUM=SUM+Alpha(j)*exp(-norm(X(:,j)-X(:,i))/(2*sigma^2));

case 5

SUM=SUM+Alpha(j)*1/(1+exp(-v*sum(X(:,j).*X(:,i))+c));

otherwise

SUM=SUM+Alpha(j)*exp(-(sum((X(:,j)-X(:,i)).^2)/(2*sigma^2)));

end

end

end

b=Y(i)-SUM+Epsilon;

B=B+b;

counter=counter+1;

end

end

if counter==0

B=0;

else

B=B/counter;

end

function

y=Regression(Alpha,Flag,B,X,Y,TKF,Para1,Para2,x)

%————————————————————————–

% Regression.m

% 与SVMNR.m函数配套使用的仿真测试函数

% 函数功能:

% 本函数相当于支持向量得到的回归方程的解析方程,输入一个待测试的列向量x,得到一

% 个对应的输出值y

%————————————————————————–

% 输入参数列表

% Alpha 支持向量的加权系数(α-α*)向量

% Flag 1×l标记,0对应非支持向量,1对应边界支持向量,2对应标准支持向量

% B 回归方程中的常数项

% X 输入样本原始数据,n×l的矩阵,n为变量个数,l为样本个数

% Y 输出样本原始数据,1×l的矩阵,l为样本个数

% Para1 核函数中的第一个参数

% Para2 核函数中的第二个参数

% 注:关于核函数参数的定义请见Regression.m和SVMNR.m内部的定义

% x 待测试的原始数据,n×1的列向量

% 输出参数列表

% y 仿真测试的输出值

%%

%———————–核函数参数初始化————————————

switch TKF

case 1

%线性核函数 K=sum(x.*y)

%没有需要定义的参数

case 2

%多项式核函数 K=(sum(x.*y)+c)^p

c=Para1;%c=0.1;

p=Para2;%p=2;

case 3

%径向基核函数 K=exp(-(norm(x-y))^2/(2*sigma^2))

sigma=Para1;%sigma=6;

case 4

%指数核函数 K=exp(-norm(x-y)/(2*sigma^2))

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)/(2*sigma^2)))

sigma=Para1;%sigma=8;

end

%%

%%

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

[X,minX,maxX]=premnmx(X);

x=2*((x-minX)./(maxX-minX))-1;

[Y,minY,maxY]=premnmx(Y);

%%

%%

%———————计算仿真测试的输出值———————————-

l=length(Alpha);

SUM=0;

for i=1:l

if Flag(i)>0

switch TKF

case 1

SUM=SUM+Alpha(i)*sum(x.*X(:,i));

case 2

SUM=SUM+Alpha(i)*(sum(x.*X(:,i))+c)^p;

case 3

SUM=SUM+Alpha(i)*exp(-(norm(x-X(:,i)))^2/(2*sigma^2));

case 4

SUM=SUM+Alpha(i)*exp(-norm(x-X(:,i))/(2*sigma^2));

case 5

SUM=SUM+Alpha(i)*1/(1+exp(-v*sum(x.*X(:,i))+c));

otherwise

SUM=SUM+Alpha(i)*exp(-(sum((x-X(:,i)).^2)/(2*sigma^2)));

end

end

end

y=SUM+B;

%%

%%

%——————–反归一化处理——————————————-

y=postmnmx(y,minY,maxY);

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候……

评论加载中,请稍候…

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134929.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 软件著作权 源码_python申请软件著作权

    软件著作权 源码_python申请软件著作权申请软件著作权时需要清除代码中的注释,可以通过word和Notepad++组合操作来快速的完成1。使用word的插入文件功能合并多个源代码文件,操作方法为:新打开1个word文件,在“插入”标签栏下找到“对象”点击右边的小三角下拉菜单里选择“文件中的文字…”,然后在跳出来的文件选择对话框里选择要合并的文件,如果对话框里没有显示出需要的文件,可能是文件类型过滤器选择的不对,更改为“所有文件…

  • UPS不间断电源原理_不间断电源ups原理

    UPS不间断电源原理_不间断电源ups原理扫描以下二维码加入学习群

  • Windows留后门–教程(五)——shift粘贴键后门

    Windows留后门–教程(五)——shift粘贴键后门一、shift粘贴键后门介绍Shift粘滞键是当用户连按5次shift就会自动弹出的一个程序,其实不光是粘滞键,还有各种辅助功能,这类辅助功能都拥有一个特点就是当用户未进行登录时也可以触发。所以攻击者很有可能通过篡改这些辅助功能的指向程序来达到权限维持的目的。(辅助功能镜像劫持是一样的原理)二、shift粘贴键后门-教程前提条件:假设在攻击的过程中通过利用各种getshell,已经拿到目标服务器administrator权限靶机:windowsServer2012IP:192.168.2

  • servlet九大内置对象之response 的contentType 几种类型

    servlet九大内置对象之response 的contentType 几种类型引言:在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值,以及在spring MVC中如何使用它们来映射请求信息。1. Content-Type MediaType,即是InternetMediaType,互联网媒体类型;也叫做MIME类型…

  • 三菱数据移位指令_三菱plc移位指令用法详解

    三菱数据移位指令_三菱plc移位指令用法详解三菱plc移位指令用法移位指令都是对无符号数进行的处理,执行时只考虑要移位的存储单元中每一位数字的状态,而不管数字的大小(要么为0,要么为1),本类指令在一个输出点对应多个相对固定状态的情况下有广泛的应用。1、位右移SFTR指令2、位左移SFTL指令SFTR,SFTL:连续执行型指令SFTRP,SFTLP:脉冲执行型指令位右移SFTR与位左移SFTL指令编程方式:SFTRPM0M20K16…

  • mysql workbench如何导入数据库_sql数据库脚本导入

    mysql workbench如何导入数据库_sql数据库脚本导入首先,打开MySQLworkbench,先新建数据库(我们会把.sql文件导入之这个数据库),新建数据库过程如下:先点击1处,新建数据库,给数据库起个名字,点击appy,就创建成功了。之后点击2处,就可以看到现有的数据库了。这里圈出来的是我新建的数据库,双击选中这个数据库(双击选中很重要,因为选中之后才能将.sql文件导入这个数据库中)。然后点击左上方的第二个图标(图中圈出来的那…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号