function model = svm0311(data,options)
%SVM0311 解决2分类的SVM方法,优化使用matlab优化工具箱quadprog函数实现
%by LiFeiteng email:lifeiteng0422@gmail.com
%Reference: stptool
% Pattern Recognition and Machine Learning P333 7.32-7.37
% input aruments
%-------------------------------------------
tic
% data=c2s(data);
[dim,num_data]=size(data.X);
% if nargin < 2, options=[]; else options=c2s(options); end
if ~isfield(options,'ker'), options.ker = 'linear'; end
if ~isfield(options,'arg'), options.arg = 1; end
if ~isfield(options,'C'), options.C = inf; end
if ~isfield(options,'norm'), options.norm = 1; end
if ~isfield(options,'mu'), options.mu = 1e-12; end
if ~isfield(options,'eps'), options.eps = 1e-12; end
X = data.X;
t = data.y;
% t(t==2) = -1;
% Set up QP task
%----------------------------
K = X'*X;
T = t'*t;% 注意t是横向量
H = K.*T;
save('H0311.mat','H')
H = H + options.mu*eye(size(H));
f = -ones(num_data,1);
Aeq = t;
beq = 0;
lb = zeros(num_data,1);
ub = options.C*ones(num_data,1);
x0 = zeros(num_data,1);
qp_options = optimset('Display','off');
[Alpha,fval,exitflag] = quadprog(H, f,[],[], Aeq, beq, lb, ub, x0, qp_options);
inx_sv = find(Alpha>options.eps);
% compute bias
%--------------------------
% take boundary (f(x)=+/-1) support vectors 0 < Alpha < C
b = 0;
inx_bound = find( Alpha > options.eps & Alpha < (options.C - options.eps));
Nm = length(inx_bound);
for n = 1:Nm
tmp = 0;
for m = 1:length(inx_sv) %PRML7.37
tmp = tmp+Alpha(inx_sv(m))*t(inx_sv(m))*K(inx_bound(n),inx_sv(m));
end
b = b + t(inx_bound(n))-tmp;
end
b = b/Nm;
model.b = b;
%-----------------------------------------
w = zeros(dim,1);
for i = 1:num_data
w = w+ Alpha(i)*t(i)*X(:,i);%PRML 7.29
end
%% 画图,画出原始的分布
figure()
gscatter(X(1,:),X(2,:),t,'rb','.');
hold on
h(3) = plot(X(1, inx_sv),X(2, inx_sv),'ko'); % 画出支持向量
hold on
ydata = 0:0.01:1;
xdata = (-b - w(2)*ydata)/w(1);
plot(xdata,ydata,'LineWidth', 2);
%
% d = 0.2;
% [x1Grid,x2Grid] = meshgrid(min(X(:,1)):d:max(X(:,1)),...
% min(X(:,2)):d:max(X(:,2)));
% xGrid = [x1Grid(:),x2Grid(:)];
%
%
%
% margin = 1/norm(w);
% %-------------------------------------------
% %此处与stprtool保持接口一致 用于画图展示等
% model.Alpha = Alpha( inx_sv );
% model.sv.X = data.X(:,inx_sv );
% model.sv.y = data.y(inx_sv );
% model.sv.inx = inx_sv;
% model.nsv = length( inx_sv );
% model.margin = margin;
% model.exitflag = exitflag;
% model.options = options;
% model.kercnt = num_data*(num_data+1)/2;
% model.trnerr = cerror(data.y,svmclass(data.X, model));
% model.fun = 'svmclass';
%
% model.W = model.sv.X*model.Alpha;
%
% % used CPU time
model.cputime=toc;
return;
支持向量机线性可分matlab程序
需积分: 31 138 浏览量
2018-05-02
22:55:41
上传
评论 2
收藏 5KB ZIP 举报
农夫山泉2号
- 粉丝: 7378
- 资源: 17
最新资源
- ### 1、项目介绍 本项目Scrapy进行数据爬取,并使用Django框架+PyEcharts实现可视化大屏 效果如下:
- # 微信小程序-健康菜谱 基于微信小程序的一个查找检索菜谱的应用 ### 效果 !动态图(./res/gif/demo
- zabbix-get命令包资源
- 毕业设计,基于PyQt5实现的可视化界面的Python车牌自动识别系统源码
- 26-朴素贝叶斯分类.rar
- 没有安Matlab 也可以 生成FIR抽头系数工具.py
- python烟花代码.rar
- 实验目的: 1.构建基于verilog语言的组合逻辑电路和时序逻辑电路; 2.掌握verilog语言的电路设计技巧 3.完成如
- 扩展卡尔曼滤波matlab仿真
- 3_base.apk.1
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