实验二:SVM支持向量机
1. 实验内容:
(1)用你熟知的语言(尽量使用python)实现支持向量机的算法,并在给定的数据集上训练。
(2)在测试集上用训练好的支持向量机进行测试,并将预测结果以csv格式保存为一行预测的分类。
(3)简要说明算法原理,记录实验过程的关键步骤,以及实验过程中遇到的问题和解决方法。
2. 实验说明:
数据集为鸢尾花数据集,有三个类别,其中setosa与另外两种之间是线性可分的,因此你需要选择按照setosa和versicolor,或setsosa和virginica,进行训练分类。如果你用的是软间隔可以用两个SVM对全部三类进行测试。
实验过程中可以不可以直接调用第三方库封装好的训练函数,但可以使用基础类和函数,例如numpy的数组以及矩阵内积dot函数等(算法迭代过程必须自己完成)。
算法具体实现方式无要求,函数或是类封装均可,但是要写进实验报告内。不必上交代码,但要有实验过程关键步骤的截图。
可以尝试利用可视化分析实验过程(非必须)。
3. 报告要求:
实验必须独立完成不得抄袭借鉴他人的实验内容。
4. 原理说明:
简要说明感知器算法原理,可以借助伪代码来进行说明。
4.1 文字描述:
支持向量机(SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,即在分类面扩展为一个具有间隔的空间,可以看成是感知机的升级版;另外SVM还包括核方法,从而使它成为非线性分类器。
SVM的学习策略就是间隔最大化,因此相比于感知机,它有唯一的解,可以形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题,整体来看是一个求解凸函数的最优化问题。
4.2 数学抽象:
4.2.1 硬间隔支持向量机
给定线性可分的训练数据集 D = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , … … , ( x ( N ) , y ( N ) ) } D = \{(\mathbf x^{(1)},y^{(1)}),(\mathbf x^{(2)},y^{(2)}),……,(\mathbf x^{(N)},y^{(N)})\} D={ (x(1),y(1)),(x(2),y(2)),……,(x(N),y(N))} ,其中 ( x ( n ) , y ( n ) ) (\mathbf x^{(n)}, y^{(n)}) (x(n),y(n)) 为第 n n n个样本, x ( n ) ∈ R D \mathbf x^{(n)} \in \mathbb R^D x(n)∈RD 为该样本的特征向量。
对于给定的训练数据集 D D D和超平面 ( w , b ) (\mathbf w,b) (w,b),任一样本 x ( n ) \mathbf x^{(n)} x(n) 到超平面 ( w , b ) (\mathbf w,b) (w,b)的距离是
r ( n ) = ∣ w T x ( n ) + b ∣ ∥ w ∥ r^{(n)}=\frac {|\mathbf {w^T x^{(n)}}+b|}{\|\mathbf w\|} r(n)=∥w∥∣wTx(n)+b∣
一般来说,一个点距离超平面的远近可以表示分类预测的确信程度。在超平面 w T x ( n ) + b = 0 \mathbf {w^T x^{(n)}}+b=0 wTx(n)+b=0 确定的情况下, ∣ w T x ( n ) + b ∣ |\mathbf {w^T x^{(n)}}+b| ∣wTx(n)+b∣ 能够相对地表示点 x ( n ) \mathbf x^{(n)} x(n) 距离超平面的远近,而 w T x ( n ) + b \mathbf {w^T x^{(n)}}+b wTx(n)+b 的符号与类标记 y ( n ) y^{(n)} y(n) 的符号是否一致能够表示分类是否正确。在这个阶段之前,与感知机部分的推导是一致的。为了计算方便,我们将类标记设置为 { − 1 , + 1 } \{-1,+1\} {
−1,+1} ,因此,可以使用 y ( n ) ( w T x ( n ) + b ) y^{(n)} (\mathbf {w^T x^{(n)}}+b) y(n)(wTx(n)+b) 表示分类的正确性及确信程度。当所有样本被正确分类时, r ( n ) r^{(n)} r(n) 可以写为
r ( n ) = ∣ w T x ( n ) + b ∣ ∥ w ∥ = y ( n ) ( w T x ( n ) + b ) ∥ w ∥ r^{(n)}=\frac {|\mathbf {w^T x^{(n)}}+b|}{\|\mathbf w\|}=\frac {y^{(n)} (\mathbf {w^T x^{(n)}}+b)}{\|\mathbf w\|} r(n)=∥w∥∣wTx(n)+b∣=∥w∥y(n)(wTx(n)+b)
假设超平面能将训练样本正确分类,即对于 ( x ( n ) , y ( n ) ) ∈ D (\mathbf x^{(n)}, y^{(n)}) \in D (x(n),y(n))∈D,若 y ( n ) = + 1 y^{(n)}=+1 y(n)=+1,则有 w T x ( n ) + b > 0 \mathbf {w^T x^{(n)}}+b \gt 0 wTx(n)+b>0;若 y ( n ) = − 1 y^{(n)}=-1 y(n)=−1,则有 w T x ( n ) + b < 0 \mathbf {w^T x^{(n)}}+b \lt 0 wTx(n)+b<0 ,令
w T x ( n ) + b ≥ 0 , y ( n ) = + 1 ; w T x ( n ) + b ≤ 0 , y ( n ) = − 1 ; \mathbf {w^T x^{(n)}}+b \ge 0,y^{(n)}=+1;\\ \mathbf {w^T x^{(n)}}+b \le 0,y^{(n)}=-1; wTx(n)+b≥0,y(n)=+1;wTx(n)+b≤0,y(n)=−1;
在线性可分的情况下,距离超平面最近的训练样本会使等号成立,被称为支持向量。即
y ( n ) ( w T x ( n ) + b ) − 1 = 0 y^{(n)}(\mathbf {w^T x^{(n)}}+b)-1=0 y(n)(wTx