好早之前就发现逻辑斯蒂回归好像和朴素贝叶斯里面的后验概率公式还有最大似然、信息熵、交叉熵、伯努利分布、回归分析、几率(odds)等等有着千丝万缕CZFZ(错综复杂)、PSML(扑朔迷离)的关系。一直感觉逻辑斯蒂分布好像在很多地方都比较受宠并且有一些优良的性质经常被提及,不过又说不太清楚到底是怎么回事。
这是一篇非非非非常长的文章
也可以戳下面链接看分节的版本哟~
细讲逻辑斯蒂回归与朴素贝叶斯、最大熵原理的爱恨交织(一)
细讲逻辑斯蒂回归与朴素贝叶斯、最大熵原理的爱恨交织(二)
细讲逻辑斯蒂回归与朴素贝叶斯、最大熵原理的爱恨交织(三)
细讲逻辑斯蒂回归与朴素贝叶斯、最大熵原理的爱恨交织(四)
细讲逻辑斯蒂回归与朴素贝叶斯、最大熵原理的爱恨交织(五)
细讲逻辑斯蒂回归与朴素贝叶斯、最大熵原理的爱恨交织(六)
长文预警 ⇓ \ \Downarrow ⇓,ready?
第一节 —— 另辟蹊径从生态学入手
种群生态学考虑单一物种的生存模式和状态。其中,关于种群个体数量的变化,有所谓的马尔萨斯模型和逻辑斯蒂模型。
种群在某一状态下增长速率与种群个体数成正比。种群越大,增速越快。 这比较好理解,例如一只羊一年生一只,那么三只羊一年就能生三只。种群个体数从一变成三增了三倍,种群数量的增速也变为了原来的三倍。 把这个正比关系写成微分方程:y(t) 表示种群大小,它是时间 t 的函数。r 是比值系数:
d y ( t ) d t = r ⋅ y ( t ) \frac{dy(t)}{dt} = r·y(t) dtdy(t)=r⋅y(t)
解这个微分方程:
1 y d y = r d t \frac{1}{y} dy = rdt y1dy=rdt
⇒ ∫ 1 y d y = ∫ r d t \Rightarrow\int\frac{1}{y}dy = \int rdt ⇒∫y1dy=∫rdt
⇒ l o g y = r t \Rightarrow logy = rt ⇒logy=rt
⇒ y = e r t \Rightarrow y = e^{rt} ⇒y=ert
原来这就是我们熟悉的指数函数。
这个模型的不足在于,它只考虑了“生”的过程,没考虑“存”的实际情况。即便“生”的速率与种群大小成正比,但是能否存活还要受环境因素的制约。
种群大小增长到一定程度后,由于种内个体之间争夺有限的资源,存活率就会下降,导致种群个体数量的增长率下降。于是,有人对上述模型进行了改进,就有了(生态学中的)逻辑斯蒂模型。
这个模型依旧是用一个微分方程表示种群个体数量与增长速率的关系: d y ( t ) d t = r y ( t ) × [ 1 − y ( t ) K ] \frac{dy(t)}{dt} = ry(t)\times[1-\frac{y(t)}{K}] dtdy(t)=ry(t)×[1−Ky(t)]
K可以解读为环境最大容纳量(capacity),r依旧是比值系数。解这个微分方程:
d y = r K ⋅ y ⋅ ( K − y ) d t dy = \frac{r}{K}·y·(K-y)dt dy=Kr⋅y⋅(K−y)dt
1 K y − y 2 d y = r K d t \frac{1}{Ky-y^2} dy = \frac{r}{K} dt Ky−y21dy=Krdt
∫ 1 K y − y 2 d y = ∫ r K d t \int\frac{1}{Ky-y^2} dy = \int\frac{r}{K} dt ∫Ky−y21dy=∫Krdt
l o g y − l o g ( K − y ) K = r K ⋅ t ( 0 < y < K ) \frac{logy-log(K-y)}{K} = \frac{r}{K}·t \ \ \ \ (0<y<K) Klogy−log(K−y)=Kr⋅t (0<y<K)
l o g ( y K − y ) = r t log(\frac{y}{K-y}) = rt log(K−yy)=rt
y K − y = e r t \frac{y}{K-y} = e^{rt} K−yy=ert
y = K e r t 1 + e r t = K 1 + e − r t y = \frac{Ke^{rt}}{1+e^{rt}} = \color{red}\frac{K}{1+e^{-rt}} y=1+ertKert=1+e−rtK
最后这个红色的解,是不是很熟悉???是不是很像炼丹师抬头不见低头见的sigmoid?!
我们对y求导:
y ′ = − K ( − r ) e r t ( 1 + e − r t ) 2 y' = \frac{-K(-r)e^{rt}}{(1+e^{-rt})^2} y′=(1+e−rt)2−K(−r)ert
= K r ⋅ 1 1 + e − r t ⋅ e − r t 1 + e − r t \quad= Kr·\frac{1}{1+e^{-rt}}·\frac{e^{-rt}}{1+e^{-rt}} =Kr⋅1+e−rt1⋅1+e−rte−rt
= K r ⋅ 1 1 + e − r t ⋅ ( 1 − 1 1 + e − r t ) \quad= Kr·\frac{1}{1+e^{-rt}}·(1-\frac{1}{1+e^{-rt}}) =Kr⋅1+e−rt1⋅(1−1+e−rt1)
= r y ( 1 − y K ) ⇐ \quad = ry(1-\frac{y}{K}) \quad \Leftarrow =ry(1−Ky)⇐ 符合最一开始的微分方程
忽略掉那些系数,可以概括为,对于满足逻辑斯蒂模型的函数,它的导数等于 (它自己) × \times × (1 - 它自己)
特别地,当K = r = 1时, y = 1 1 + e − t = σ ( t ) y = \frac{1}{1+e^{-t}} \color{red}= \sigma(t) y=1+e−t1=σ(t) sigmoid成功现形!
y ′ = ( 1 1 + e − t ) ( 1 − 1 1 + e − t ) = y ⋅ ( 1 − y ) y' = (\frac{1}{1+e^{-t}})(1-\frac{1}{1+e^{-t}}) = y·(1-y) y′=(1+e−t1)(1−1+e−t1)=y⋅(1−y)
⇕ \color{red}\Updownarrow ⇕
σ ′ ( t ) = σ ( t ) [ 1 − σ ( t ) ] \color{red}\sigma'(t) = \sigma(t)[1- \sigma(t)] σ′(t)=σ(t)[1−σ(t)]
第二节 —— 统计回归分析中的逻辑斯蒂
设X是随机变量。逻辑分布指满足如下累计分布函数和概率密度函数的分布:
F ( x ) = P ( X ≤ x ) = 1 1 + e − ( x − μ ) s F(x) = P(X \leq x) = \frac{1}{1+e^{ \frac{-(x- \mu )}{s}}} F(x)=P(X≤x)=1+es−(x−μ)1
f ( x ) = F ′ ( x ) = e − ( x − μ ) s s ( 1 + e − ( x − μ ) s ) 2 f(x) = F'(x) = \frac{e^{ \frac{-(x- \mu )}{s}}}{s(1+e^{ \frac{-(x- \mu )}{s}})^2} f(x)=F′(x)=s(1+es−(x−μ))2es−(x−μ)
μ \mu μ:位置参数,决定函数图像沿x轴方向的位移
s s s:形状参数,决定函数图像的高矮胖瘦
大家可以用几何画板画一下 μ \mu μ和 s s s取不同值时的图像,直观的理解一下这两个参数的作用。
F ( x ) F(x) F(x)是以点 ( μ , 1 2 ) (\mu,\frac{1}{2}) (μ,21) 中心对称的曲线。它越靠近中心增长越快。 s s s越小,在中心附近的增长越快。
特别地,当 μ \mu μ=0, s s s=1 时, F ( x ) = 1 1 + e − x = σ ( x ) F(x) = \frac{1}{1+e^{-x}} \color{red}= \sigma(x) F(x)=1+e−x1=σ(x)
逻辑斯蒂分布有和广泛的而应用。它最早来源于生长曲线的需要,现在还用于经济(例如描述一个产品在广告上投入与最后销售额的关系)、人口统计等领域。
对一个二元分类问题建模。
假设一个工厂生产的产品:达标/不达标 ~ B e r n o u l l i ( p ) Bernoulli(p) Bernoulli(p), p是产品达标的概率。
其中这个p受工厂其他各项指标的影响,比如流水线个数,员工人数,已投入使用时长,当日温度等等。假如我们就把举例的这四个作为特征,也就是说每一条数据(代表一个工厂)的特征向量有四维。
x i ⃗ = { x i 1 x i 2 x i 3 x i 4 } \vec{x_i} = \left\{ \begin{matrix} x_{i1}\\x_{i2}\\x_{i3}\\x_{i4} \end{matrix} \right\} xi=⎩⎪⎪⎨⎪⎪⎧xi1xi2xi3xi4⎭⎪⎪⎬⎪⎪⎫
角标的含义: x i j x_{ij} xij代表第 i 条数据的第 j 维。整个数据集的sample总数是N(i = 1, 2, …, N)
逻辑斯蒂回归的dataset应该是这个亚子的:
Index(i) | r i r_i ri | n i n_i ni | P i P_i Pi | x i ⃗ \vec{x_i} xi |
---|---|---|---|---|
1 | r 1 r_1 r1 | n 1 n_1 n1 | P 1 = r 1 n 1 P_1=\frac{r_1}{n_1} P1=n1r1 | ( x 11 x 12 x 13 x 14 ) (x_{11} \ \ \ x_{12} \ \ \ x_{13} \ \ \ x_{14}) (x11 x12 x13 x14) |
2 | r 2 r_2 r2 | n 2 n_2 n2 | P 2 = r 2 n 2 P_2=\frac{r_2}{n_2} P2=n2r2 | ( x 21 x 22 x 23 x 24 ) (x_{21} \ \ \ x_{22} \ \ \ x_{23} \ \ \ x_{24}) (x21 x22 x23 x24) |
… | … | … | … | … |
… | … | … | … | … |
N | r N r_N rN | n N n_N nN | P N = r N n N P_N=\frac{r_N}{n_N} PN=nNrN | ( x N 1 x N 2 x N 3 x N 4 ) (x_{N1} \ \ \ x_{N2} \ \ \ x_{N3} \ \ \ x_{N4}) (xN1 xN2 xN3 xN4) |
其中, P i P_i Pi的计算方法就是从这个工厂的产品中抽出n个然后检测出当中有r个达标,用 r n \frac{r}{n} nr 作为该工厂产品Bernoulli分布的 p . 刚才我们讲p受工厂的四个特征影响,那么我们的目标就是让p用 x ⃗ \vec{x} x 来表示。
Goal: Regress P i P_i Pi on x i ⃗ \vec{x_i} xi
第一个当然想到的是直接把 P i P_i Pi 当做线性回归里面的 “y“
⇒ M o d e l : P i = β 0 + β 1 x i 1 + . . . + β 4 x i 4 + ϵ i \Rightarrow Model: P_i=\beta_0 + \beta_1x_{i1} + ... + \beta_4x_{i4} + \epsilon_i ⇒Model:Pi=β0+β1xi1+...+β4xi4+ϵi
不过这个不太行,因为 0 ≤ P i ≤ 1 0\leq P_i \leq1 0≤Pi≤1,而 x i ⃗ T β ⃗ \vec {x_i}^T \vec{\beta} xiTβ 可能落在这个区间外。这样用 x i ⃗ T β ⃗ \vec {x_i}^T \vec{\beta} xiTβ 表示 P i P_i Pi 就没有意义。
Idea: Do transformation on P i P_i Pi(统计学中 logistic regression 的精髓呀呀呀!)
⇒ M o d e l : l o g ( P i 1 − P i ) = β 0 + β 1 x i 1 + . . . + β 4 x i 4 + ϵ i \Rightarrow Model: log(\frac{P_i}{1-P_i})=\beta_0 + \beta_1x_{i1} + ... + \beta_4x_{i4} + \epsilon_i ⇒Model:log(1−PiPi)=β0+β1xi1+...+β4xi4+ϵi
⇔ M o d e l : l o g ( P i 1 − P i ) = x i ⃗ T β ⃗ + ϵ ⃗ \Leftrightarrow Model: log(\frac{P_i}{1-P_i})=\vec {x_i}^T \vec{\beta} + \vec \epsilon ⇔Model:log(1−PiPi)=xiTβ+ϵ
⇔ F i t t e d m o d e l : l o g ( P i ^ 1 − P i ^ ) = x i ⃗ T β ⃗ ^ \Leftrightarrow Fitted \ model: log(\frac{\hat{P_i}}{1-\hat{P_i}})=\vec {x_i}^T \hat{\vec{\beta}} ⇔Fitted model:log(1−Pi^Pi^)=xiTβ^
有 ^ 符号的代表是根据样本数据算出来的参数estimates。对上式做一点变形:
F i t t e d m o d e l : P i ^ = e x p ( x i ⃗ T β ⃗ ) 1 + e x p ( x i ⃗ T β ⃗ ) = 1 1 + e x p ( − x i ⃗ T β ⃗ ) = σ ( x i ⃗ T β ⃗ ) Fitted \ model: \hat{P_i} = \frac{exp(\vec {x_i}^T \vec{\beta})}{1+exp(\vec {x_i}^T \vec{\beta})} = \frac{1}{1+exp(- \ \vec {x_i}^T \vec{\beta})} \color{red}= \sigma(\vec {x_i}^T \vec{\beta}) Fitted model:Pi^=1+exp(xiTβ)exp(xiTβ)=1+exp(− xiTβ)1=σ(xiTβ)
Index(i) | r i r_i ri | n i n_i ni | P i P_i Pi | y = l o g ( P i 1 − P i ) y=log(\frac{P_i}{1-P_i}) y=log(1−PiPi) | x i ⃗ \vec{x_i} xi |
---|---|---|---|---|---|
1 | r 1 r_1 r1 | n 1 n_1 n1 | P 1 = r 1 n 1 P_1=\frac{r_1}{n_1} P1=n1r1 | l o g ( P 1 1 − P 1 ) log(\frac{P_1}{1-P_1}) log(1−P1P1) | ( x 11 x 12 x 13 x 14 ) (x_{11} \ \ \ x_{12} \ \ \ x_{13} \ \ \ x_{14}) (x11 x12 x13 x14) |
2 | r 2 r_2 r2 | n 2 n_2 n2 | P 2 = r 2 n 2 P_2=\frac{r_2}{n_2} P2=n2r2 | l o g ( P 2 1 − P 2 ) log(\frac{P_2}{1-P_2}) log(1−P2P2) | ( x 21 x 22 x 23 x 24 ) (x_{21} \ \ \ x_{22} \ \ \ x_{23} \ \ \ x_{24}) (x21 x22 x23 x24) |
… | … | … | … | … | … |
… | … | … | … | … | … |
N | r N r_N rN | n N n_N nN | P N = r N n N P_N=\frac{r_N}{n_N} PN=nNrN | l o g ( P N 1 − P N ) log(\frac{P_N}{1-P_N}) log(1−PNPN) | ( x N 1 x N 2 x N 3 x N 4 ) (x_{N1} \ \ \ x_{N2} \ \ \ x_{N3} \ \ \ x_{N4}) (xN1 xN2 xN3 xN4) |
具体在计算的时候,把上面那个表格里每一行的 P i P_i Pi 都算一个相应的
l o g ( P i 1 − P i ) log(\frac{P_i}{1-P_i}) log(1−PiPi),并把这个当成线性回归里面的 “y”,剩下的回归就都清楚啦~
下面简单说一下为什么要这么做 transformation。
在统计学中一个事件A的几率:odds = P ( A ) 1 − P ( A ) \frac{P(A)}{1-P(A)} 1−P(A)P(A)
对数几率 = l o g ( P ( A ) 1 − P ( A ) ) log(\frac{P(A)}{1-P(A)}) log(1−P(A)P(A))
对数几率这个函数叫做 l o g i t logit logit 函数: l o g i t ( y ) = y 1 − y logit(y) = \frac{y}{1-y} logit(y)=1−yy
回到刚才的例子中,那么A =“达标”。 P i = P ( A ∣ x i ⃗ ) P_i= P(A \ |\ \vec{x_i}) Pi=P(A ∣ xi)
o d d s o f A a t x i ⃗ = P ( A ∣ x i ⃗ ) 1 − P ( A ∣ x i ⃗ ) = P i 1 − P i odds \ of \ A \ at \ \vec{x_i} = \frac{P(A \ |\ \vec{x_i})}{1-P(A \ |\ \vec{x_i})} = \frac{P_i}{1-P_i} odds of A at xi=1−P(A ∣ xi)P(A ∣ xi)=1−PiPi
l o g o d d s o f A a t x i ⃗ = l o g ( P i 1 − P i ) = x i ⃗ T β ⃗ + ϵ ⃗ log\ odds\ of\ A\ at\ \vec{x_i} = log\Big(\frac{P_i}{1-P_i}\Big) = \vec {x_i}^T \vec{\beta} + \vec \epsilon log odds of A at xi=log(1−PiPi)=xiTβ+ϵ
于是,逻辑斯蒂回归用一句话概括就是:用 x ⃗ \vec{x} x 的线性函数去拟合了二元事件的对数几率。因此,逻辑斯蒂回归也叫作 “对数几率回归”。
一般线性: y = β 0 + β 1 x i 1 + β 2 x i 2 + . . . + ϵ i = x i ⃗ T β ⃗ + ϵ ⃗ \color{#FF7256}y\color {black} = \beta_0 + \beta_1x_{i1} + \beta_2x_{i2} +... + \epsilon_i = \vec {x_i}^T \vec{\beta} + \vec \epsilon y=β0+β1xi1+β2xi2+...+ϵi=xiTβ+ϵ
广义线性: t r a n s f o r m a t i o n o f y = β 0 + β 1 x i 1 + β 2 x i 2 + . . . + ϵ i = x i ⃗ T β ⃗ + ϵ ⃗ \color{#FF7256}transformation\ of\ y \color{black}= \beta_0 + \beta_1x_{i1} + \beta_2x_{i2} +... + \epsilon_i = \vec {x_i}^T \vec{\beta} + \vec \epsilon transformation of y=β0+β1xi1+β2xi2+...+ϵi=xiTβ+ϵ
transformation 可以用 l o g ( y ) log(y) log(y), l o g i t ( y ) logit(y) logit(y), Φ − 1 ( y ) \Phi^{-1}(y) Φ−1(y) 等等。 ← Φ − 1 是 正 态 分 布 的 累 计 分 布 函 数 的 反 函 数 \leftarrow \Phi^{-1} 是正态分布的累计分布函数的反函数 ←Φ−1是正态分布的累计分布函数的反函数。
在logistic regression中就是用的 l o g i t logit logit函数做的 transformation。所以,说白了logistic regression依然是Independent variable x ⃗ \vec{x} x 的线性模型,只是给Dependent variable 套了一层外衣。
第三节 —— 视角切换到机器学习
我们把刚才统计中的各种符号和术语渐变到机器学习中来。
需要转换的术语 | 统计回归分析 | 机器学习 |
---|---|---|
x ⃗ i \vec x_i xi | Independent variable of the i t h i^{th} ith sample | 第 i 条数据的特征向量 |
β ⃗ \vec{\beta} β | Regression coefficients | 权重(参数) w ⃗ \vec{w} w,需要学习的东西 |
P i P_i Pi | Dependent variable | 输出,要预测的东西 |
P i = 1 1 + e x p ( − x i ⃗ T β ⃗ ) P_i=\frac{1}{1+exp(-\ \vec{x_i}^T\vec{\beta})} Pi=1+exp(− xiTβ)1 ⇕ \Updownarrow ⇕ y = σ ( w ⃗ T x ⃗ ) y=\sigma(\vec{w}^T\vec{x}) y=σ(wTx) |
Transformation | Activation function |
一切似乎都逐渐明朗了。
w ⃗ T x ⃗ \vec{w}^T\vec{x} wTx 不就是特征的 weighted sum 嘛。假如共有k个特征(b 表示bias):
w ⃗ = { w 1 w 2 . . w k b } x i ⃗ = { x i 1 x i 2 . . x i k 1 } \vec{w}=\left\{ \begin{matrix} w_1\\w_2\\.\\.\\w_k\\b \end{matrix} \right\} \quad \quad \vec{x_i} = \left\{ \begin{matrix} x_{i1}\\x_{i2}\\.\\.\\x_{ik}\\1 \end{matrix} \right\} w=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧w1w2..wkb⎭⎪⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎪⎫xi=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧xi1xi2..xik1⎭⎪⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎪⎫
还记不记得最简单粗暴的 Perceptron 二分类? 神经网络入门时都会看到这样一张图:
Sign() 就是一个简单粗暴的step function。当自变量低于阈值时,函数值为0,超过阈值时函数值为1. 它也算一个 activation function吧,作用就是给 w ⃗ T x ⃗ \vec{w}^T\vec{x} wTx 套一层外衣,变成了输出。但是sign() 不可导成为了致命伤。于是我们给 w ⃗ T x ⃗ \vec{w}^T\vec{x} wTx 换件衣服变成: σ ( w ⃗ T x ⃗ ) = 1 1 + e x p ( − w ⃗ T x ⃗ ) ← 这 就 舒 服 多 了 ! \sigma(\vec{w}^T\vec{x}) = \frac{1}{1+exp(- \ \vec{w}^T\vec{x})} \quad\leftarrow 这就舒服多了! σ(wTx)=1+exp(− wTx)1←这就舒服多了!
σ ( ) \sigma() σ()光滑可导并且值域还刚好是(0,1),因此可以模拟概率。
像回归分析中的一样,考虑一个二分类模型,label服从 B e r n o u l l i ( p ) Bernoulli(p) Bernoulli(p) 分布, y i = 1 y_i=1 yi=1 (正例) 的概率为 P i P_i Pi 。之后,训练 logistic regression模型意味着用特征的线性组合去拟合p的对数几率 (跟刚才一样)。
M o d e l : l o g ( P i 1 − P i ) = w ⃗ T x ⃗ ⇔ { P i = P ( y i = 1 ∣ x i ⃗ ) = 1 1 + e x p ( − w ⃗ T x ⃗ ) = σ ( w ⃗ T x ⃗ ) 1 − P i = P ( y i = 0 ∣ x i ⃗ ) = e x p ( − w ⃗ T x ⃗ ) 1 + e x p ( − w ⃗ T x ⃗ ) = 1 − σ ( w ⃗ T x ⃗ ) Model: log(\frac{P_i}{1-P_i}) = \vec{w}^T\vec{x} \quad \Leftrightarrow \quad \begin{cases} P_i=P(y_i=1\ |\ \vec{x_i}) = \frac{1}{1+exp(-\vec{w}^T\vec{x})}=\sigma(\vec{w}^T\vec{x}) \\ \ \\ 1-P_i= P(y_i=0\ |\ \vec{x_i})= \frac{exp(-\vec{w}^T\vec{x})}{1+exp(-\vec{w}^T\vec{x})}=1-\sigma(\vec{w}^T\vec{x}) \end{cases} Model:log(1−PiPi)=wTx⇔⎩⎪⎨⎪⎧Pi=P(yi=1 ∣ xi)=1+exp(−wTx)1=σ(wTx) 1−Pi=P(yi=0 ∣ xi)=1+exp(−wTx)exp(−wTx)=1−σ(wTx)
所以,模型输出是 σ ( w ⃗ T x ⃗ ) \sigma(\vec{w}^T\vec{x}) σ(wTx),它的含义是:在看到 x i ⃗ \vec {x_i} x