Logistic regression
Sklearn中自带算法中两个特别的点:
- 梯度下降法实现相对简单,但是其收敛速度往往不尽人意。所以在sklearn中LR用到的是sag、saga(这两种是梯度下降法的改进)、liblinear、cg(共轭梯度法,最快的梯度下降法)和lbfgs(拟牛顿法的改进)
- 最大似然估计法没有考虑训练集以外的因素,很容易造成过拟合,为了解决过拟合问题,通过添加正则化项,控制模型的复杂程度。常用的有L1和L2正则化。
优点
- 本身算法的计算代价不高,对时间和内存需求较小, 求解梯度的算法都非常成熟,整体需要的资源较小,所以适合简单的线性问题和在线推荐系统
- 使用梯度下降的优化算法可以用于在线算法实现和分布式系统
- LR对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。
缺点
- 本质是线性模型,模型准确性不高,对于复杂问题需要海量的数据。
- 容易受到严重的多重共线性特征影响,也就是说容易受到彼此相关性较高的特征的影响,使用时需要对数据进行相关性检测,处理掉耦合性较高的特征。
- 对于数值特征, 在海量数据下, 数值数据抖动非常大, 拟合困难,影响模型整体性能。所以比较适合离散特征
常见的应用场景:
LGB和LR的融合方案:有两种用法:1. 用离散特征训练树,用树的节点位置做特征 2. 建立非ID和ID树
- LGB适合处理连续数据,可以在模型内部将连续数据分桶,得到的离散特征具有良好的鲁棒性。LGB模型的predict_leaf_index可以直接输出样本在不同树上的位置,不同的位置表示不同的特征组合。基于树的方法避免人工特征的繁琐、低效率和低准确率。
- 商品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参数,非常好调整;适合特征<样本的情况。
缺点:
grmma和模型的关系,(gamma) 过大表示方差很小,数据整体分布又高又瘦,结果严重依赖支持向量,容易造成训练效果很好,但是测试效果很差的过拟合现象。同时如果过高维度,计算慢;(gamma) 选的很小,表示方差很小,造成整体效果很差。
RBF核:分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。我个人的体会是:使用libsvm,默认参数,RBF核比Linear核效果稍差。通过进行大量参数的尝试,一般能找到比linear核更好的效果。至于到底该采用哪种核,要根据具体问题,有的数据是线性可分的,有的不可分,需要多尝试不同核不同参数。如果特征的提取的好,包含的信息量足够大,很多问题都是线性可分的。当然,如果有足够的时间去寻找RBF核参数,应该能达到更好的效果。
3.多项式核 (K(x,x')=(gammacdot x^Tx' + coef0)^{degree})
优点:degree过大过拟合,过小没效果;时间快
缺点:参数多
4.sigmoid核 (K(x,x')=tanh(gammacdot 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解决多分类问题存在困难,经典的算法只给出了二分类的情况