逻辑回归:
逻辑回归是用来做分类算法的,线性回归的一般形式是Y=W * x + b,Y的取值范围是[-∞, +∞],
把Y的结果带入一个非线性变换的Sigmoid函数中,即可得到[0,1]之间取值范围的数S,
S可被看成是一个概率值,如设置概率阈值为0.5,那么S大于0.5是正样本,小于0.5是负样本,实现分类。
损失函数:对数似然函数
公式中的 y=1 表示的是真实值为1时用第一个公式,真实 y=0 用第二个公式计算损失。
使用log函数:当真实样本为1是,但概率h()为0,那么log0=∞,这就对模型最大的惩罚力度;
当h()=1时,log1=0,相当于没有惩罚,也就没有损失,达到最优结果。
最后按照梯度下降法一样,求解极小值点,得到想要的模型效果。
逻辑回归优点:
- LR能以概率的形式输出结果,而非只是0,1判定。
- LR的可解释性强,可控度高。
- 训练快,feature engineering之后效果好。
- 因为结果是概率,可以做ranking model。
一些应用实例:
- CTR预估/推荐系统的learning to rank/各种分类场景。
- 某搜索引擎厂的广告CTR预估基线版是LR。
- 某电商搜索排序/广告CTR预估基线版是LR。
- 某电商的购物搭配推荐用了大量LR。
- 某现在一天广告赚1000w+的新闻app排序基线是LR。
逻辑回归常用的优化方法:
一阶方法:梯度下降、随机梯度下降、mini 随机梯度下降降法。随机梯度下降不但速度上比原始梯度下降要快,局部最优化问题时可以一定程度上抑制局部最优解的发生。
二阶方法:牛顿法和拟牛顿法
牛顿法:通过切线与x轴的交点不断更新切线的位置,直到达到曲线与x轴的交点得到方程解。
在实际应用中常要求解凸优化问题,也就是解函数一阶导数为 0 的位置,
牛顿法可以给这种问题提供解决方法。牛顿法首先选择一个点作为起始点,
并进行一次二阶泰勒展开得到导数为0的点进行一个更新,直到达到要求,
这时牛顿法也就成了二阶求解问题,比一阶方法更快。通常 x 通常为一个多维向量,
此时涉及Hessian矩阵(x的二阶导数矩阵)。
缺点:牛顿法是定长迭代,没有步长因子,所以不能保证函数值稳定下降,
严重时甚至会失败。同时牛顿法要求函数一定二阶可导的,
且计算Hessian矩阵的逆复杂度很大。
拟牛顿法: 不用二阶偏导而是构造出Hessian矩阵的近似正定对称矩阵的方法。思路就是用一个特别的表达形式来模拟Hessian矩阵或者是他的逆,使表达式满足拟牛顿条件。主要有DFP法(逼近Hession的逆)、BFGS(直接逼近Hession矩阵)、 L-BFGS(可以减少BFGS所需的存储空间)
逻辑回归的特征离散化:
- 非线性!逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独权重,相当于引入非线性,提升模型表达能力,加大拟合; 离散特征的增加和减少都很容易,易于模型的快速迭代;
- 速度快!稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
- 鲁棒性!离散化的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0;如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
- 方便交叉与特征组合:离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
- 稳定性:特征离散化后,模型更稳定,比如对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
- 简化模型:特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
如果增大L1正则项,则所有的参数w都会变成0。
参考: