支持向量机专题

摘自林轩田机器学习技法
(1)计算一个样本点到一个平面的距离,样本x到超平面的距离就可以表示为
W T ∥ W ∥ ( x − x ′ ) = 1 ∥ W ∥ ( W T x + b ) \frac{W^T}{\lVert W \lVert}(x-x')=\frac{1}{\lVert W \lVert}(W^Tx+b) WWT(xx)=W1(WTx+b)

(2)本来只需要
W T x + b ≥ 0 或 者 W T x + b ≤ 0 W^Tx+b\geq0或者W^Tx+b\leq0 WTx+b0WTx+b0
现在变成了
W T x + b ≥ 1 或 者 W T x + b ≤ − 1 W^Tx+b\geq1或者W^Tx+b\leq-1 WTx+b1WTx+b1
(3)SVM和正则化的关系

xx最小化限制
正则化 E i n E_{in} Ein W T W ≤ C W^TW\leq C WTWC
SVM W T W W^TW WTW E i n = 0 E_{in}=0 Ein=0

(4)SVM表现结果好的原因
特征转换可以得到复杂的平面,使得模型有更强的分类能力,但是会使VC维变大
SVM通过限制胖胖的边界使得VC维减小
d v c ( A ρ ) ≤ m i n ( R 2 ρ 2 , d ) + 1 ≤ d + 1 d_{vc}(A_{\rho}) \leq min(\frac{R^2}{\rho^2},d)+1 \leq d+1 dvc(Aρ)min(ρ2R2,d)+1d+1

附上matlab程序

clc;
clear all;
close all;
%QP求解支持向量机

addpath(genpath(pwd));

[data,label,K] = NewDataSet(1);%读取数据集
[Data] = data_standard(data);%数据集各维度属性归一化

data=data(1:100,:);
label=label(1:100);
label(51:100)=label(51:100)-3;
Y=label;
X=data;
[m,n] = size(X);


H = eye(n);
H = [zeros(1,n);H];
H = [zeros(n+1,1) H];
p = zeros(n+1,1);

%不等式约束
A = - repmat(Y,1,n+1).*[ones(m,1) X];
b = -ones(m,1);

%优化起始点
 u0=rand(5,1); 

 %求解支持向量机
[w,val] = quadprog(H,p,A,b,[],[]);

%预测    
predict=[ones(m,1) X]*w;

(5)为什么要讲SVM的对偶问题?
我们通过特征转换将样本转换到高维空间,需要解的变量会比较多,是否可以使得变量的个数固定

原始SVM对偶SVM
d+1个变量N个变量
N个变量N+1个变量

对偶svm的思路,是先将上面的有限制性的QP问题转换成没有限制的QP问题
m i n b , w ( m a x α L ( b , w , α ) ) \mathop{min}\limits_{b,w}(\mathop{max}\limits_{\alpha} L(b,w,\alpha)) b,wmin(αmaxL(b,w,α))
然后将最小最大化转换成最大最小化
m i n b , w ( m a x α L ( b , w , α ) ) ≥ m a x α ( m i n b , w L ( b , w , α ) ) \mathop{min}\limits_{b,w}(\mathop{max}\limits_{\alpha} L(b,w,\alpha)) \geq \mathop{max}\limits_{\alpha}(\mathop{min}\limits_{b,w} L(b,w,\alpha)) b,wmin(αmaxL(b,w,α))αmax(b,wminL(b,w,α))
最终把b和w都消掉,变成了关于aplha的优化问题,优化变成了N*N,这只与样本的个数有关,但是注意对偶问题的Q矩阵很大,所以才有了SMO解法。

(6)SVM和PLA的关系
W s v m = ∑ n α n y n z n W_{svm}=\sum _ n \alpha_{n}y_{n}z_{n} Wsvm=nαnynzn

W p l a = ∑ n β n y n z n W_{pla}=\sum _ n \beta_{n}y_{n}z_{n} Wpla=nβnynzn

这说明模型参数都可以用资料表示出来,SVM用支撑向量SV来表示模型参数
PLA用当前已分错误样本表示模型参数

(7)注意边界上的点,不一定都是支持向量,只有alpha大于0的样本才是支持向量。
(8)核技巧
g ( x ) = s i g n ( w T ϕ ( x ) + b ) = s i g n ( ∑ n = 1 N α n y n K ⋅ n + b ) g(x)=sign(w^T \phi(x)+b)=sign(\sum_{n=1}^N \alpha_{n}y_{n}K_{ \cdot n} +b) g(x)=sign(wTϕ(x)+b)=sign(n=1NαnynKn+b)
b = y s − w T z s = y s − ∑ n = 1 N α n y n K ( x n , x s ) b=y_{s}-w^T z_{s}=y_{s}-\sum_{n=1}^N \alpha_{n}y_{n}K(x_{n},x_{s}) b=yswTzs=ysn=1NαnynK(xn,xs)
多项式核
K Q ( x , x ′ ) = ( ξ + γ x T x ) Q K_{Q}(x,x_{'})=( \xi + \gamma x^Tx)^Q KQ(x,x)=(ξ+γxTx)Q

gamma
gamma不能取太大

clc;
clear all;
close all;

%自定义核函数

%1 在单位圆内生成一组随机点。将第一和第三象限中的点标记为属于正类,将第二和第四象限中的点标记为属于负类。

rng(1);  % For reproducibility
n = 100; % Number of points per quadrant

r1 = sqrt(rand(2*n,1));                     % Random radii
t1 = [pi/2*rand(n,1); (pi/2*rand(n,1)+pi)]; % Random angles for Q1 and Q3
X1 = [r1.*cos(t1) r1.*sin(t1)];             % Polar-to-Cartesian conversion

r2 = sqrt(rand(2*n,1));
t2 = [pi/2*rand(n,1)+pi/2; (pi/2*rand(n,1)-pi/2)]; % Random angles for Q2 and Q4
X2 = [r2.*cos(t2) r2.*sin(t2)];

X = [X1; X2];        % Predictors
Y = ones(4*n,1);
Y(2*n + 1:end) = -1; % Labels

figure;
gscatter(X(:,1),X(:,2),Y);
title('Scatter Diagram of Simulated Data')


%2 训练数据时,进行了标准化
Mdl1 = fitcsvm(X,Y,'KernelFunction','mysigmoid1','Standardize',true);

%3 绘制边界
    % Compute the scores over a grid
d = 0.02; % Step size of the grid
[x1Grid,x2Grid] = meshgrid(min(X(:,1)):d:max(X(:,1)),...
    min(X(:,2)):d:max(X(:,2)));
xGrid = [x1Grid(:),x2Grid(:)];        % The grid
[~,scores1] = predict(Mdl1,xGrid); % The scores

figure;
h(1:2) = gscatter(X(:,1),X(:,2),Y);
hold on
h(3) = plot(X(Mdl1.IsSupportVector,1),...
    X(Mdl1.IsSupportVector,2),'ko','MarkerSize',10);
    % Support vectors
contour(x1Grid,x2Grid,reshape(scores1(:,2),size(x1Grid)),[0 0],'k');
    % Decision boundary
title('Scatter Diagram with the Decision Boundary')
legend({'-1','1','Support Vectors'},'Location','Best');
hold off


%计算样本样本外方差
CVMdl1 = crossval(Mdl1);
misclass1 = kfoldLoss(CVMdl1);
misclass1


function G = mysigmoid1(U,V)
% Sigmoid kernel function with slope gamma and intercept c
gamma = 0.5;
c = -1;
G = tanh(gamma*U*V' + c);
end

在这里插入图片描述

(9)选择核函数的原则
如果想要简单的边界,就选用线性核Linear,缺点选参数比较困难,大Q不是很好用
如果想要复杂的边界,就选用高斯核Gauss,太powerful容易过拟合
其实核函数是一种相似性
K = Z Z T = [ z 1 , z 2 , ⋯   , z N ] T [ z 1 , z 2 , ⋯   , z N ] K=ZZ^T=[z_{1}, z_{2} ,\cdots,z_{N}]^T[z_{1}, z_{2} ,\cdots,z_{N}] K=ZZT=[z1,z2,,zN]T[z1,z2,,zN]
(10)放松的SVM
这是允许有犯错的的,但是要区分小错和大错,选择把错误记录下来
1 2 w T w + C ∑ n = 1 N ξ n \frac{1}{2}w^Tw+C\sum_{n=1}^N \xi_{n} 21wTw+Cn=1Nξn
y n ( w T z n + b ) ≥ 1 − ξ n y_{n}(w^Tz_{n}+b) \geq1-\xi_{n} yn(wTzn+b)1ξn
ξ n ≥ 0 \xi_{n} \geq 0 ξn0
C大一些说明容许犯错少,C大一些说明允许犯错大。
对于sv一共分为两类
(1) 0 < α n < C 0<\alpha_{n}<C 0<αn<C
这是自由支持向量,没有犯错正好在边界上
(2) α n = C \alpha_{n}=C αn=C
这是在margin内的支持向量,但是这也分两种情况
(2.1) 0 < ξ n < 1 0<\xi_{n}<1 0<ξn<1这是没有犯错的
(2.2) 1 < ξ n < 2 1<\xi_{n}<2 1<ξn<2这是分类错误的
(11)选核函数的参数
应该选支持向量少的模型,因为根据留一法,样本内的误差为 E l o o c v ≤ s v N E_{loocv} \leq \frac{sv}{N} EloocvNsv
(12)逻辑回归和svm的关系
损失函数不同,svm的损失函数 m a x ( 1 − y s , 0 ) max(1-ys,0) max(1ys,0)
逻辑回归的损失函数为 m a x ( 1 + e x p ( y s ) ) max(1+exp(ys)) max(1+exp(ys))
核svm近似z空间的逻辑回归
(13)svm的软输出
综合svm和逻辑回归的特性,将svm的预测比作新的特征
( A ( w s v m ϕ ( x ) + b s v m ) + B ) (A(w_{svm}\phi(x)+b_{svm})+B) (A(wsvmϕ(x)+bsvm)+B)
(14)什么时候w可以写成资料的线性组合
带有L2正则化的线性模型
(15)SVR这个是回归

m i n 1 2 w T w + C ∑ n = 1 N ( ξ n ↓ + ξ n ↑ ) min \frac{1}{2}w^Tw+C \sum_{n=1}^N(\xi_n^\downarrow+\xi_n^\uparrow) min21wTw+Cn=1N(ξn+ξn)

− ϵ − ξ n ↓ ≤ y n − w T z n − b ≤ ϵ + ξ ↑ , ξ n ↓ ≥ 0 , ξ n ↑ ≥ 0 -\epsilon-\xi_n^\downarrow \leq y_{n}-w^Tz_{n}-b \leq \epsilon+\xi^\uparrow,\xi_n^\downarrow \geq0,\xi_n^\uparrow\geq0 ϵξnynwTznbϵ+ξξn0,ξn0
SVR是稀疏模型,用的
e r r ( y , s ) = m a x ( 0 , ∣ s − y ∣ − ϵ ) 作 为 误 差 err(y,s)=max(0,|s-y|-\epsilon)作为误差 err(y,s)=max0syϵ)
最终的解为 w = ∑ n = 1 N β n z n , 其 中 β = ( λ I + K ) − 1 y w=\sum_{n=1}^N \beta_{n}z_{n},其中\beta=(\lambda I+K)^{-1}y w=n=1Nβnzn,β=(λI+K)1y这是N ∗ * N的
原始的 w = ( λ I + x T x ) − 1 x T y w=(\lambda I+x^Tx)^{-1}x^Ty w=(λI+xTx)1xTy这是d ∗ * d的

LIBLINEARLIBSVM
SVM核SVM
线性ridge回归SVR
逻辑回归概率svm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值