SVM
SVM是一个二分类的方法,通过最大化超平面距离正负样本之间的距离实现最大化间隔来进行分类。由于是存在约束条件,不好求解,所以借助拉格朗日法转化为无约束问题,求解其对偶问题,再使用SMO算法求解析解。
- 从分类平面,到求两类间的最大间隔,到转化为求间隔分之一等优化问题:loss=min(1/2·||W||·||W||) subject to:y(wx+b)>=1,其中||·||为2范数
- 然后就是优化问题的解决办法,首先是用拉格拉日乘子把约束优化转化为无约束优化,对各个变量求导令其为零,得到的式子带入拉格朗日式子从而转化为对偶问题
- 最后再利用SMO(序列最小优化)来解决这个对偶问题
距离最靠近超平面的正负样本距离最大的超平面。
在求解的过程中,会发现只根据部分数据就可以确定分类器,这些数据称为支持向量。换句话说,就是超平面附近决定超平面位置的那些参与计算锁定平面位置的点
可以,对于一个N分类问题,可以训练N个分类器,1 vs rest
也可以或者 one vs one 比如3个类别 a,b,c a vs b,a vs c b vs c n(n-1)/2个
clf = svm.SVC(gamma='scale', decision_function_shape='ovo')
另一种是lin_clf = svm.LinearSVC()
multi_class='ovr'
(参考:https://zhuanlan.zhihu.com/p/76609851?from_voters_page=true)
- 介绍一下你知道的不同的SVM分类器
- 硬SVM分类器(线性可分):当训练数据可分时,通过间隔最大化,直接得到线性表分类器
- 软SVM分类器(线性可分):当训练数据近似可分时,通过软间隔最大化,得到线性表分类器
- kernel SVM:当训练数据线性不可分时,通过核函数+软间隔的技巧,得到一个非线性的分类器
- 什么叫软间隔
- 就是允许存在分类错误的数据
软间隔允许部分样本点不满足约束条件: 1<y(wx+b)
- 方便求解,将有约束变成了无约束
原问题是要考虑限制性条件的最优,而对偶问题考虑的是类似分情况讨论的解析问题
因为只用求解alpha系数,而alpha系数只有支持向量才非0,其他全部为0
- 核函数的作用是啥
- 将样本映射到一个线性可分的空间里,方便求解
核函数能够将特征从低维空间映射到高维空间, 这个映射可以把低维空间中不可分的两类点变成高维线性可分的
计算非线性分类问题下,需要利用到SMO方法求解,该方法复杂度高O(n^2)
在使用核函数的时候参数假设全靠试,时间成本过高
LR是参数模型,SVM为非参数模型。
LR采用的损失函数为logisticalloss,而SVM采用的是hingeloss。
在学习分类器的时候,SVM只考虑与分类最相关的少数支持向量点。
LR的模型相对简单,在进行大规模线性分类时比较方便。
- 如何定义参数模型?
LR是参数模型,SVM是非参数模型。
在统计学中,参数模型通常假设总体(随机变量)服从某一个分布,该分布由一些参数确定(比如正太分布由均值和方差确定),在此基础上构建的模型称为参数模型;非参数模型对于总体的分布不做任何假设,只是知道总体是一个随机变量,其分布是存在的(分布中也可能存在参数),但是无法知道其分布的形式,更不知道分布的相关参数,只有在给定一些样本的条件下,能够依据非参数统计的方法进行推断。
从上述的区别中可以看出,问题中有没有参数,并不是参数模型和非参数模型的区别。其区别主要在于总体的分布形式是否已知。
- 核函数的定义和使用场景?
高斯核(RBF核 / 径向基核)
核函数维数越高,偏差越小,方差越大,越容易过拟合。
linear_svc = svm.SVC(kernel='linear')
如果特征维数很高,往往线性可分(SVM 解决非线性分类问题的思路就是将样本映射到更高维的特征空间中),可以采用 LR 或者线性核的 SVM;如果样本数量很多,由于求解最优化问题的时候,目标函数涉及两两样本计算内积,使用高斯核明显计算量会大于线性核,所以手动添加一些特征,使得线性可分,然后可以用 LR 或者线性核的 SVM;
如果不满足上述两点,即特征维数少,样本数量正常,可以使用高斯核的 SVM。
解释:当特征数量少的时候,模型可能欠拟合,而高斯核参数复杂,可以提高模型的复杂度,使得模型有更好的表现。
- Hinge loss的定义与使用?
SVM做Rank
RankSVM的基本思想是,将排序问题转化为pairwise的分类问题,然后使用SVM分类模型进行学习并求解。
对于一个query-doc pair,我们可以将其用一个feature vector表示:x。而排序函数为f(x),我们根据f(x)的大小来决定哪个doc排在前面,哪个doc排在后面。即如果f(xi) > f(xj),则xi应该排在xj的前面,反之亦然。可以用下面的公式表示:
理论上,f(x)可以是任意函数,为了简单起见,我们假设其为线性函数:。
如果这个排序函数f(x)是一个线性函数,那么我们便可以将一个排序问题转化为一个二元分类问题。理由如下:
首先,对于任意两个feature vector xi和 xj,在f(x)是线性函数的前提下,下面的关系都是存在的:
然后,便可以对xi和 xj的差值向量考虑二元分类问题。特别地,我们可以对其赋值一个label:
在同一个组内(同一个query下)的不同相关度等级的doc的feature vector可以进行组合,形成新的feature vector:x1-x2,x1-x3,x2-x3。同样的,label也会被重新赋值,例如x1-x2,x1-x3,x2-x3这几个feature vector的label被赋值成分类问题中的positive label。进一步,为了形成一个标准的分类问题,我们还需要有negative samples,这里我们就使用前述的几个新的positive feature vector的反方向向量作为相应的negative samples:x2-x1,x3-x1,x3-x2。
转化为了分类问题后,我们便可以使用SVM的通用方式进行求解。首先我们可以得到下面的优化问题:
通过将约束条件带入进原始优化问题的松弛变量中,可以进一步转化为非约束的优化问题:
加和的第一项代表了hinge loss,第二项代表了正则项。primal QP problem较难求解,如果使用通用的QP解决方式则费时费力,我们可以将其转化为dual problem,得到一个易于求解的形式:
而最终求解得到相应的参数后,排序函数可以表示为:
于是,RankSVM方法求解排序问题的步骤总结起来,如下图所示:
参考链接:https://www.cnblogs.com/bentuwuying/p/6683832.html