【求解】关于MATLAB支持向量机的问题-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 软件培训>>

Matlab软件培训

>>

【求解】关于MATLAB支持向量机的问题

【求解】关于MATLAB支持向量机的问题

发布:ConEtoiles | 分类:Matlab软件培训

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

经管之家新媒体交易平台

提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

提供微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

从网上下了一个MATLAB支持向量机的程序%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%SVMNR.m%SupportVectorMachineforNonlinearRegression%支持向量机非线性回归通用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<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.
这是什么情况啊……
在线等高人解答…………
「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-819228-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
经管之家 人大经济论坛 大学 专业 手机版