使用可视化方法解决统计学习方法中支持向量机的例 7.2

例 7.2 训练数据与 例 7.1 相同。如图 7.4 所示,正实例点是 x1=(3,3)Tx_1=(3,3)^Tx1=(3,3)Tx2=(4,3)Tx_2=(4,3)^Tx2=(4,3)T,负例点是x3=(1,1)Tx_3=(1,1)^Tx3=(1,1)T,试用 算法 7.2 求线性可分支持向量机。

算法 7.2 (线性可分支持向量机学习算法)
输入:线性可分训练集
   T=(x1,y1),(x2,y2),⋯ ,(xN,yN)T={(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)}T=(x1,y1),(x2,y2),,(xN,yN),其中xi∈χ=Rnx_i \in \chi = \R^nxiχ=Rnyi∈Y=−1,+1y_i \in Y = {-1,+1}yiY=1,+1i=1,2,⋯ ,Ni = 1,2,\cdots,Ni=1,2,,N
输出:分离超平面和分类决策函数。
(1)构造并求解约束最优化问题
min⁡α12∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi s.t.∑i=1Naiyj=0  ai⩾0,i=1,2,⋯ ,N \begin{aligned} &\min_{\alpha} \dfrac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j(x_i\cdot x_j) - \sum_{i=1}^{N}\alpha_i \\ &~ s.t. \quad \sum_{i=1}^{N}a_iy_j=0 \\ &\quad \quad ~~a_i \geqslant 0, i=1,2,\cdots,N \end{aligned} αmin21i=1Nj=1Nαiαjyiyj(xixj)i=1Nαi s.t.i=1Naiyj=0  ai0,i=1,2,,N

求解最优解α∗=(α1∗,α2∗,⋯ ,αN∗)T\alpha^*=(\alpha_1^*,\alpha_2^*,\cdots,\alpha_N^*)^Tα=(α1,α2,,αN)T
(2)计算
ω∗=∑i=1Nαi∗yixi(1)\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\omega^* = \sum_{i=1}^N \alpha_i^*y_i x_i \quad \quad\quad\quad\quad\quad(1)ω=i=1Nαiyixi(1)
并选择α∗\alpha^*α的一个正分量αj∗>0\alpha_j^* >0αj>0,计算
b∗=yj−∑i=1Nαi∗yj(xi⋅xj)  (2)\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad \quad \quad \quad \quad \quad \quad \quad b^* = y_j - \sum_{i=1}^N \alpha_i^* y_j(x_i \cdot x_j) \quad ~~ (2)b=yji=1Nαiyj(xixj)  (2)
(3)求得分离超平面
ω∗⋅x+b∗=0 \omega^* \cdot x + b^* = 0 ωx+b=0
分类决策函数:
f(x)=sign(ω∗⋅x+b∗) f(x) = sign(\omega^* \cdot x + b^*)f(x)=sign(ωx+b)
在线性可分支持向量机中, 由式(1)、式(2)可知,w∗w^*wb∗b^*b只依赖于训练数据中对应与αi∗>0\alpha_i^* > 0αi>0 的样本点(xi,yi)(x_i,y_i)(xi,yi),而其他样本点对w∗w^*wb∗b^*b没有影响。我们将训练数据中对应于 αi∗>0\alpha_i^* >0αi>0 的实例点xi∈Rnx_i \in \R^nxiRn 称为支持向量。


