支持向量机--Hard-Vargin Support Vector Machine

为了便于理解Hard-Vargin Support Vector Machine的操作步骤,举例说明d = 1,2时如何实现二分类。

1.  d = 1

x = [-1;0;1];
y = [1; -1;-1];

[m,n] = size(x);
gscatter(x(:,1),zeros(m,1),y)


%% 计算H = yiyjxixj

yy = y*y';
xx = x*x';
h = yy.*xx;
f = -1*ones(m,1);
Aeq= y';
Beq =0;
lb = zeros(m,1);
options = optimoptions('quadprog',...
'Algorithm','interior-point-convex','Display','off');



%% 得到 拉格朗日算子


[alpha,fval,exitflag,output,lambda] = ...
quadprog(h,f,[],[],Aeq,Beq,lb,[],[],options);


%% 计算权重w
w = sum(repmat(alpha.*y,1,n).*x,1);

% 计算b
S  = find(alpha>0.001);
b = 0;
for i = 1:length(S)
b = b + y(S(i)) - w*x(S(i),:)';
i = i+1;
end
b = b/length(S)


figure
gscatter(x(:,1),zeros(m,1),y)
hold on

%% 画出分界线
refline(w,b)




2. d = 2

x = [1,1;2,1;0,6;1,5];
y = [1;1;-1;-1];
[m,n] = size(x);
gscatter(x(:,1),x(:,2),y)

待分类的数据点



%% 计算W和b

yy = y*y';
xx = x*x';
h = yy.*xx;
f = -1*ones(m,1);
Aeq= y';
Beq =0;
lb = zeros(m,1);
options = optimoptions('quadprog',...
'Algorithm','interior-point-convex','Display','off');




[alpha,fval,exitflag,output,lambda] = ...
quadprog(h,f,[],[],Aeq,Beq,lb,[],[],options);




w = sum(repmat(alpha.*y,1,n).*x,1);
S  = find(alpha>0.001);
b = 0;
for i = 1:length(S)
b = b + y(S(i)) - w*x(S(i),:)';
i = i+1;
end
b = b/length(S)


%% 画出分界线

figure
gscatter(x(:,1),x(:,2),y)
px = 0:0.001:6;
py1 = (-1-b-w(1,1)*px)/w(1,2);
py2 = (1-b-w(1,1)*px)/w(1,2);


hold on
plot(px,py1,'r')
plot(px,py2,'r')


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值