深度学习基础03---支持向量机SVM(下)

it2023-11-01  71

前面两篇文章介绍了支持了向量机针对线性可分的情况,这节课来介绍一下支持向量机支持线性不可分的情况 SVM有以下几个特性: (1)训练好的模型的算法复杂度是由支持向量的个数决定的,而不是由数据的纬度决定的,所以SVM不太容易产生overfitting (2)SVM训练出来的模型完全依赖于支持向量(support vectors),即使训练集里面所有非支持向量的点都被去除,重复训练过程,结果仍然会得到完全一样的模型 (3)一个SVM如果训练得出的支持向量个数比较少,SVM训练出的模型比较容易泛化

接下来讨论一下线性不可分的情况(linearly inseparable case) 如上图所示,无论我们怎样画超平面,均不能将黑白点完全分开,这就是线性不可分的情况: 数据集在空间中对应的向量不可被一个超平面区分开 那么我们如何区分线性不可分的情况呢: 步骤: (1)利用一个非线性的映射把原数据集中的向量点转化到一个更高维度的空间中 (2)在这个高纬度的空间中找一个线性的超平面来根据线性可分的情况处理 比如上图中,原始红点和绿小方块数据是线性不可分的,我们通过一定的映射,把两组数据映射到更高维度的空间中,使它们变为可分的。 现在的关键点在于我们如何找一个映射,将线性不可分的数据映射到高维空间中。

2.举个例子:

3维输入向量: 转换到6维空间Z中去: 新的决策超平面; 其中W和Z是向量,这个超平面是线性的。 解出W和b之后,并且带回原方程: 所以我们将原数据映射到高维空间中了

现在新的问题又出现了: (1)如何选择合理的非线性转化把数据转到高纬度中? (2)如何解决计算内积时算法复杂度非常高的问题?

我们可以使用核方法(kernel trick),下面简单介绍一下核方法

3.核方法(kernel trick)

(1)动机 在线性SVM中转化为最优化问题时求解的公式计算都是以内积(dot product)的形式出现的 其中: 是把训练集中的向量点转化到高维的非线性映射函数,因为内积的算法复杂度非常大,所以我们利用核函数来取代计算非线性映射函数的内积。 (2)以下核函数和非线性映射函数的内积等同 (3)常用的核函数(kernel functions) h度多项式核函数(polynomial kernel of degree h): 高斯径向基核函数(Gaussian radial basis function kernel): S型核函数(Sigmoid function kernel): 那么我们如何选择使用哪个kernel? 这个问题没有标准的答案,需要根据先验知识来考虑,比如图像分类,通常使用RBF,文字不使用RBF,也可以尝试不同的kernel,根据结果准确度而定

下面举个例子来深入理解一下核函数 假设定义两个向量:x=(x1,x2,x3),y=(y1,y2,y3) 定义方程:f(x)=(x1x1,x1x2,x1x3,x2x1,x2x2,x2x3,x3x1,x3x2,x3x3) K(x,y)=(<x,y>)^2 假设x=(1,2,3);y=(4,5,6) f(x)=(1,2,3,2,4,6,3,6,9) f(y)=(16,20,24,20,25,36,24,30,36) <f(x),f(y)>=116+220+324+220+425+636+324+630+9*36=1024 K(x,y)=(4+10+18)^2 =32 32^2=1024 同样的结果,我们使用kernel的方法计算容易很多

那么SVM只能解决二分类问题吗,目前为止SVM只能解决二分类问题,但是经过一定扩展可以进行多分类问题求解 **

4.SVM可解决多个类别分类问题

** 对于每个类,有一个当前类和其他类的二类分类器(one-vs-rest) 比如五分类问题,对于每一类可以把它分为两类,对于1,可以分为当前类1和其他剩余类 对于2可以分为当前类2和其他剩余类

ok,暂时到这里啦~

最新回复(0)