SVM支持向量机
定义:支持向量机是主要用于解决分类问题的学习模型。它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器。
分类
1-当训练样本线性可分,通过硬间隔最大化,学习一个线性分类器,叫线性可分支持向量机
2-当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,叫线性支持向量机
3-当训练数据线性不可分的时候,通过使用核技巧以及软间隔最大化,学习非线性支持向量机
SVM算法的主要优点有:
1) 解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果。
2) 仅仅使用一部分支持向量来做超平面的决策,无需依赖全部数据。
3) 有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题。
4) 样本量不是海量数据的时候,分类准确率高,泛化能力强。
SVM算法的主要缺点有:
1) 如果特征维度远远大于样本数,则SVM表现一般。
2) SVM在样本量非常大,核函数映射维度非常高时,计算量过大,不太适合使用。
3) 非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数。
4) SVM对缺失数据敏感。
SVM核函数的意义
SVM通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身无法线性可分的数据分开。核函数的真正意义在于没有真正映射到高维空间却达到了映射的作用,减少了大量的映射计算。
如何选择以及核函数的种类
1-如果特征的数量大到和样本数量差不多,则使用线性核函数SVM或者LR(逻辑回归)
2-如果特征的数量小,样本的数量正常,则使用高斯核函数SVM
3-如果特征的数量小,样本数量很多,由于求解最优化问题的时候,目标函数涉及两两样本计算内积,使用高斯核明显计算会大于线性核,所以手动添加一些特征,使得线性可分,然后可以用LR或者线性核的SVM
4-利用交叉验证,试用不同的核函数,误差最小的就是效果最好的核函数
5-混合核函数方法,将不同的核函数结合起来
为什么要将求解SVM的原始问题转换为对偶问题
对偶问题可以给出原始问题的一个下界,当满足一定条件时,原始问题和对偶问题的解是等价的,并且它还可以自然地引入核函数
SVM为什么采用间隔最大化
当训练数据线性可分的时候,存在无穷个分离超平面可以将两类数据正确分开。感知机或者神经网络等利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个。线性可分支持向量机利用间隔最大化求得最优分离超平面,此时的解释唯一的。另一方面,此时的分隔超平面所产生的的分类结果是最鲁棒的,对未知实例的泛化能力最强。
为什么SVM对噪声以及缺失值敏感
当噪声出现的过多的话,或者当噪声出现并成为支持向量的时候,噪声对模型影响是巨大的
这里的缺失值是指缺失某些特征数据,向量数据不完整。因为SVM不像决策树一样有处理缺失值的策略,所以如果存在缺失值,这些数据在该特征维度很难正确的分类,将影响到训练结果的好坏。
SVM中样本偏斜的处理方法
样本偏斜是指数据集中真负类样本数量不均,例如正类样本有10000个,负类样本只有100个,这样的话就会使超平面被推向负类,因为负类数量少,分布的不够广,这样会影响结果的准确性。
解决方法:我们可以对正类的样本使用惩罚因子C+,负类样本用另一个C-,这个比例的确定一个好的方法时衡量他们分布的情况,具体的做法是给负类找一个高维空间中的超球体,它包含了所有负类的样本,再给正类找一个,比较一下两个球的半径,半径大的分布广,惩罚因子小。
实际中根据需要选择简单的就行,例如libSVM就可以直接使用样本的数量比。比如上面举例中就可以定义 c+ :c-=1 : 100