逻辑回归(对数几率回归)

一句话概述:逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降求解参数,来达到将数据二分类的目的。

属于对数线性模型,最大熵模型也属于对数线性模型。

基本假设:假设数据服从伯努利分布
逻辑回归的第二个假设是假设样本为正的概率是由sigmod函数计算的

逻辑回归的思路是,先拟合决策边界(不局限于线性,还可以是多项式),再建立这个边界与分类的概率联系,从而得到了二分类情况下的概率。

对数几率函数是任意阶可导的凸函数,有许多数值优化算法都可以求出最优解。

伯努利分布

伯努利分布:是一个离散型概率分布,若成功,则随机变量取值1;若失败,随机变量取值为0。成功概率记为p,失败为q = 1-p。
$$
f_X (x) = p^x (1-p)^{(1-x)} = \left\{
\begin{matrix}
p & if &x = 1 \\
q & if &x = 0
\end{matrix}
\right.
$$

极大似然估计

通过已知的结果去反推最大概率导致该结果的参数

利用实验结果$D=\{x_1,x_2,…,x_N\}$,得到某个参数值$\theta$,使得样本出现的概率最大。
$L(\theta) = P(D|\theta) = P(x_1,x_2,…,x_N|\theta) = \prod_{i=1}^N P(x_i|\theta)$
求解参数值$\hat\theta$,则就是求解最大值即,$\hat\theta= argmax(L(\theta))$

用似然法估计参数:建立(对数)似然函数;求解使似然函数最大的参数(求偏导等于0)即为结果

作用:
1、想要让每一个样本的预测都要得到最大的概率
2、对极大似然函数取对数以后相当于对数损失函数,对数损失函数的训练求解参数的速度是比较快的,只和x,y有关,比较稳定

梯度

梯度是一个方向向量,表示某一函数在某点处沿着该方向(梯度的方向)变化最快。
梯度记为$grad(x,y)$,其数学定义为
$grad(x,y) = \nabla{f(x,y)} = \{\frac{\partial{f(x,y)}}{\partial x} ,\frac{\partial{f(x,y)}}{\partial y} \}$

梯度下降法的步骤

1、 初始化回归系数向量w
2、 重复迭代max_iter次:
计算本次迭代的梯度$\frac{\partial{J(w)}}{\partial{w}}$,计算$w_tmp = w - \alpha*梯度$,用$w_tmp$更新w

逻辑回归的损失函数


$P(Y=1|x) = \pi(x)$
$P(Y=0|x) = 1-\pi(x)$
那么$\pi(x) = \frac{1}{1+exp(-x)}$,也就是sigmod function

所以逻辑回归的似然函数为:
$L(w) = \prod_{i=1}^N [\pi(x_i)]^{y_i}[1-\pi(x_i)]^{1-y_i}$

逻辑回归的目标是寻找使得对数似然函数最大的参数值,也就是求解参数值$\hat w$,其中$\hat w= argmax(L(w))$。参数w是一个向量,也就是$w = [w_1,w_2,w_3,…,w_n]^T$。(因为我们希望结果的可能性最大,所以要极大化似然函数来获取想要的参数)

为了便于求解,将似然函数取对数,其对数似然函数为:
$$
\begin{align}
log(L(w)) &= \sum_{i=1}^{N}[y_i log(\pi(x_i)) + (1-y_i)log(1-\pi(x_i))] \\
&= \sum_{i=1}^{N}[y_i log(\frac{\pi(x_i)}{1-\pi(x_i)}) + log(1-\pi(x_i))] \\
&= \sum_{i=1}^{N}[y_i(w \cdot x_i) - log(1+ exp(w \cdot x_i))]
\end{align}
$$

至此我们就可以对对数似然函数求极大值,得到参数w的估计值。

通用的解法就是计算损失函数关于参数向量每个$w_i$的偏导,令这些导函数为0,建立方程组求解。即

$$\frac{\partial{L(w)}}{\partial{w}} ==> \left\{
\begin{array}{rcl}
\frac{\partial{L(w)}}{\partial{w_1}} = 0 \\
\frac{\partial{L(w)}}{\partial{w_2}} = 0 \\
\frac{\partial{L(w)}}{\partial{w_3}} = 0 \\
\vdots \\
\frac{\partial{L(w)}}{\partial{w_n}} = 0
\end{array} \right. ==>
\begin{array}{rcl}
w_1 = …\\
w_2 = …\\
w_3 = …\\
\vdots \\
w_n = …
\end{array}
$$

因为这样计求解太过复杂,为了简化运算,所以引入梯度。因为我们要极大化对数似然函数,得到w的估计值,所以可以使用梯度上升法来求解。

机器学习中的损失函数衡量的是模型预测错误的程度,我们学习的目标就是最小化损失函数,所以如果取整个数据集上的平均对数似然损失,则就可以得到$J(w) = - \frac{1}{N} logL(w)$(将对数似然函数前面添加负号取平均得到),我们将$J(w)$作为我们的损失函数。

在LR模型中,最大化似然函数和最小化损失函数实际上是等价的。

因为我们的损失函数是$J(w) = - \frac{1}{N} \sum_{i=1}^{N}[y_i(w \cdot x_i) - log(1+ exp(w \cdot x_i))]$,那么他对于w求偏导的导函数为

$$
\begin{align}
\frac{\partial{J(w)}}{\partial{w}} &= - \frac{1}{N} \sum_{i=1}^{N}(y_i x_i - \frac{exp(w \cdot x_i)x_i}{1+exp(w \cdot x_i)}) \\
&= - \frac{1}{N} \sum_{i=1}^{N}[x_i (y_i - \frac{exp(w \cdot x_i)}{1+exp(w \cdot x_i)}] \\
&= - \frac{1}{N} \sum_{i=1}^{N}[x_i (y_i - \frac{1}{1+exp(- w \cdot x_i)}] \\
&= - \frac{1}{N} \sum_{i=1}^{N}(x_i(y_i - \pi(x))) \\
&= - \frac{1}{N} \sum_{i=1}^{N}(x_i(y_i - \hat{y_i})) \\
&= \frac{1}{N} \sum_{i=1}^{N}(x_i(\hat{y_i} - y_i)) \\
&= \frac{1}{N} \sum_{i=1}^{N}(x_i(\pi(x_i) - y_i))
\end{align}
$$
其中$\hat{y_i} = \pi(x)$

所以用梯度下降法求解的表达式为$w := w - \alpha \frac{1}{N} \sum_{i=1}^{N}(x_i(\hat{y_i} - y_i)) $

那么梯度下降法求解逻辑回归的伪代码为:

[X,y] = load_data()
w = rand(m,1) ## 初始化参数
alpha = 0.3
max_iter = 100

for i in range(max_iter):
y_pred = sigmod_func(x)
grad = X*(y - y_pred)
w_tmp = w + alpha*grad
w = w_tmp

细节思考

为什么使用极大似然函数作为损失函数?
损失函数一般有4种,分别是0-1损失、平方损失、绝对损失以及对数损失。
将极大似然函数取对数以后等同于对数损失函数,在逻辑回归这个模型下,对数损失函数的训练求解参数的速度是比较快的。
因为更新速度只和x,y相关,和sigmod函数本身的梯度是无关的。这样更新的速度是可以自始至终都比较的稳定。
为什么不选平方损失呢?
因为梯度更新的速度和sigmod函数本身的梯度是很相关的。sigmod函数在它在定义域内的梯度都不大于0.25。这样训练会非常的慢。

我们使用对数几率的意义在哪?通过上述推导我们可以看到 Logistic 回归实际上是使用线性回归模型的预测值逼近分类任务真实标记的对数几率,其优点有:

直接对分类的概率建模,无需实现假设数据分布,从而避免了假设分布不准确带来的问题;
不仅可预测出类别,还能得到该预测的概率,这对一些利用概率辅助决策的任务很有用;
对数几率函数是任意阶可导的凸函数,有许多数值优化算法都可以求出最优解。

LR FM区别
FM(factorization machine)模型是一种基于矩阵分解的机器学习模型,对于稀疏数据具有很好的学习能力

FM模型与LR模型的区别在于引进了特征组合

LR里面做归一化、离散化之类的好处:
因为如果数据不进行归一化,那么使用梯度下降法寻找最优解的时候,有可能是走之字形路线,需要迭代很多次才能收敛,甚至可能不能收敛,所以需要对数据做归一化,这样能收敛并且加快收敛的速度。

逻辑回归特征重复了一维会有什么影响

逻辑回归在训练的过程当中,如果有很多的特征高度相关或者说有一个特征重复了100遍,会造成怎样的影响?

结论:如果在损失函数最终收敛的情况下,其实就算有很多特征高度相关也不会影响分类器的效果。
但是对特征本身来说的话,假设只有一个特征,在不考虑采样的情况下,你现在将它重复100遍。训练以后完以后,数据还是这么多,但是这个特征本身重复了100遍,实质上将原来的特征分成了100份,每一个特征都是原来特征权重值的百分之一。
如果在随机采样的情况下,其实训练收敛完以后,还是可以认为这100个特征和原来那一个特征扮演的效果一样,只是可能中间很多特征的值正负相消了。

优点缺点

优点:形式简单、模型的可解释性非常好;模型效果不错;训练速度较快;资源占用小,尤其是内存;方便输出结果调整。
缺点:准确率不是很高;很难处理数据不平衡的问题;处理非线性数据比较麻烦;逻辑回归本身无法筛选特征

FM相比于LR的优势(自交叉、稀疏特征不太影响训练、可以得到embedding,进行高维交叉,推理未出现过的特征组合)

训练时样本不平衡问题如何解决;小样本问题如何解决

参考资料:
https://blog.csdn.net/sinat_33231573/article/details/99709837
https://www.cnblogs.com/mfmdaoyou/p/7392352.html
https://my.oschina.net/u/4687686/blog/4665928
https://www.cnblogs.com/XDU-Lakers/p/11853034.html ++
https://www.cnblogs.com/XDU-Lakers/p/11853034.html
https://zhuanlan.zhihu.com/p/38853901