支持向量机人脸识别matlab,支持向量机SVM的MATLAB实现

1.支持向量机

Support Vector Machine,SVM。

1.1分类思想

以结构化风险最小为原则,兼顾训练误差与测试误差的最小化。

学习算法:

序列最小最优化算法SMO

2. SVM种类

2.1 线性可分支持向量机

特点:

训练数据线性可分;策略为硬间隔最大化;线性分类器。

模型

分类决策函数:

f ( x ) = sign ⁡ ( w ∗ ⋅ x + b ∗ ) f(x)=\operatorname{sign}\left(w^{*} \cdot x+b^{*}\right)f(x)=sign(w∗⋅x+b∗)

分类超平面:

w ∗ ⋅ x + b ∗ = 0 w^{*} \cdot x+b^{*} = 0w∗⋅x+b∗=0

定义超平面关于样本点( x i , y i ) (x_i, y_i)(xi​,yi​)的函数间隔为:

γ ^ i = y i ( w ⋅ x i + b ) \hat{\gamma}_{i}=y_{i}\left(w \cdot x_{i}+b\right)γ^​i​=yi​(w⋅xi​+b)

定义超平面关于样本点( x i , y i ) (x_i, y_i)(xi​,yi​)的几何间隔:

γ i = y i ( w ∥ w ∥ ⋅ x i + b ∥ w ∥ ) \gamma_{i}=y_{i}\left(\frac{w}{\|{w}\|} \cdot x_{i}+\frac{b}{\|w\|}\right)γi​=yi​(∥w∥w​⋅xi​+∥w∥b​)

几何距离是真正的点到面的距离。

定义所有样本点到面的距离的最小值:

γ = min ⁡ i = 1 , … , N γ i \gamma=\min _{i=1, \ldots, N} \gamma_{i}γ=i=1,…,Nmin​γi​

间隔最大化:对训练集找到几何间隔最大的超平面,也就是充分大的确信度对训练数据进行分类。

以下通过最大间隔法和对偶法进行实现:

最大间隔法:

1)构造约束最优化函数

max ⁡ w , b γ  s.t.  y i ( w ∥ w ∥ ⋅ x i + b ∥ w ∥ ) ⩾ γ , i = 1 , 2 , ⋯   , N \begin{aligned} &\max _{w, b} \quad \gamma\\ &\text { s.t. } \quad y_{i}\left(\frac{w}{\|w\|} \cdot x_{i}+\frac{b}{\|w\|}\right) \geqslant \gamma, \quad i=1,2, \cdots, N \end{aligned}​w,bmax​γs.t.yi​(∥w∥w​⋅xi​+∥w∥b​)⩾γ,i=1,2,⋯,N​

如果假设函数间隔γ ^ = ∣ ∣ w ∣ ∣ γ = 1 \hat\gamma = ||w||\gamma = 1γ^​=∣∣w∣∣γ=1,易得

上述等价于:

min ⁡ 1 2 ∥ ω ∥  s.t.  y i ( w x i + b ) − 1 ≥ 0 \begin{aligned} &\min \quad \frac{1}{2}\|\omega\|\\ &\text { s.t. } \quad y_{i}\left(w x_{i}+b\right)-1 \geq 0 \end{aligned}​min21​∥ω∥s.t.yi​(wxi​+b)−1≥0​

2)解约束函数,即获得超平面

w ∗ ⋅ x + b ∗ = 0 w^{*} \cdot x+b^{*} = 0w∗⋅x+b∗=0

2.2 线性支持向量机

特点:

训练数据近似可分;策略为软间隔最大化;线性分类器。

线性不可分指,某些样本点不能满足函数间隔γ ^ ≥ 1 \hat\gamma \geq1γ^​≥1的约束条件。

引入松弛因子ξ \xiξ 和惩罚参数C CC,得

