1. 逻辑回归
逻辑回归假设数据服从伯努利分布,在线性回归的基础上加了一个 Sigmoid 函数(非线形)映射,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。
逻辑回归是用一个线性模型去拟合
P
(
y
=
1
∣
x
)
P(y=1|x)
P(y=1∣x)这个事件的对数几率
l
o
g
p
1
−
p
=
θ
T
x
log\frac{p}{1-p}=\theta^Tx
log1−pp=θTx
目标函数:
J
(
w
)
=
−
1
m
(
∑
i
=
1
m
(
y
i
log
f
w
(
x
i
)
+
(
1
−
y
i
)
log
(
1
−
f
w
(
x
i
)
)
)
J(w)=-\frac{1}{m}\left(\sum_{i=1}^{m}\left(y^{i} \log f_{w}\left(x^{i}\right)+\left(1-y^{i}\right) \log \left(1-f_{w}\left(x^{i}\right)\right)\right)\right.
J(w)=−m1(i=1∑m(yilogfw(xi)+(1−yi)log(1−fw(xi)))
求导之后的方式长这样:
w
j
←
w
j
−
γ
1
m
∑
i
=
1
m
(
f
w
(
x
i
)
−
y
i
)
x
j
i
w_{j} \leftarrow w_{j}-\gamma \frac{1}{m} \sum_{i=1}^{m}\left(f_{w}\left(x^{i}\right)-y^{i}\right) x_{j}^{i}
wj←wj−γm1i=1∑m(fw(xi)−yi)xji
这样通过若干次迭代, 就可以得到最终的
w
w
w了。
优点:
- LR模型形式简单,可解释性好,从特征的权重可以看到不同的特征对最后结果的影响。
- 性能比较好,往往适合处理海量id类特征,用id类特征,就是相对于范化的 CTR 特征更好地防止信息损失,对于头部资源会有更细致的描述。
- 资源占用小,尤其是内存。
- 方便输出结果调整。输出的是每个样本的概率分数,我们可以很容易的对这些概率分数进行cutoff,也就是划分阈值(大于某个阈值的是一类,小于某个阈值的是一类)。
局限性:
- 表达能力不强, 无法进行特征交叉, 特征筛选等一系列“高级“操作。
- 准确率并不是很高,难去拟合数据的真实分布。
- 处理非线性数据较麻烦。逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据, 如果想处理非线性, 首先对连续特征的处理需要先进行离散化(离散化的目的是为了引入非线性),如上文所说,人工分桶的方式会引入多种问题。
- LR 需要进行人工特征组合,这就需要开发者有非常丰富的领域经验,才能不走弯路。这样的模型迁移起来比较困难,换一个领域又需要重新进行大量的特征工程。
所以如何自动发现有效的特征、特征组合,弥补人工经验不足,缩短LR特征实验周期,是亟需解决的问题。
2.GDBT
gbdt 每轮的训练是在上一轮的训练的残差基础之上进行训练的,通过不断构建决策树的方式,使预测结果一步步的接近目标值。
其分类模型可以表达为:
P
(
Y
=
1
∣
x
)
=
1
1
+
e
−
F
M
(
x
)
P(Y=1 \mid x)=\frac{1}{1+e^{-F_{M}(x)}}
P(Y=1∣x)=1+e−FM(x)1
优点:
我们可以把树的生成过程理解成自动进行多维度的特征组合的过程,从根结点到叶子节点上的整个路径(多个特征值判断),才能最终决定一棵树的预测值。
对于连续型特征的处理,GBDT 可以拆分出一个临界阈值,比如大于 0.027 走左子树,小于等于 0.027(或者 default 值)走右子树,这样很好的规避了人工离散化的问题。这样就非常轻松的解决了逻辑回归那里自动发现特征并进行有效组合的问题, 这也是GBDT的优势所在。
局限性:
对于海量的 id 类特征,GBDT 由于树的深度和棵树限制(防止过拟合),不能有效的存储;另外海量特征在也会存在性能瓶颈,当 GBDT 的 one hot 特征大于 10 万维时,就必须做分布式的训练才能保证不爆内存。所以 GBDT 通常配合少量的反馈 CTR 特征来表达,这样虽然具有一定的范化能力,但是同时会有信息损失,对于头部资源不能有效的表达。
3. GBDT+LR模型
预测时,会先走 GBDT 的每棵树,得到某个叶子节点对应的一个离散特征(即一组特征组合),然后把该特征以 one-hot 形式传入 LR 进行线性加权预测。