LR和SVM等线性模型比较

Logistic regression

Sklearn中自带算法中两个特别的点:

  1. 梯度下降法实现相对简单,但是其收敛速度往往不尽人意。所以在sklearn中LR用到的是sag、saga(这两种是梯度下降法的改进)、liblinear、cg(共轭梯度法,最快的梯度下降法)和lbfgs(拟牛顿法的改进)
  2. 最大似然估计法没有考虑训练集以外的因素,很容易造成过拟合,为了解决过拟合问题,通过添加正则化项,控制模型的复杂程度。常用的有L1和L2正则化。

优点

  1. 本身算法的计算代价不高,对时间和内存需求较小, 求解梯度的算法都非常成熟,整体需要的资源较小,所以适合简单的线性问题和在线推荐系统
  2. 使用梯度下降的优化算法可以用于在线算法实现和分布式系统
  3. LR对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。

缺点

  1. 本质是线性模型,模型准确性不高,对于复杂问题需要海量的数据。
  2. 容易受到严重的多重共线性特征影响,也就是说容易受到彼此相关性较高的特征的影响,使用时需要对数据进行相关性检测,处理掉耦合性较高的特征。
  3. 对于数值特征, 在海量数据下, 数值数据抖动非常大, 拟合困难,影响模型整体性能。所以比较适合离散特征

常见的应用场景:

LGB和LR的融合方案:有两种用法:1. 用离散特征训练树,用树的节点位置做特征 2. 建立非ID和ID树

  1. LGB适合处理连续数据,可以在模型内部将连续数据分桶,得到的离散特征具有良好的鲁棒性。LGB模型的predict_leaf_index可以直接输出样本在不同树上的位置,不同的位置表示不同的特征组合。基于树的方法避免人工特征的繁琐、低效率和低准确率。
  2. 商品ID或者广告ID数量庞大,如果直接训练树容易产生畸形树,所以只能是少量ID+大量特征或者大量ID+少量特征,保证整棵树的平衡有效。
    非ID树:针对所有广告,包括没有曝光的广告建立非ID树,利用大量广告本身的特征形成对长尾广告的预测
    ID树:针对不同的ID特征建立不同的ID树,以ID相关特征形成普通广告的预测。
    结合两种树的结果,精心调整不同树的权重,提高CTR的预估。
    关于ID树和非ID树的详细介绍,可以参考这篇文章

QA

  • 为什么使用正则化?
      因为使用极大似然估计,模型会全力拟合数据,容易受到脏数据和异常点的影响
  • 为什么一般使用L2正则化?
      因为L2正则化只会使函数的某些参数缩小,降低这些参数的作用. 但是如果直接使用L1正则化会使参数直接为0, 会极大降低模型的效果. 所以一般我们选择更温和的L2正则化.
  • 为什么要使用集成的决策树模型,而不是单棵的决策树模型?
      一棵树的表达能力很弱,不足以表达多个有区分性的特征组合,多棵树的表达能力更强一些。可以更好的发现有效的特征和特征组合.
  • 除了GBDT+LR的方案,还有哪些思路可以挖掘有效的特征组合?
      类似地, 其他树+LR, 其他树+FM, 但是其他树+FM的效果在比赛中效果不好。
  • 通过GBDT映射得到的特征空间维度如何?
      GBDT树有多少个叶子节点,通过GBDT得到的特征空间就有多大。假设GBDT有n棵树,每颗树至少有m个叶子,得到的特征空间是大小是m*n,如果更多的树模型,特征空间将成指数上升。

LR VS 最大熵模型

最大熵原理:学习概率模型的时候,在所有可能的概率模型(分布)中,熵最大的模型是最好的模型。简单粗暴的说:逻辑回归跟最大熵模型没有本质区别。逻辑回归是最大熵对应为二类时的特殊情况,也就是说,当逻辑回归扩展为多类别的时候,就是最大熵模型。


SVM

假设问题是二分类器,就是在特征空间中寻找使正类负类间隔最大的超平面的线性分类器。求解参数时用到了拉格朗日算法

核函数

1. 线性核 \(K(x,x')=x^Tx'\) (sklearn的默认核函数)

优点:因为线性核不需要额外的计算,所以速度很快,适合数据量较小的情况;
缺点:因为只是简单的线性问题求解,所以只适合线性可分的数据分布;

2. 高斯核 \(K(x,x')=e^{(-\frac{(x-x')^2}{\gamma^2})}\)

优点:适合线性不可分的情况,一般都能有好效果;只有一个grmma参数,非常好调整;适合特征<样本的情况。
缺点:
\[k(x, z)=\exp \left(-\frac{d(x, z)^{2}}{2 * \sigma^{2}}\right)=\exp \left(-\operatorname{gamma} \cdot d(x, z)^{2}\right) \Rightarrow \operatorname{gamma}=\frac{1}{2 \cdot \sigma^{2}}\]
grmma和模型的关系,\(\gamma\) 过大表示方差很小,数据整体分布又高又瘦,结果严重依赖支持向量,容易造成训练效果很好,但是测试效果很差的过拟合现象。同时如果过高维度,计算慢;\(\gamma\) 选的很小,表示方差很小,造成整体效果很差。

RBF核:分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。我个人的体会是:使用libsvm,默认参数,RBF核比Linear核效果稍差。通过进行大量参数的尝试,一般能找到比linear核更好的效果。至于到底该采用哪种核,要根据具体问题,有的数据是线性可分的,有的不可分,需要多尝试不同核不同参数。如果特征的提取的好,包含的信息量足够大,很多问题都是线性可分的。当然,如果有足够的时间去寻找RBF核参数,应该能达到更好的效果。

3.多项式核 \(K(x,x')=(\gamma\cdot x^Tx' + coef0)^{degree}\)

优点:degree过大过拟合,过小没效果;时间快
缺点:参数多

4.sigmoid核 \(K(x,x')=tanh(\gamma\cdot x^Tx' + coef0)\)

没有用过

SMO算法

只保留两个参数 -> 只保留一个参数 -> 求导 -> \(new1+new2=old1+old2\), \(E(x_i)=f(x_i)-y_i\) \(v_j=\sum_{j=3}^{N}{\alpha_jy_jK(x_i,x_j)}\) -> 式子整个只留下了\(\alpha_i\)

优点

  • SVM有多种核可以选择,在选对核函数的基础上,可以处理各种非线性问题,整体收益较高。
  • SVM 的最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”
  • 强调支持向量样本,在一定程度上具有一定的鲁棒性
  • 支持不均衡数据的学习

缺点

  • SVM算法对大规模训练样本时只能选择线性核,其他核函数耗时太长无法满足性能要求。但是线性核的准确率较低,无法满足准确性要求,所以只能运用在小规模机器学习问题上。
  • 用SVM解决多分类问题存在困难,经典的算法只给出了二分类的情况

猜你喜欢

转载自www.cnblogs.com/x739400043/p/12382101.html