支持向量机svm原理与常见问题

支持向量机svm原理与常见问题

1,参数

  1.  C : float, optional (default=1.0):惩罚系数,越大越会过拟合
  2.  kernel : string, optional (default='rbf'):核函数,linear:线性, poly:多项式, rbf:高斯, sigmoid:sigmod, precomputed:     ,callable:自定义。
  3.  degree : int, optional (default=3):多项式核函数的程度
  4.  gamma : float, optional (default='auto'):核函数的系数,默认为1/n_features
  5.  coef0 : float, optional (default=0.0):多项式核与sigmod核的独立性
  6.  probability : boolean, optional (default=False):是否启用概率估计
  7.  shrinking : boolean, optional (default=True):是否使用缩减
  8.  tol : float, optional (default=1e-3):停止迭代时的误差
  9.  cache_size : float, optional:缓存大小
  10.  class_weight : {dict, 'balanced'}:类别权重,默认为按照1/正负样本比例。
  11.  verbose : bool, default: False:是否静默
  12.  max_iter : int, optional (default=-1):迭代器的限制,默认为-1无

2,SVM为什么引入对偶问题?什么是对偶?

1,对偶问题往往更加容易求解(结合拉格朗日和kkt条件)

2,可以很自然的引用核函数(拉格朗日表达式里面有内积,而核函数也是通过内积进行映射的)

3,在优化理论中,目标函数 f(x) 会有多种形式:如果目标函数和约束条件都为变量 x 的线性函数, 称该问题为线性规划; 如果目标函数为二次函数, 约束条件为线性函数, 称该最优化问题为二次规划; 如果目标函数或者约束条件均为非线性函数, 称该最优化问题为非线性规划。每个线性规划问题都有一个与之对应的对偶问题,对偶问题有非常良好的性质,以下列举几个:

a, 对偶问题的对偶是原问题;

b, 无论原始问题是否是凸的,对偶问题都是凸优化问题;

c, 对偶问题可以给出原始问题一个下界;

d, 当满足一定条件时,原始问题与对偶问题的解是完全等价的

 

2, SVM如何实现,SMO算法如何实现?

SMO是用于快速求解SVM的。它选择凸二次规划的两个变量,其他的变量保持不变,然后根据这两个变量构建一个二次规划问题,这个二次规划关于这两个变量解会更加的接近原始二次规划的解,通过这样的子问题划分可以大大增加整个算法的计算速度,关于这两个变量:其中一个是严重违反KKT条件的一个变量另一个变量是根据*约束确定,好像是求剩余变量的最大化来确定的。

3, LR与Liner SVM区别

1, Linear SVM和LR都是线性分类器

2, Linear SVM不直接依赖数据分布,分类平面不受一类点影响;LR则受所有数据点的影响,如果数据不同类别strongly unbalance一般需要先对数据做balancing。

3, Linear SVM依赖数据表达的距离测度,所以需要对数据先做normalization(归一化);LR不受其影响

4, Linear SVM依赖惩罚的系数,实验中需要做交叉验证

5, Linear SVM和LR的performance都会收到outlier的影响,其敏感程度而言,谁更好很难下明确结论。

4, SVM、LR、决策树的对比?

SVM既可以用于分类问题,也可以用于回归问题,并且可以通过核函数快速的计算,LR实现简单,训练速度非常快,但是模型较为简单,决策树容易过拟合,需要进行剪枝等。从优化函数上看,soft margin的SVM用的是hingeloss(铰链损失,最大间隔),而带L2正则化的LR对应的是交叉熵损失,另外adaboost对应的是指数损失。所以LR对远点敏感,但是SVM对outlier不太敏感,因为只关心support vector,SVM可以将特征映射到无穷维空间(高斯核),但是LR不可以,一般小数据中SVM比LR更优一点,但是LR可以预测概率,而SVM不可以,SVM依赖于数据测度,需要先做归一化,LR一般不需要,对于大量的数据LR使用更加广泛,LR向多分类的扩展更加直接,对于类别不平衡SVM一般用权重解决,即目标函数中对正负样本代价函数不同,LR可以用一般的方法,也可以直接对最后结果调整(通过阈值),一般小数据下样本维度比较高的时候SVM效果要更优一些。SVM通过映射到高维在做回归使用的。

5, SVM 的推导,特性?多分类怎么处理?

SVM是最大间隔分类器,几何间隔和样本的误分次数之间存在关系。从线性可分情况下,原问题,特征转换后的dual问题,引入kernel(线性kernel,多项式,高斯),最后是soft margin。

1, 线性:简单,速度快,但是需要线性可分

2, 多项式:比线性核拟合程度更强,知道具体的维度,但是高次容易出现数值不稳定,参数选择比较多。

3, 高斯rbf:拟合能力最强,但是要注意过拟合问题。不过只有一个参数需要调整。

4, sigmod核:多分类问题,一般将二分类推广到多分类的方式有三种,一对一(libsvm),一对多,多对多。

6,解释对偶的概念

一个优化问题可以从两个角度进行考察,一个是primal 问题,一个是dual 问题,就是对偶问题,一般情况下对偶问题给出主问题最优值的下界,在强对偶性成立的情况下由对偶问题可以得到主问题的最优下界,对偶问题是凸优化问题,可以进行较好的求解,SVM中就是将primal问题转换为dual问题进行求解,从而进一步引入核函数的思想。

7,libsvm和liblinear有什么区别

 Libsvm和Liblinear都是台大学开发的,Libsvm主要是用来进行非线性svm 分类器的生成,而Liblinear主要是应对大规模的data classification,因为linear分类器的训练比非线性分类器的训练计算复杂度要低很多,时间也少很多,而且在large scale data上的性能和非线性的分类器性能相当,所以Liblinear是针对大数据而生的。

有关Liblinear和Libsvm各自的优势可以归纳如下:

1.libsvm用来就解决通用典型的分类问题

2.liblinear主要为大规模数据的线性模型设计

对于核函数的选取可归纳如下:

1.如果如果特征数远远大于样本数的情况下,使用线性核就可以了.

2.如果特征数和样本数都很大,例如文档分类,一般使用线性核, LIBLINEAR比LIBSVM速度要快很多.

3.如果特征数远小于样本数,这种情况一般使用RBF.但是如果一定要用线性核,则选择LIBLINEAR较好,而且使用-s 2选项。