关键词:逻辑回归(LR)
逻辑回归
介绍下逻辑回归?
逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,达到将数据二分类的目的。
这里略微解释提到的几个概念。
伯努利实验:单次随机试验,只有 “成功” 或 ”失败“ 这两种结果,例如抛硬币、买彩票(中奖or没中奖)
伯努利分布:伯努利实验的概率分布称为伯努利分布,也称为两点分布或者0-1分布
其概率质量函数为:
$$
P(x) = p^x (1 - p)^{1 - x} = \left{
\begin{aligned}
p \quad if \ x = 1 \
q \quad if \ x = 0 \
\end{aligned}
\right.
$$
公式很好理解,即成功的概率为 $p$, 失败的概率为 $q$其期望值为:
$$
E(x) = \sum_{x = 0}^1 xP(x) = 0 \times q + 1 \times p = p
$$
其方差为:
$$
Var(x) = E[(x - E(x))^2] = \sum_{x = 0}^1 (x - p)^2P(x) = pq
$$极大化似然函数:找到一组参数,使得在这组参数下,我们的数据似然度(概率)最大
逻辑回归和线性回归的区别和联系
- 线性回归: $y = w^Tx + b$
- 线性回归的取值是连续的,条件概率 $p(Y = 1 | x)$ 的取值也是连续的,因此可以考虑用线性回归拟合条件概率,然而 $w^T x + b$ 的取值为 R,条件概率的取值为 [0, 1],因此通过 sigmoid 函数将线性回归的输出从区间 R 转换到区间 [0, 1]
sigmoid 函数
表达式:$\sigma(x) = \frac{1}{1 + e^{-x}}$
sigmoid 函数又被称为对数几率函数,假设 $y = \sigma(x)$ 表示正例的概率,$1- y$ 表示负例的概率,有
$$
ln\frac{y}{1 - y} = x
$$
逻辑回归模型
$$
y = \frac{1}{1 + e^{-(w^Tx+b)}}
$$
可以看到,$w^T x + b$ 拟合的是 $ln(y/1- y)$,再经过sigmoid 函数得到正例的概率最大化似然函数 / 最小化损失函数
似然函数为:
$$
L(w) = \prod [p(x_i)]^{y_i}[1 - p(x_i)]^{1 - y_i}
$$$x_i$: 输入数据
$p(x_i)$: 预测为正例的概率
$y_i$: 正确类别 (1 表示正例,0表示负例)
当 $y_i = 1$ 时,$[p(x_i)]^{y_i}[1 - p(x_i)]^{1 - y_i} = p(x_i)$,此时 $p(x_i)$越大,$L(w)$ 越大,因为正确标记为正例,我们期望 $p(x_i)$越大越好,因此期望$L(w)$ 越大越好
当 $y_i = 0$时,$[p(x_i)]^{y_i}[1 - p(x_i)]^{1 - y_i} = 1 - p(x_i)$,此时 $p(x_i)$越小,$L(w)$ 越大,因为正确标记为负例,我们期望 $p(x_i)$越小越好,因此期望$L(w)$ 越大越好
综上,我们期望 $L(w)$ 可以达到最大值。
为方便求解,将似然函数转换为对数似然函数:
$$
\begin{aligned}
ln L(w) &= \sum[y_ilnp(x_i) + (1 - y_i)ln(1 - p(x_i))] \
&= \sum[y_i(w · x_i) - ln(1 + e^{w·x_i})]
\end{aligned}
$$
因为损失函数越小,表示模型拟合效果越好,因此损失函数在对数似然函数的基础上取负号:
$$
J(w) = -\frac{1}{N} lnL(w)
$$梯度下降
三种常用梯度下降
- 批梯度下降:会获得全局最优解,缺点是在更新每个参数的时候需要遍历所有的数据,计算量会很大,并且会有很多的冗余计算,导致的结果是当数据量大的时候,每个参数的更新都会很慢 (耗时)
- 随机梯度下降:以高方差频繁更新,优点是使得sgd会跳到新的和潜在更好的局部最优解,缺点是使得收敛到局部最优解的过程更加的复杂 (稳定性下降)
- 小批量梯度下降:结合了sgd和batch gd的优点,每次更新的时候使用n个样本。减少了参数更新的次数,可以达到更加稳定收敛结果,一般在深度学习当中我们采用这种方法
如果采用随机梯度下降最小化损失函数
更新后的权重 = 原来的权重 - 学习率 * 一阶导数
$$
g_i = \frac{\partial J(w)}{\partial w_i} = (p(x_i) - y_i)x_i \
w^{k + 1}_i = w^k_i - \alpha · g_i
$$
逻辑回归为什么使用极大似然函数作为损失函数
- 线性回归采用平方损失函数
- 平方损失函数加上sigmoid的函数将会是一个非凸的函数,不易求解,会得到局部解,用对数似然函数得到高阶连续可导凸函数,可以得到最优解
逻辑回归在训练过程中,如果有很多特征高度相关或者有一个特征重复了100遍,会造成这样的影响
- 结论:在损失函数最终收敛的情况下,其实就算有很多特征高度相关也不会影响分类器的效果
- 解释:可以认为这100个特征和原来那一个特征扮演的效果一样,因为这100个权重的权重值会发生变化
逻辑回归如何做分类?
把每一个标签看作二分类任务,划定一个阈值,y值大于这个阈值的是一类,y值小于这个阈值的是另外一类。阈值具体如何调整根据实际情况选择。
逻辑回归的优缺点
- 优点:
- 可解释性强,因为模型的参数简单,可以直接从权重矩阵 $w$ 看出不同特征对最后结果的影响程度
- 训练速度快,还是因为模型简单
- 缺点:
- 准确率并不是很高。因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布
- 很难处理数据不平衡的问题。举个例子:如果我们对于一个正负样本非常不平衡的问题比如正负样本比 10000:1.我们把所有样本都预测为正也能使损失函数的值比较小。但是作为一个分类器,它对正负样本的区分能力不会很好。
- 处理非线性数据较麻烦。逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据,或者进一步说,处理二分类的问题 。
- 逻辑回归本身无法筛选特征。有时候,我们会用GBDT来筛选特征,然后再上逻辑回归。
- 优点:
手写逻辑回归
1 | import numpy as np |