×

logistic regression一点理解

96
slade_sal
2018.08.14 13:32* 字数 951

关于logistic regression一些常见问题,整理出来,方便大家应对各种坑爹的面试官。

为什么用sigmoid函数?

the odds of experiencing an event

如果我们想预测每天股票涨多少,可以假设线性模型f(x)=w_{0}+w_{1}x_{1}+w_{2}x_{2}+...+w_{m}x_{m},然后通过MSE进行模型更新;但是如果我们想要预测每天是否涨这样就不行了,因为f(x)对于的结果要么是1要么是0(要么涨要么不涨)。

要解决这个问题,我们先理解一个概念the odds of experiencing an event:
假设我们认为股票涨的概率为p,对于伯努利分布而言,不涨的概率即为1-p。那么我们构造了p/(1-p),就是the odds of experiencing an event胜率,ln(\frac{p}{1-p})即为对数胜率。当我们坚信它会涨的情况下,p趋向1,ln(\frac{p}{1-p})趋向正无穷;当我们坚信它不会涨的情况下,p趋向0,ln(\frac{p}{1-p})趋向负无穷。这就又转化为可以用线性模型预测的问题了:
ln(\frac{p}{1-p}) = g(x) = w_{0}+w_{1}x_{1}+w_{2}x_{2}+...+w_{m}x_{m}

ln(\frac{p}{1-p}) = g(x)展开就可以得到:p = \frac{1}{1+e^{-g(x)}},这就解释了为什么说logistic regression是线性模型,因为它的决策边界是线性的;这就解释了为什么想到了要用sigmoid作为压缩函数。

exponential model

就这一种办法么?当然不是:
假设第i个特征对涨的贡献是w_{1i},则记数据点(x_1, \ldots, x_n)属于涨的概率为w_{11}x_1 + w_{12}x_2 + \ldots + w_{1n}x_n,正比于\exp(w_{11}x_1 + w_{12}x_2 + \ldots + w_{1n}x_n)

假设第i个特征对不涨的贡献是w_{0i},则记数据点(x_1, \ldots, x_n)属于不涨的概率为w_{01}x_1 + w_{02}x_2 + \ldots + w_{0n}x_n,正比于\exp(w_{01}x_1 + w_{02}x_2 + \ldots + w_{0n}x_n)

所以,令涨=1则有:
p(y=1)=\frac{\exp(w_{11}x_1 + w_{12}x_2 + \ldots + w_{1n}x_n)}{\exp(w_{11}x_1 + w_{12}x_2 + \ldots + w_{1n}x_n)+\exp(w_{01}x_1 + w_{02}x_2 + \ldots + w_{0n}x_n)},上下同除以\exp(w_{11}x_1 + w_{12}x_2 + \ldots + w_{1n}x_n)且令w_{0i}-w_{1i} = w_{2i},则依旧得到了p(y=1)= \frac{1}{1+e^{-h(w_{2i}x)}}的sigmoid结果。

exponential family

如果大家对数学有点点研究的话,exponential family指出:如果一类分布(a class of distribution)属于exponential family,那么它能写成如下形式:
p(y;\eta )=b(y)exp(\eta ^{T}T(y)-a(\eta ))

伯努利分布可以写成:p(y;\Theta ) = \Theta ^{y}(1-\Theta )^{1-y}
p(y;\Theta ) =exp(ylog( \Theta) +(1-y)log(1-\Theta ))
把后面的(1-y)log(1-\Theta )展开,就有了sigmoid形式出现了:
p(y;\Theta ) =exp(ylog( \Theta/(1-\Theta)) +log(1-\Theta ))
对应上方的exponential family的形式,\eta =log( \Theta/(1-\Theta)),这不又回到了the odds of experiencing an event胜率的问题了嘛。


为什么要用交互熵做损失函数?

极大似然角度:

我们假设预测结果服从伯努利分布,那么可以把一个case预测结果写成:p(y_{i}) = \Theta ^{y_{i}}(1-\Theta )^{1-y_{i}}
其中\Theta为给定前提p(y_{i}=1|x_{i}) =1y_{i}=1概率值

要使当前参数下所有事情发生的概率最大,联合分布为各边缘分布的乘积,得到:
L(w)=\prod (h(x_{i}))^{y_{i}}(1-h(x_{i}))^{1-y_{i}}
其中h(x) = w_{0}+w_{1}x_{1}+w_{2}x_{2}+...+w_{m}x_{m}
取log后方便计算:
ln(L(w))=\sum (y_{i}lnh(x_{i})+(1-y_{i})ln(1-x_{i})))
这个就是我们最初的交互熵的形式。

信息熵角度:

用来衡量信息量大小,熵越大,越不稳定,信息量越大。
S(x) = -\sum_{i}P(x_{i})logP(x_{i})

KL散度

用来衡量两份数据的相似程度,KL散度越大,越不相似。
\begin{equation*} D_{KL}(A||B) = \sum_{i}P_{A}(x_i) log\bigg(\frac{P_{A}(x_i)}{P_{B}(x_i)} \bigg) = \sum_{i}P_{A}(x_i)log(P_{A}(x_i ))- P_{A}(x_i)log(P_{B}(x_i)) \end{equation*}

从公式上,我们就可以看出:D_{KL}(A||B) + S(A)=H(A,B)

其实很好理解的,对应训练数据traindata分布,和未知的真实数据分布越一致越好;同理,模型预测的分布,和训练数据traindata分布也是越一致越好,所以用KL散度来度量就是一个不错的方法。

至于为什么不直接最小化D_{KL}(A||B)而是选择了最小化H(A,B),我是觉得就和交互熵求导前面加上1/2一样,为了简化计算量,本质上是一致的。


欢迎大家关注我的个人bolg,更多代码内容欢迎follow我的个人Github,如果有任何算法、代码疑问都欢迎通过公众号发消息给我哦。

机器学习算法理论
Web note ad 1