min⁡α12∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi=12(18α12+25α22+2α32+42α1α2−12α1α3−14α2α3)−α1−α2−α3 s.t.  α1+α2−α3=0 αi⩾0,i=1,2,3 \begin{aligned} &\min_{\alpha} \dfrac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j(x_i\cdot x_j) - \sum_{i=1}^{N}\alpha_i \\ &\quad\quad= \dfrac{1}{2}(18\alpha_1^2+25\alpha_2^2+2\alpha_3^2+42\alpha_1\alpha_2 -12\alpha_1\alpha_3-14\alpha_2\alpha_3) -\alpha_1-\alpha_2-\alpha_3 \\ & ~s.t. ~~ \alpha_1 + \alpha_2 - \alpha_3 = 0 \\ & ~\quad\quad \alpha_i \geqslant 0, i=1,2,3\\ \end{aligned} αmin21i=1Nj=1Nαiαjyiyj(xixj)i=1Nαi=21(18α12+25α22+2α32+42α1α212α1α314α2α3)α1α2α3 s.t.  α1+α2α3=0 αi0,i=1,2,3

解这一最优化问题,将α3=α1+α2\alpha_3 = \alpha_1 + \alpha_2α3=α1+α2 代入木变函数并记为
s(α1,α2)=4α12+132α22+10α1α2−2α1−2α2 s(\alpha_1, \alpha_2) = 4\alpha_1^2 + \dfrac{13}{2}\alpha_2^2 + 10\alpha_1\alpha_2-2\alpha_1-2\alpha_2s(α1,α2)=4α12+213α22+10α1α22α12α2

α1,α2\alpha_1,\alpha_2α1,α2求偏导数并令其为0,易知s(α1,α2)s(\alpha_1,\alpha_2)s(α1,α2) 在点(32,−1)T(\dfrac{3}{2},-1)^T(23,1)T 取极值,但该点不满足约束条件α2⩾0\alpha_2 \geqslant 0α20,所以最小值应该在边界上达到。
  当α1=0\alpha_1 = 0α1=0 时,最小值s(0,213)=−213s(0,\dfrac{2}{13}) = -\dfrac{2}{13}s(0,132)=132;当α2=0\alpha_2=0α2=0时,最小值s(14,0)=−14s(\dfrac{1}{4},0)=-\dfrac{1}{4}s(41,0)=41,于是s(α1,α2)s(\alpha_1,\alpha_2)s(α1,α2)α1=14,α2=0\alpha_1=\dfrac{1}{4},\alpha_2=0α1=41,α2=0达到最小,此时α3=α1+α2=14\alpha_3= \alpha_1+\alpha_2=\dfrac{1}{4}α3=α1+α2=41
此处使用MATLAB画出目标函数的曲面以及最小值点,如下图所示:

可以看出红色的点对应的α2\alpha_2α2值不满足αi⩾0\alpha_i \geqslant 0αi0的约束条件,两个黑色的点分别为α1=0,α2=0\alpha_1=0,\alpha_2=0α1=0,α2=0 时与目标函数对于的曲面s(α1,α2)s(\alpha_1, \alpha_2)s(α1,α2)相交的点。

可以得出α1∗=α3∗=14\alpha_1^*=\alpha_3^* =\dfrac{1}{4}α1=α3=41对应的实例点x1,x3x_1,x_3x1,x3是支持向量,根据式(1),式(2)计算可得
ω1∗=ω2∗=12 \omega_1^* = \omega_2^* = \dfrac{1}{2}ω1=ω2=21
b∗=−2b^*=-2b=2
分离超平面为
12x(1)+12x(2)−2=0 \dfrac{1}{2}x^{(1)} + \dfrac{1}{2}x^(2)-2=021x(1)+21x(2)2=0
分类决策函数为
f(X)=sign(12x(1)+12x(2)−2) f(X) =sign(\dfrac{1}{2}x^{(1)}+\dfrac{1}{2}x^{(2)}-2)f(X)=sign(21x(1)+21x(2)2)

MATLAB可视化代码如下:

clc,clear

% 绘制曲面
x=linspace(-2,2,25);
y=linspace(-2,2,25);
[alpha1,alpha2]=meshgrid(x,y);
s=4*alpha1.^2+13/2*alpha2.^2+10*alpha1.*alpha2-2*alpha1-2*alpha2;
surf(alpha1,alpha2,s);
hold on

