楼主: ConEtoiles
9451 8

【求解】关于MATLAB支持向量机的问题 [推广有奖]

  • 0关注
  • 0粉丝

已卖:6份资源

大专生

28%

还不是VIP/贵宾

-

威望
0
论坛币
73 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2286 点
帖子
23
精华
0
在线时间
73 小时
注册时间
2010-4-20
最后登录
2014-5-5

楼主
ConEtoiles 发表于 2010-5-29 12:00:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
从网上下了一个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<C-Err)&&(abs(BB-0)<=Err)
Flag(i)=2;
end
if (abs(AA-0)<=Err)&&(BB>Err)&&(BB<C-Err)
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<C-Err)&&(abs(BB-0)<=Err)
%计算支持向量加权值
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<C-Err)
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.


这是什么情况啊……

在线等高人解答…………
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB 支持向量机 matla atlab Mat MATLAB 支持向量机

沙发
gssdzc 在职认证  发表于 2010-5-29 14:50:16
顶起来。呵呵。。。。。。。

藤椅
kuangfangnan 发表于 2010-6-8 12:55:43
顶起来顶起来

板凳
没爪子的猫 发表于 2010-6-25 14:57:26
我也在找怎么用MATLAB做支持向量机!
求高人知道!

报纸
yvonne142 发表于 2010-6-26 20:31:22
路过,学习当中!!

地板
jeng 发表于 2011-1-13 10:37:47
首先, 已经习惯在人大经济论坛发帖求解却得不到解答~~

我也在学习支持向量机,感谢楼主的这段程序, 虽然没怎么明白怎么用,

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

所以, 你的X应该是 5*250,Y是1*250
运行 SVMNR(X,Y,1e-5,0.1,100), OK






现有一组数据   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.
本文来自: 人大经济论坛 Matlab及其他计量软件专版 版,详细出处参考:http://www.pinggu.org/bbs/viewth ... 1&from^^uid=60150

7
jeng 发表于 2011-1-13 10:41:16
没太明白这个函数的输出变量[Alpha1,Alpha2,Alpha,Flag,B]各代表什么意思,,,,,,
哪个是用SVM做的Y的预测值,这是我想要的

8
jeng 发表于 2011-1-13 10:48:40
继续求解,回归出来后的函数形式是哪个? 程序里好像没看到,,,,

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

本文来自: 人大经济论坛 Matlab及其他计量软件专版 版,详细出处参考:http://www.pinggu.org/bbs/viewth ... 1&from^^uid=60150

9
sovenwcw 发表于 2011-11-9 11:29:44
同顶,输出的参数都是用来干嘛的,回归出来后的函数形式是哪个? 程序里好像没看到,,,,

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

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-24 05:13