美文网首页
Logistic Regression

Logistic Regression

作者: DejavuMoments | 来源:发表于2019-05-29 20:51 被阅读0次
  1. 推导 sigmoid
  2. 推导LR损失函数
  3. 推导LR梯度下降
  4. Softmax原理
  5. softmax 损失函数
  6. softmax 梯度下降
  7. Python 实现 LR

sigmoid 函数的由来

考虑二分类问题,即 y \in \left \{0, 1 \right \}。由于 y 是二值的随机变量,因此我们很自然的选择 Bernoulli 分布来对分类问题进行建模: p(y|x; \theta) \sim Bernoulli(\phi).

\begin{align} h_θ(x) &= E[y|x; θ] \\ &=φ \\ &= 1/(1+e^{−η}) \\ &= 1/(1 + e^{−θ^{T} x}) \\ \end{align}
由此,我们便得到了 Logistic Regression 的 sigmoid 函数了。其函数图像如下:

Logistic Regression 二分类模型定义:

\begin{align} p(y=1|x; \theta) &= h_{\theta}(x) \\ p(y=0|x; \theta) &=1 - h_{\theta}(x) \end{align}

由于 y \in \left \{0, 1 \right \},我们可以将上面的式子联立起来:

p(y|x; \theta) = h_{\theta}(x)^{y}(1 - h_{\theta}(x))^{1-y}

即 当 y = 1 时候,p(y|x; \theta) = h_{\theta}(x); 当 y = 0 时候,p(y|x; \theta) = 1 - h_{\theta}(x)。可以看到,这与原先的式子是等价的。

LR 损失函数与梯度下降

LR 模型定义:

p(y|x; \theta) = h_{\theta}(x)^{y}(1 - h_{\theta}(x))^{1-y}

模型已定,参数未知,可以使用极大似然估计来估计模型的参数。

根据极大似然估计法的步骤:

1.写出似然函数

L(\theta) = \prod_{m}^{i=1} p(y^{(i)}|x^{(i)}; \theta) = \prod_{m}^{i=1} h_{\theta}(x^{(i)})^{y^{(i)}}(1 - h_{\theta}(x^{(i)}))^{1-y^{(i)}}

2.取对数(对数似然)

l(\theta) = log L(\theta) = \sum_{m}^{i=1} log(h_{\theta}(x^{(i)})^{y^{(i)}}(1 - h_{\theta}(x^{(i)}))^{1-y^{(i)}}) = \sum_{m}^{i=1} {y^{(i)}log(h_{\theta}(x^{(i)})}) + (1-y^{(i)})log(1 - h_{\theta}(x^{(i)}))

将上述的公式取负数就得到了逻辑回归的损失函数,也被称为交叉熵损失函数。损失函数是衡量模型的输出和实际的输出结果之间的差距的一种函数,即

loss(\theta) = - \sum_{m}^{i=1} {y^{(i)}log(h_{\theta}(x^{(i)})}) + (1-y^{(i)})log(1 - h_{\theta}(x^{(i)}))

l

3.求导

\begin{align} \frac{\partial{l(\theta)}}{\partial{\theta}} &= - \sum_{m}^{i=1} \left \{ \frac{y^{(i)}}{{h_{ \theta}(x^{(i)})}} - \frac{(1-y^{(i)})}{1 - h_{ \theta}(x^{(i)})} \right \} \cdot \frac{\partial{h_{\theta}(x^{(i)})}}{\partial{\theta_j}} \\ & \\ & = - \sum_{m}^{i=1} \left \{ \frac{y^{(i)}}{{g( \theta^{T} x^{(i)})}} - \frac{(1-y^{(i)})}{1 - g( \theta^{T} x^{(i)})} \right \} \cdot g( \theta^{T} x^{(i)})(1-g( \theta^{T} x^{(i)})) \cdot \frac{\partial{ \theta^{T}x^{(i)}}}{\partial{ \theta_{j}}} \\ & \\ & = - \sum^{m}_{i=1}({y^{(i)}(1-g( \theta^{T} x^{(i)}))} - (1-y^{(i)})g( \theta^{T} x^{(i)})) \cdot x_j^{(i)}\\ & \\ & = - \sum^{m}_{i=1} (y^{(i)} - g( \theta^{T} x^{(i)})) \cdot x_j^{(i)}\\ \end{align}

4.解似然方程

\theta_{j} = \theta_{j} - \alpha \sum^{m}_{i=1} (y^{(i)} - g( \theta^{T} x^{(i)})) \cdot x_j^{(i)}

Softmax: 从二分类到多分类

Softmax 的本质是将一个 K 维的任意实数向量压缩(映射)成另一个 K 维的实数向量,其中映射后的向量中每个元素的取值都介于 (0, 1) 之间,并且所有元素之和为 1

用于多分类任务中,它将模型的输出映射到 (0, 1) 区间,可以理解为概率。

a_i = \frac{e^{v_i}}{\sum^k_{j=1}{e^{v_i}}}

在实际应用中,使用 Softmax 需要注意数值溢出问题。

label 的分布是 MultiNomial,softmax 是 MultiNomial 的 link function。

import numpy as np

def softmax(X):
    x = np.exp(X - np.max(X)) / np.sum(np.exp(x))
    return x

softmax 损失函数

\begin{align} a_i &= \frac{e^{v_i}}{\sum^k_{j=1}{e^{v_j}}} \\ \\ L &= - \sum^{m}_{i=1}{y_{i}log(a_i)} = \\ \end{align}

其中 y_i 代表我们的真实值,a_i代表 softmax 输出的值。

需要注意的是,虽然 L 是一个求和式,但是因为 y_i 只有一个为 1(其余都为 0),所以在求导的时候需要

softmax 梯度下降

\begin{align} & \frac{\partial{a_i}}{\partial{v_j}} = \frac{\partial{\frac{e^{v_i}}{\sum^k_{j=1}{e^{v_j}}}} }{\partial{v_j}} \\ &\\ & 当 i \ne j \ 时,\\ &\\ & \frac{\partial{\frac{e^{v_i}}{\sum^k_{j=1}{e^{v_j}}}} }{\partial{v_j}} = \frac{0 - e^{a_j}e^{a_i}}{(\sum^{k}_{j=1}e^{a_j})^2} = \frac{- e^{a_j}}{\sum^{k}_{j=1}e^{a_j}} \times \frac{e^{a_i}}{\sum^{k}_{j=1}e^{a_j})} = -a_j \cdot a_i \\ &\\ & 当 i = j \ 时,\\ &\\ & \frac{\partial{\frac{e^{v_i}}{\sum^k_{j=1}{e^{v_j}}}} }{\partial{v_j}} = \frac{e^{v_i}\sum^{k}_{j=1}e^{v_j}{} - e^{a_j}e^{a_i}}{(\sum^{k}_{j=1}e^{a_j})^2} = \frac{- e^{a_j}}{\sum^{k}_{j=1}e^{a_j}} \times \frac{e^{a_i}}{\sum^{k}_{j=1}e^{a_j})} = -a_j \cdot a_i \\ &\\ \end{align}

Python 实现 LR

相关文章

网友评论

      本文标题:Logistic Regression

      本文链接:https://www.haomeiwen.com/subject/xspytctx.html