最小二乘支持向量机–LSSVM分类及MATLAB代码实现
文章目录
1. LSSVM算法原理
1.1 支持向量机 (SVM)
目标:支持向量机算法通过在解空间中求解出一个最优超平面,使得解空间的样本能够被此超平面正确分开。最优超平面的几何表示如下图所示,图中实线即为最优的超平面。
数学模型:
假设存在 m m m个 n n n维的样本 { 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},xk∈Rn,k=1,2,3⋯m, 则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=1∑mζ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. yk⩾WTφ(xk)+b+ζk,(2)
式中,
W
W
W为超平面的法向量,
ζ
\zeta
ζ为预测误差值,
φ
(
x
k
)
\varphi\left(x_{k}\right)
φ(xk)为核函数,
c
c
c为惩罚因子,
b
b
b为常量。
问题:不等式约束的存在,使得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=1∑mek,(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 r r为预测误差的惩罚因子, e e e为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=1∑mαk[WTφ(xk)+b+ek−yk],(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=1∑mα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代码
https://download.youkuaiyun.com/download/qq_57971471/87730279