% 添加平面
% 添加竖线
[s,alpha2]=meshgrid(-20:0.1:100,-0.01:0.001:0.01);
alpha1=zeros(size(s))+2;
mesh(alpha1,alpha2,s,'FaceAlpha','0.9','EdgeColor',[0.9290 0.6940 0.1250]);
hold on
[s,alpha2]=meshgrid(-20:0.1:100,-0.01:0.001:0.01);
alpha1=zeros(size(s))-2;
mesh(alpha1,alpha2,s,'FaceAlpha','0.9','EdgeColor',[0.9290 0.6940 0.1250]);
hold on
[s,alpha1]=meshgrid(-20:0.1:100,-0.01:0.001:0.01);
alpha2=zeros(size(s))+2;
mesh(alpha1,alpha2,s,'FaceAlpha','0.9','EdgeColor',[0.4940 0.1840 0.5560]);
hold on
[s,alpha1]=meshgrid(-20:0.1:100,-0.01:0.001:0.01);
alpha2=zeros(size(s))-2;
mesh(alpha1,alpha2,s,'FaceAlpha','0.9','EdgeColor',[0.4940 0.1840 0.5560]);
hold on
% 添加横线
[alpha1,alpha2]=meshgrid(-2:0.1:2,-0.01:0.001:0.01);
s=zeros(size(alpha1))-20;
mesh(alpha1,alpha2,s,'FaceAlpha','0.9','EdgeColor',[0.9290 0.6940 0.1250]);
hold on
[alpha1,alpha2]=meshgrid(-2:0.1:2,-0.01:0.001:0.01);
s=zeros(size(alpha1))+100;
mesh(alpha1,alpha2,s,'FaceAlpha','0.9','EdgeColor',[0.9290 0.6940 0.1250]);
hold on
[alpha2,alpha1]=meshgrid(-2:0.1:2,-0.01:0.001:0.01);
s=zeros(size(alpha2))-20;
mesh(alpha1,alpha2,s,'FaceAlpha','0.01','EdgeColor',[0.4940 0.1840 0.5560]);
hold on
[alpha2,alpha1]=meshgrid(-2:0.1:2,-0.01:0.001:0.01);
s=zeros(size(alpha2))+100;
mesh(alpha1,alpha2,s,'FaceAlpha','0.01','EdgeColor',[0.4940 0.1840 0.5560]);
hold on

% 绘制点
Attribute_Set = {'LineWidth',1.5};
plot3(0,2/13,0,'.','MarkerSize',40,'Color','black');
plot3(1/4,0,0,'.','MarkerSize',40,'Color','black');
plot3(3/2,-1,0,'.','MarkerSize',40,'Color','red');

% 添加函数文本
text(-1.5,-0.25,120,'$s(\alpha_1,\alpha_2)=4\alpha_1^2+\frac{13}{2}\alpha_2^2+10\alpha_1\alpha_2-2\alpha_1-2\alpha_2$','interpreter','latex','FontSize',18);

% 添加坐标文本
text(-0.5,2/13,6,'$s(0,\frac{2}{13})=-\frac{2}{13}$','interpreter','latex','FontSize',18,'Color','black');
text(1/4,0,6,'$s(\frac{1}{4},0)=-\frac{1}{4}$','interpreter','latex','FontSize',18,'Color','black');
text(3/2,-1,6,'$s(\frac{3}{2},-1)=-\frac{1}{2}$','interpreter','latex','FontSize',18,'Color','red');

% 添加坐标轴标签
x1=xlabel('$\alpha_1$','interpreter','latex','FontSize',18); %x轴标题
x2=ylabel('$\alpha_2$','interpreter','latex','FontSize',18); %y轴标题
x3=zlabel('$s$','interpreter','latex','FontSize',18); %z轴标题
set(x1,'Position',[0.75,-3.5,0])
set(x2,'Position',[3,-1,0])
set(x3,'Position',[-2.3,-2,75])
set(x3,'Rotation',-8); %z轴名称旋转
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值