最小二乘支持向量机--LSSVM分类及MATLAB代码实现

最小二乘支持向量机–LSSVM分类及MATLAB代码实现

1. LSSVM算法原理

1.1 支持向量机 (SVM)

目标:支持向量机算法通过在解空间中求解出一个最优超平面,使得解空间的样本能够被此超平面正确分开。最优超平面的几何表示如下图所示,图中实线即为最优的超平面。

在这里插入图片描述
数学模型:

假设存在m mmn nn维的样本{ x k , y k } , y k ∈ { − 1 , 1 } , x k ∈ R n , k = 1 , 2 , 3 ⋯ m \left\{x_{k}, y_{k}\right\}, y_{k} \in\{-1,1\}, x_{k} \in R^{n},k=1,2,3 \cdots m{xk,yk},yk{1,1},xkRn,k=1,2,3m, 则SVM算法的目标函数和不等式约束如下:

min ⁡ W , b , ζ J P ( W , ζ ) = 1 2 W T W + c ∑ k = 1 m ζ k , ( 1 ) \min _{\boldsymbol{W},b, \zeta} J_{P}(\boldsymbol{W}, \zeta)=\frac{1}{2} \boldsymbol{W}^{\mathrm{T}} \boldsymbol{W}+c \sum_{k=1}^{m} \zeta_{k}, (1)W,b,ζminJP(W,ζ)=21WTW+ck=1mζk,(1)

 s.t.  y k ⩾ W T φ ( x k ) + b + ζ k , ( 2 ) \text { s.t. } y_{k} \geqslant \boldsymbol{W}^{\mathrm{T}} \varphi\left(x_{k}\right)+b+\zeta_{k} , (2) s.t. ykWTφ(xk)+b+ζk,(2)
式中,W WW为超平面的法向量,ζ \zetaζ为预测误差值,φ ( x k ) \varphi\left(x_{k}\right)φ(xk)为核函数,c cc为惩罚因子, b bb为常量。

问题:不等式约束的存在,使得SVM算法求解较为困难。

1.2 最小二乘支持向量机 (LSSVM)

LSSVM算法对 (1) 和 (2) 式转换为如下等式,来提高求解问题的速度。

min ⁡ W , b , e J P ( W , e ) = 1 2 W T W + r 2 ∑ k = 1 m e k , ( 3 ) \min _{\boldsymbol{W}, b, e} J_{P}(\boldsymbol{W}, e)=\frac{1}{2} W^{\mathrm{T}} \boldsymbol{W}+\frac{r}{2} \sum_{k=1}^{m} e_{k}, (3)W,b,eminJP(W,e)=21WTW+2rk=1mek,(3)

 s.t.  y k = W T φ ( x k ) + b + e k , ( 4 ) \text { s.t. } y_{k}=\boldsymbol{W}^{\mathrm{T}} \varphi\left(x_{k}\right)+b+e_{k}, (4) s.t. yk=WTφ(xk)+b+ek,(4)

式中,r rr为预测误差的惩罚因子,e ee为SVM预测误差ζ \zetaζ的平方, 即e = ζ 2 e=\zeta^{2}e=ζ2

通过构造拉格朗日变换多项式,进行如下变换:
L ( W , b , e , α ) = J P ( W , e ) − ∑ k = 1 m α k [ W T φ ( x k ) + b + e k − y k ] , ( 5 ) L(\boldsymbol{W}, b, e, \alpha)=J_{P}(\boldsymbol{W}, e)-\sum_{k=1}^{m} \alpha_{k}\left[\boldsymbol{W}^{\mathrm{T}} \varphi\left(x_{k}\right)+b+e_{k}-y_{k}\right], (5)L(W,b,e,α)=JP(W,e)k=1mαk[WTφ(xk)+b+ekyk],(5)

对式 (5) 中的W , b , e k , α k W, b, e_{k}, \alpha_{k}W,b,ek,αk分别求偏导并令导数等于0,即可得到线性方程组,解之可得LSSVM算法的计算公式 (6)。

y ( x ) = ∑ k = 1 m α k K ( x , x k ) + b , ( 6 ) y(x)=\sum_{k=1}^{m} \alpha_{k} K\left(x, x_{k}\right)+b,(6)y(x)=k=1mαkK(x,xk)+b,(6)

式中, K ( x , x k ) K\left(x, x_{k}\right)K(x,xk)为核函数,可取径向基核, 多项式核, 线性核等。

2. LSSVM工具箱安装

LS_SVMlab工具箱可用于解决最小二乘支持向量机的分类以及回归问题。工具箱获取地址为:

http://www.esat.kuleuven.be/sista/lssvmlab

在这里插入图片描述
下载工具箱后,将其添加到MATLAB的工作搜索路径中即可。添加命令如下:

addpath('LSSVMlabv1_8_R2009b_R2011a')

值得注意的是,使用上述命令添加工具箱后,建议在共同的母文件夹下运行代码。

3. LSSVM分类案例

在安装了LSSVM工具箱后,可以用一个简单的二分类案例,检查是否安装成功。代码如下:

% 初始化程序
clear, clc
close all

% 创建数据
X = 2.*rand(30,2)-1;
Y = sort(randi([1,2],30,1));

% 设置参数与训练模型
% 'c' 表示分类,gam与sig2内核平方参数分别为10, 0.5
% 核函数采用 RBF径向基函数
gam = 10;
sig2 = 0.5;
[alpha,b] = trainlssvm({X,Y,'c',gam,sig2,'RBF_kernel'});
Y_hat = simlssvm({X,Y,'c',gam,sig2,'RBF_kernel','preprocess'},{alpha,b},X);
disp('真实值  预测值')
disp([Y, Y_hat])

%绘图
figure('Units' , 'normalized' , ...
    'name' , '预测值类型与实际类型的对比' ,...
    'position' , [0.25 0.25 0.5 0.5] , ...
    'nextplot' , 'add');
plot(1: 30, Y, 'bo', 1:30, Y_hat, 'r*', 'linewidth', 1.0)
xlabel('样本编号'); ylabel('类型'); legend('期望类型' , '预测类型')
title({'LS-SVM模型训练结果' , ['Accuracy = ', num2str( sum(Y == Y_hat)/30 * 100 ), '%']})

如果添加路径成功,则运行得到以下图像:

在这里插入图片描述

4. MATLAB代码

见博客主页


版权声明:本文为qq_57971471原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。