本来是只想写一篇出来的,结果,,,内容也太多了,,,分开分开,先写SVM。
目录:
机器学习常见面试问题汇总
问题汇总(1):逻辑回归
问题汇总(2):支持向量机
问题汇总(3):树模型
问题汇总(4):聚类
问题汇总(5):神经网络
问题汇总(6):EM算法
问题汇总(7):朴素贝叶斯
参考的一些引用:
上面两篇文章基本可以解决SVM的推导,解释原问题和对偶问题,SVM原问题和对偶问题的关系,KKT限制条件,KKT条件用哪些,完整描述;软间隔问题,解释支持向量、核函数(哪个地方引入、画图解释高维映射,高斯核可以升到多少维,如何选择核函数),引入拉格朗日的优化方法的原因,最大的特点,损失函数解释,svm里面的c有啥用等。
简单介绍SVM:
从分类平面,到求两类间的最大间隔,到转化为求间隔分之一,等优化问题,然后就是优化问题的解决办法,首先是用拉格拉日乘子把约束优化转化为无约束优化,对各个变量求导令其为零,得到的式子带入拉格朗日式子从而转化为对偶问题, 最后再利用SMO(序列最小优化)来解决这个对偶问题。
SVM和LR的异同
相同点:
- LR和SVM都是监督学习方法,是分类算法。
- 如果不考虑使用核函数,LR和SVM都是线性分类模型,也就是说它们的分类决策面是线性的。
- LR和SVM都是判别模型。
典型的判别模型包括K近邻法、感知机、决策树、Logistic回归、最大熵、SVM、boosting、条件随机场等。
典型的生成模型包括朴素贝叶斯法、隐马尔可夫模型、高斯混合模型等。 - LR和SVM在学术界和工业界都广为人知并且应用广泛。(这句话,,,被我找到了一个万能句式?)
不同点:
-
loss function不一样。LR基于概率理论,通过极大似然估计方法估计出参数的值,然后计算分类概率,取概率较大的作为分类结果。SVM基于几何间隔最大化,把最大几何间隔面作为最优分类面。
- SVM只考虑分类面附近的局部的点,即支持向量,LR则考虑所有的点,与分类面距离较远的点对结果也起作用,虽然作用较小。所以LR对异常值敏感,SVM对异常值不敏感。
- 在解决非线性分类问题时,SVM采用核函数,而LR通常不采用核函数。在计算决策面时,SVM算法中只有支持向量参与了核计算,在LR算法里,如果采用核函数,则每一个样本点都会参与核计算,这会带来很高的计算复杂度。
- SVM没有伸缩不变性,LR具有伸缩不变性。(SVM毕竟是基于距离的模型,这玩意对缺失值也比较敏感。)SVM模型在各个维度进行不均匀伸缩后,最优解与原来不等价,所以SVM 需要数据标准化。LR模型在各个维度进行不均匀伸缩后,最优解与原来等价。但是,由于实际求解往往使用迭代算法,如果目标函数的形状太“扁”,迭代算法可能收敛得很慢甚至不收敛。所以对于具有伸缩不变性的模型,最好也进行数据标准化。
- SVM损失函数自带正则项,因此,SVM是结构风险最小化算法。而LR需要额外在损失函数上加正则项。所谓结构风险最小化,意思就是在训练误差和模型复杂度之间寻求平衡,防止过拟合,从而达到真实误差的最小化。未达到结构风险最小化的目的,最常用的方法就是添加正则项。
Kernel:核函数的定义和作用
当样本不在线性可分时,就用到了核函数。其实核函数就是把原来的x做了一波变换,从容易理解的角度上来说,就是将低维度的特征映射到了高维度(无穷维),即 映射到,使样本再次变得可以通过一个超平面分开。
但其实,如果对每个样本都做这样的映射操作,将会很耗费时间,并且,我们并不知道这个具体是什么。幸运的是,如果大家对对偶问题熟悉的话,可以看到,其实并不需要求出的具体值,而只需要求内积即可,也就是求,就可以完成SVM的计算工作。那么,我们直接设一个核函数K= ,相当于我们还是不知道,而是直接知道了(因为我们的计算过程只需要知道内积即可)。这样子就可以解决线性不可分问题。
只要一个对称函数所对应的核矩阵半正定,那么就可以作为核函数使用,此时总能找到一个与之对应的映射空间。但是核函数选择是支持向量机最大变数,如果选择不合适,那么意味着样本映射到了一个不合适的特征空间,会导致性能不佳。常用的核函数有线性核、多项式核、高斯核(也称RBF、径向基)、拉普拉斯核、sigmoid核等。
SVM如何处理多分类任务?
对偶问题
为什么要把原问题转换为对偶问题?
因为原问题是凸二次规划问题,转换为对偶问题更加高效。
方便引入核函数思想,求解非线性SVM。-
为什么求解对偶问题更加高效?
因为只用求解alpha系数,而alpha系数只有支持向量才非0,其他全部为0。
并且对偶问题有了高效求解方法,SMO。 alpha系数有多少个?
个数为样本点的个数。