matlab运行支持向量机不出f,【求解】关于MATLAB支持向量机的问题

从网上下了一个MATLAB支持向量机的程序

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% SVMNR.m

% Support Vector Machine for Nonlinear Regression

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [Alpha1,Alpha2,Alpha,Flag,B]=SVMNR(X,Y,Epsilon,C,D)

% ChengAihua,PLA Information Engineering University,ZhengZhou,China

% Email:aihuacheng@gmail.com

% All rights reserved

%本程序使用支持向量机法,实现对数据的非线性回归

%输入参数列表

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

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

% Epsilon ε不敏感损失函数的参数,Epsilon越大,支持向量越少

% C 惩罚系数,C过大或过小,泛化能力变差

% 注意:核函数的设定和修改在函数内部进行,数据预处理在函数外部进行

%输出参数列表

% Alpha1 α系数

% Alpha2 α*系数

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

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

% B 回归方程中的常数项

%第一步:构造K矩阵

[n,l]=size(X);

K=zeros(l,l);

for i=1:l

for j=1:l

xi=X(:,i);

xj=X(:,j);

%K(i,j)=sum(xi.*xj);

%K(i,j)=(sum(xi.*xj)+1)^20;%注意:核函数在此定义!

K(i,j)=exp(-(sum((xi-xj).^2)/D));

%K(i,j)=exp(-(sum((xi-xj))/100));

end

end

%第二步:构造二次规划模型参数H,Ft,Aeq,Beq,lb,ub

H=[K,-K;-K,K];

H=(H+H')/2;

Ft=[Epsilon*ones(1,l)-Y,Epsilon*ones(1,l)+Y];

Aeq=[ones(1,l),-ones(1,l)];

Beq=0;

lb=eps.*ones(2*l,1);

ub=C*ones(2*l,1);

%第三步:调用优化工具箱quadprog函数求解二次规划

OPT=optimset;

OPT.LargeScale='off';

OPT.Display='off';

[Gamma,Obj]=quadprog(H,Ft,[],[],Aeq,Beq,lb,ub,[],OPT);

%[Gamma,Obj]=fmincon('myfun',5.*ones(18,1),[],[],Aeq,Beq,lb,ub);

%第四步:整理输出参数

Alpha1=(Gamma(1:l,1))';

Alpha2=(Gamma((l+1):end,1))';

Alpha=Alpha1-Alpha2;

Flag=2*ones(1,l);

%第五步:支持向量的分类

Err=0.0000000000001;

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

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

%计算支持向量加权值

SUM=0;

for j=1:l

if Flag(j)>0

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

%SUM=SUM+Alpha(j)*(sum(X(:,j).*X(:,i))+1)^20;

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

%SUM=SUM+Alpha(j)*exp(-(sum((X(:,j)-X(:,i)))/100));

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

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

%SUM=SUM+Alpha(j)*(sum(X(:,j).*X(:,i))+1)^20;

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

%SUM=SUM+Alpha(j)*exp(-(sum((X(:,j)-X(:,i)))/100));

end

end

b=Y(i)-SUM+Epsilon;

B=B+b;

counter=counter+1;

end

end

B=B/counter;

现有一组数据   250个样本  X是5维的 Y是1维的

想用这个程序拟合出来一个Y与X的函数关系……

程序的注释行里面说Y是输出数据 是l*l维的 l是样本个数…… 但是我们的数据Y只是250*1的呀。。。

用这个方法这样可行么……我尝试了一下 就代一组样本进去  然后把数据带入的时候它说

>> SVMNR(X',Y,1e-5,0.1,100)

??? Error using ==> SVMNR

Too many input arguments.

这是什么情况啊……

在线等高人解答…………

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值