关于SVM训练数据维度和过程的详细讨论

笔者在学习了支持向量机的基本原理后,使用matlab训练时,经常遇到向量维度不一致导致的运算错误,认为其原因在于参考一些文章的做法时,大多数作者并没有细致的解释数据集的排列方式,行向量,列向量等,对于初学者来说有些迷惑。

本文基于Matlab中的quadprog 解函数来分析SVM手写推导过程

1. 数据集描述

  • X [ 57 × 2000 ] X_{[57\times2000]} X[57×2000]: 训练集样本 ,57行,2000列,每一列是一个样本,每个样本是57维的列向量
  • Y 2000 × 1 Y_{2000\times1} Y2000×1: 训练集标签,2000行,1列,每一行保存一个数(1或-1)描述样本的类别

2. 二次型优化问题

2.1拉格朗日求解建立

前面的文章《Support Vector Machines 支持向量机》中提到过(后文简称上篇文章),求解SVM本身就是一个最优化问题,我们由此建立了拉格朗日函数:
L = 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 − ∑ α i [ y i ( w ⃗ ⋅ x i ⃗ + b ) − 1 ] L=\frac{1}{2}{||\vec{w}||}^2-\sum\alpha_i[y_i(\vec{w} \cdot \vec{x_i}+b) -1] L=21∣∣w ∣∣2αi[yi(w xi +b)1]

L = ∑ α i − 1 2 ∑ i ∑ j α i α j y i y j x i ⃗ ⋅ x j ⃗ L=\sum\alpha_i-\frac{1}{2}\sum_i\sum_j\alpha_i\alpha_jy_iy_j \vec{x_i}\cdot\vec{x_j} L=αi21ijαiαjyiyjxi xj

并且由于我们的样本数据有57维,在二维平面空间并不可分,我们采用了核函数来完成高维映射:
K ( x i ⃗ , x j ⃗ ) = ϕ ( x i ⃗ ) ⋅ ϕ ( x j ⃗ ) K(\vec{x_i},\vec{x_j})=\phi(\vec{x_i})\cdot\phi(\vec{x_j}) K(xi ,xj )=ϕ(xi )ϕ(xj )
因此改写拉格朗日函数为:
L = ∑ α i − 1 2 ∑ i ∑ j α i α j y i y j K ( x i ⃗ , x j ⃗ ) L=\sum\alpha_i-\frac{1}{2}\sum_i\sum_j\alpha_i\alpha_jy_iy_j K(\vec{x_i},\vec{x_j}) L=α

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值