Logistic Regression

  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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容