min ⁡ w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i  s.t.  y i ( w ⋅ x i + b ) ⩾ 1 − ξ i , i = 1 , 2 , ⋯   , N ξ i ⩾ 0 , i = 1 , 2 , ⋯   , N \begin{aligned} &\min _{w, b, \xi} \quad \frac{1}{2}\|w\|^{2}+C \sum_{i=1}^{N} \xi_{i}\\ &\text { s.t. } \quad y_{i}\left(w \cdot x_{i}+b\right) \geqslant 1-\xi_{i}, \quad i=1,2, \cdots, N\\ &\xi_{i} \geqslant 0, \quad i=1,2, \cdots, N \end{aligned}​w,b,ξmin​21​∥w∥2+Ci=1∑N​ξi​s.t.yi​(w⋅xi​+b)⩾1−ξi​,i=1,2,⋯,Nξi​⩾0,i=1,2,⋯,N​

优化目标,一方面是使得间隔尽量大,另一方面使得误分点的个数尽量少。

学习算法:

1.构建凸二次规划问题:

min ⁡ α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 N α i  s.t.  ∑ i = 1 N α i y i = 0 0 ⩽ α i ⩽ C , i = 1 , 2 , ⋯   , N \begin{array}{ll} \min \limits_{\alpha} & \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)-\sum_{i=1}^{N} \alpha_{i} \\ \text { s.t. } & \sum_{i=1}^{N} \alpha_{i} y_{i}=0 \\ & 0 \leqslant \alpha_{i} \leqslant C, \quad i=1,2, \cdots, N \end{array}αmin​s.t.​21​∑i=1N​∑j=1N​αi​αj​yi​yj​(xi​⋅xj​)−∑i=1N​αi​∑i=1N​αi​yi​=00⩽αi​⩽C,i=1,2,⋯,N​

2.求得

w ∗ = ∑ i = 1 N α i ∗ y i x i w^{*}=\sum_{i=1}^{N} \alpha_{i}^{*} y_{i} x_{i}w∗=i=1∑N​αi∗​yi​xi​

存在 0 < α j ∗ < C 00

b ∗ = y j − ∑ i = 1 N y i α i ∗ ( x i ⋅ x j ) b^{*}=y_{j}-\sum_{i=1}^{N} y_{i} \alpha_{i}^{*}\left(x_{i} \cdot x_{j}\right)b∗=yj​−i=1∑N​yi​αi∗​(xi​⋅xj​)

分类决策函数:

f ( x ) = sign ⁡ ( w ∗ ⋅ x + b ∗ ) f(x)=\operatorname{sign}\left(w^{*} \cdot x+b^{*}\right)f(x)=sign(w∗⋅x+b∗)

2.3 核函数的SVM:

非线性映射(把低维映射到高维;采用核函数来实现映射过程)

3. 多分类问题

一对多:将需要划分的训练集进行枚举,取响应最大的那个;

一对一:两两组合,选出归类最多的那个组合;

一对一淘汰:引入分类器置信度信息的二分器;采用各个SVM二分器的分类间隔作为置信度。利用判别函数之间的冗余进行对“拒绝决策”的分类。

4. MATLAB代码

load fisheriris;

%取出样本的前2维(列)作为特征,并存入data(不需要预先定义类型,自动识别)中。

data=[meas(:,1),meas(:,2)];

%转化为“是不是setosa类”的2类问题

groups=ismember(species,'setosa');

%利用交叉验证随机分割数据集,train保存训练数据,test保存测试数据。

[train,test]=crossvalind('holdOut',groups);

%利用train中的数据,训练一个线性的支持向量机,训练好的分类保存在svmStruct。其中,data(train,:)把train==1的数据提取出来。

svmStruct=svmtrain(data(train,:),groups(train),'showplot',true);

%利用包含训练所得分类器信息的svmStruct对测试样本进行分类,分类结果保存操classes

classes=svmclassify(svmStruct,data(test,:),'showplot',true);

%计算测试样本的识别率

%正确分类的样本数目

nCorrect=sum(classes==groups(test,:));

%计算正确率

accuracy=nCorrect/length(classes);

SVMStruct可以自定义选项,如核函数。

参考:

基于PCA和SVM的人脸识别;

支持向量机SVM及python实现;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值