SVM支持向量机——MATLAB在数学建模中的应用

数据建模及MATLAB实现(三)

随着信息技术的发展和成熟,各行业积累的数据越来越多,因此需要通过数据建模的方法,从看似杂乱的海量数据中找到有用的信息。

支持向量机(SVM)

支持向量机(Support Vector Machine,SVM)是新一代的基于统计理论的学习系统。SVM按照监督学习的方式,将训练集按照类别分开,或者是预测新的训练点所对应的类别。

SVM基本思想

SVM目的是构建一个分割两类的超平面,并且令这个超平面使得两类的分割达到最大化。以一个很大的边缘分隔两个类可以使得期望泛化误差最小化——即当出现新的样本时分类错误的概率尽可能得小。

一般来说,两类之间最中间的一个隔板分类错误概率最小,因此,在SVM中,我们也用两类之间的超平面 ω T x i + b = 0 \omega^Tx_i+b=0 ωTxi+b=0作为两类的隔板,而 ω T x i + b = α \omega^Tx_i+b=\alpha ωTxi+b=α ω T x i + b = − α \omega^Tx_i+b=-\alpha ωTxi+b=α分别是两类的平行的边界平面。边界平面,即与分类器平面平行且穿过数据集中的至少一个点的超平面。但边界平面的选择有许多种,要让超平面分割的准确,需要让两个边界平面的距离最大化,也就是边缘最大化。“通过SVM学习”的含义就是找到最大化边缘的超平面。

SVM理论基础

首先,假设存在一个容量为 n n n的训练集样本 { ( x i , y i ) , i = 1 , 2 , ⋯   , n } \{(x_i,y_i),i=1,2,\cdots,n\} {(xi,yi),i=1,2,,n}由两个类别组成,若 x i x_i xi属于第一类,则记 y i = 1 y_i=1 yi=1;若 x i x_i xi属于第二类,则记 y i = − 1 y_i=-1 yi=1

若存在分类超平面:
ω T x i + b = 0 \omega^Tx_i+b=0 ωTxi+b=0
则能够将样本正确的分为两类,即相同类别的样本都都落在分类超平面的同一侧。即满足
{ ω T x i + b ≥ α     y i = 1 ω T x i + b ≤ − α     y i = − 1 α > 0 \left\{ \begin{aligned} \omega^Tx_i+b&\ge\alpha \ \ \ y_i=1\\ \omega^Tx_i+b&\le-\alpha \ \ \ y_i=-1\\ \alpha&>0 \end{aligned} \right. ωTxi+bωTxi+bαα   yi=1α   yi=1>0
两边同除以 α \alpha α则可表示为
{ ω T x i + b ≥ 1     y i = 1 ω T x i + b ≤ − 1     y i = − 1 \left\{ \begin{aligned} \omega^Tx_i+b&\ge1 \ \ \ y_i=1\\ \omega^Tx_i+b&\le-1 \ \ \ y_i=-1 \end{aligned} \right. {ωTxi+bωTxi+b1   yi=11   yi=1
可以综合表达为
y i ( ω T x i + b ) ≥ 1 y_i(\omega^Tx_i+b)\ge1 yi(ωTxi+b)1
而超平面之间的距离,即边缘可表示为
2 ∣ ∣ ω T ∣ ∣ \frac{2}{||\omega^T||} ∣∣ωT∣∣2
则规划问题可表示为
m a x : 2 ∣ ∣ ω ∣ ∣ max:\frac{2}{||\omega||} max:∣∣ω∣∣2
取倒数得
m i n : ∣ ∣ ω ∣ ∣ 2 min:\frac{||\omega||}{2} min:2∣∣ω∣∣
得到最终目标规划问题:
m i n : ∣ ∣ ω ∣ ∣ 2 s . t .      y i ( ω T x i + b ) ≥ 1 min:||\omega||^2\\ s.t.\ \ \ \ y_i(\omega^Tx_i+b)\ge1 min:∣∣ω2s.t.    yi(ωTxi+b)1
最后利用拉格朗日对偶理论,将该问题转化为对偶问题,使用二次规划方法求解,求得最优的 ω ∗ \omega^* ω b ∗ b^* b,构造最优分类函数 f ( x ) f(x) f(x)

在输入空间中,若数据不是线性可分的,支持向量机通过非线性映射 ∅ : R n → F \varnothing:R^n\rightarrow F :RnF将数据映射到某个点积空间 F F F,然后在点积空间中执行上述线性算法。在文献中,这一函数称为“核函数”。

支持向量机MATLAB程序设计

支持向量机MATLAB程序设计——SVM.m如下:

function [x,W,R]=SVM(X0)
for i=1:3
    X(:,i)=(X0(:,i)-mean(X0(:,i)))/std(X0(:,i));
end
[m,n]=size(X);
e=ones(m,1);
D=[X0(:,4)];
B=zeros(m,m);
C=zeros(m,m);
for i =1:m
    B(i,i)=1;
    C(i,i)=D(i,1);
end
A=[-X(:,1).*D,-X(:,2).*D,-X(:,3).*D,D,-B];
b=-e;
f=[0,0,0,0,ones(1,m)];
lb=[-inf,-inf,-inf,-inf,zeros(1,m)]';
x=linprog(f,A,b,[],[],lb);
W=[x(1,1),x(2,1),x(3,1)];
CC=x(4,1);
R1=X*W'-CC;
R2=sign(R1);
R=[R1,R2];
  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
支持向量机(Support Vector Machine, SVM)是一种常用的机器学习算法,用于进行分类和回归任务。在 SVM ,我们尝试找到一个超平面,将两类样本分开,并且使离超平面最近的样本点与超平面的距离最大化。这些离超平面最近的样本点被称为支持向量。 为了求解 SVM 的模型参数,我们需要解决一个优化问题。这个问题的目标是最大化支持向量到超平面的距离,同时要求分类的准确性。在这个优化问题,我们常常使用 KKT 条件来求解模型参数。然而,在求解参数 b 的值时可能会遇到死锁的情况,因为我们需要知道支持向量的值才能求解 b,而要求解支持向量的值又需要知道 b 的值。为了解决这个问题,我们引入了自由支持向量,其值为 0。通过利用自由支持向量,我们可以求解出 b 的值。 此外,SVM 还可以使用核函数来处理非线性可分的情况。核函数能够将数据映射到高维空间,使得原本线性不可分的数据在高维空间变得线性可分。常见的核函数有线性核函数、多项式核函数和高斯核函数等。[4.1] 然而,SVM 对于大规模数据集的训练可能会变得非常缓慢,尤其是在特征数量较多的情况下。如果特征数量较多而样本数量较少,SVM 的求解过程会变得非常耗时。为了解决这个问题,可以采用逻辑回归或者不带核函数的支持向量机来处理。另外,如果特征的取值范围差异较大,可以考虑进行特征缩放,以提高 SVM 的性能。 总之,支持向量机是一种强大的机器学习算法,具有良好的分类和回归性能。同时,通过核函数的应用SVM 还可以处理非线性可分的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值