我是靠谱客的博主 忐忑世界,最近开发中收集的这篇文章主要介绍Logistic回归代价函数的数学推导及实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

logistic回归的代价函数形式如下:
J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(theta) = -frac{1}{m}left[sum_{i=1}^{m}y^{(i)}log h_theta(x^{(i)}) + (1 - y^{(i)})log (1 - h_theta(x^{(i)}))right] J(θ)=m1[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

可是这又是怎么来的呢? 答:最大似然估计计算出来的

1.最大似然估计

我们先来简单的回顾一下最大似然估计(Maximum likelihood estimation),详细戳此处,见参数估计

所谓参数估计就是:对未知参数 θ theta θ进行估计时,在参数可能的取值范围内选取,使“样本获得此观测值 x 1 , x 2 . . . , x n x_1,x_2...,x_n x1,x2...,xn"的概率最大的参数 θ ^ hat{theta} θ^作为 θ theta θ的估计,这样选定的 θ ^ hat{theta} θ^有利于 x 1 , x 2 . . . , x n x_1,x_2...,x_n x1,x2...,xn"的出现。也就是说在已知数据集(结果)和模型(分布函数)的情况下,估计出最适合该模型的参数。

举个例子:

假设你有一枚硬币,随机抛10次;现在的结果是6次正面。我们都知道,抛一枚硬币,正面朝上和反面朝上的概率均是θ=0.5;但前提时,这是在大量的实验(抛硬币)情况下才有的结论。那在我们这个情况下,参数θ到底取何值时才能使得出现6次正面的肯能性最大呢?

我们知道,抛硬币是符合二项分布B(n,p),也就是说我们现在已知样本结果以及函数分布,估计出使得该结果最大可能出现的参数 θ ^ hat{theta} θ^。则有:
L = P ( X = 6 ) = C 10 6 θ ^ 6 ( 1 − θ ^ ) 4 mathrm{L}=P(X=6)=mathrm{C_{10}^6}hat{theta}^6(1-hat{theta})^4 L=P(X=6)=C106θ^6(1θ^)4

而我们接下来要做的就是求当 L mathrm{L} L取最大值时, θ ^ hat{theta} θ^的值。我们很容易求得当 θ ^ = 0.6 hat{theta}=0.6 θ^=0.6 L mathrm{L} L取得最大值0.25;而当 θ ^ = 0.5 hat{theta}=0.5 θ^=0.5时, L = 0.21 mathrm{L}=0.21 L=0.21

再假设你有一枚硬币,随机抛10次;现在的结果是7次正面。则此时使得该结果最大可能性出现参数 θ ^ hat{theta} θ^又是多少呢?按照上面的方法我们很容易求得当 θ ^ = 0.7 hat{theta}=0.7 θ^=0.7时可能性最大。

再举个例子:

明显,在Logistic回归中,所有样本点也服从二项分布;设有 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3三个样本点,其类标为 1 , 1 , 0 1,1,0 1,1,0;同时设样本点为1的概率为 P = h θ ( x ) P=h_{theta}(x) P=hθ(x),那么当 P P P等于多少时,其结果才最可能出现 1 , 1 , 0 1,1,0 1,1,0呢?于是问题就变成最大化:
P ∗ P ( 1 − P ) = h θ ( x 1 ) ∗ h θ ( x 2 ) ∗ ( 1 − h θ ( x 3 ) ) P*P(1-P)=h_{theta}(x_1)*h_{theta}(x_2)*(1-h_{theta}(x_3)) PP(1P)=hθ(x1)hθ(x2)(1hθ(x3))

而这就是最大似然估计(求解参数估计的一个方法)

2.最大似然估计的数学定义

  • 设总体X是离散型,其概率分布为 P { X = x } = p ( x ; θ ) , θ P{X=x}=p(x;theta),theta P{X=x}=p(x;θ),θ为未知参数, X 1 , X 2 , . . . , X n X_1,X_2,...,X_n X1,X2,...,Xn X X X的一个样本,则 X 1 , X 2 , . . . , X n X_1,X_2,...,X_n X1,X2,...,Xn 取值为 x 1 , . . . , x n x_1,...,x_n x1,...,xn的概率是:
    P { X 1 = x 1 , . . . , X n = x n } = ∏ i = 1 n P { X i = x i } = ∏ i = 1 n p { x i ; θ } P{X_1=x_1,...,X_n=x_n}=prod_{i=1}^nP{X_i=x_i}=prod_{i=1}^np{x_i;theta} P{X1=x1,...,Xn=xn}=i=1nP{Xi=xi}=i=1np{xi;θ}

显然这个概率值是 θ theta θ的函数,将其记为
L ( θ ) = L ( x 1 , . . . , x n ; θ ) = ∏ i = 1 n p { x i ; θ } mathrm{L}(theta)=L(x_1,...,x_n;theta)=prod_{i=1}^np{x_i;theta} L(θ)=L(x1,...,xn;θ)=i=1np{xi;θ}

L ( θ ) mathrm{L}(theta) L(θ)为样本 ( x 1 , . . . , x n ) (x_1,...,x_n) (x1,...,xn)似然函数.
θ ^ hat{theta} θ^使得
L ( x 1 , . . . , x n ; θ ^ ) = max ⁡ L ( x 1 , . . . , x n ; θ ) mathrm{L}(x_1,...,x_n;hat{theta})=max mathrm{L}(x_1,...,x_n;theta) L(x1,...,xn;θ^)=maxL(x1,...,xn;θ)

则称 θ ^ = θ ^ ( x 1 , . . . , x n ) hat{theta}=hat{theta}(x_1,...,x_n) θ^=θ^(x1,...,xn)为未知参数 θ theta θ最大似然估计值.

求解步骤

a. 写出似然函数;

b. 方程两边同时取 l n mathrm{ln} ln的对数;

c. 令 ∂ l n L ∂ θ i = 0 frac{partialmathrm{ln L}}{partial theta_i}=0 θilnL=0,求得参数

3.Logistic回归代价函的推导

设:
P ( y = 1 ∣ x ; θ ) = h θ ( x ) P ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) h ( x ) = g ( z ) = g ( θ T x ) begin{aligned} &P(y=1|x;theta)=h_{theta}(x)\[1ex] &P(y=0|x;theta)=1-h_{theta}(x)\[1ex] &h(x)=g(z)=g(theta^Tx) end{aligned} P(y=1x;θ)=hθ(x)P(y=0x;θ)=1hθ(x)h(x)=g(z)=g(θTx)

将两者合并到一起为:
(3.1) p ( y ∣ x ; θ ) = ( h θ ( x ) ) y ( 1 − h θ ( x ) ) 1 − y p(y|x;theta)=(h_{theta}(x))^y(1-h_{theta}(x))^{1-y}tag{3.1} p(yx;θ)=(hθ(x))y(1hθ(x))1y(3.1)

因此我们可以得到似然函数:
(3.2) L ( θ ) = ∏ i = 1 m p ( y ( i ) ∣ x ( i ) ; θ ) = ∏ i = 1 m ( h θ ( x ( i ) ) ) y ( i ) ( 1 − h θ ( x ) ) 1 − y ( i ) begin{aligned} L(theta)&=prod_{i=1}^mp(y^{(i)}|x^{(i)};theta)\[2ex] &=prod_{i=1}^m(h_{theta}(x^{(i)}))^{y^{(i)}}(1-h_{theta}(x))^{1-y^{(i)}}tag{3.2} end{aligned} L(θ)=i=1mp(y(i)x(i);θ)=i=1m(hθ(x(i)))y(i)(1hθ(x))1y(i)(3.2)

于是两边同时取自然对数得:
(3.3) l ( θ ) = log ⁡ L ( θ ) = ∑ i = 1 m [ y ( i ) log ⁡ h ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h ( x ( i ) ) ) ] begin{aligned} mathcal{l}(theta) &= log{L}(theta)\[3ex] &=sum_{i=1}^mleft[y^{(i)}log{h(x^{(i)})+(1-y^{(i)})log{(1-h(x^{(i)}))}}right]tag{3.3} end{aligned} l(θ)=logL(θ)=i=1m[y(i)logh(x(i))+(1y(i))log(1h(x(i)))](3.3)

插播一个公式:
log ⁡ a b c d = log ⁡ a b + log ⁡ c d = b log ⁡ a + d log ⁡ c log{a^bc^d}=log{a^b}+log{c^d}=blog{a}+dlog{c} logabcd=logab+logcd=bloga+dlogc

且最大化 ( 3.3 ) (3.3) (3.3)等价于最小化 − 1 m l ( θ ) -frac{1}{m}l(theta) m1l(θ)

下面我们梯度下降算法进行求解,所以就要对所有的参数求偏导,按照惯例,我们先考虑一个样本点( m = 1 m=1 m=1)的情况,然后在矢量化:

(3.4) ∂ l ∂ θ j = − ∂ ∂ θ j [ y log ⁡ ( h θ ( x ) ) + ( 1 − y ) log ⁡ ( 1 − h θ ( x ) ) ] = − ∂ ∂ θ j [ y log ⁡ ( g ( z ) ) + ( 1 − y ) log ⁡ ( 1 − g ( z ) ) ] = − ( y g ( z ) ∂ g ( z ) ∂ θ j − ( 1 − y ) ( 1 − g ( z ) ) ∂ g ( z ) ∂ θ j ) = − ( y g ( θ T x ) − ( 1 − y ) ( 1 − g ( θ T x ) ) ) ∂ g ( θ T x ) ∂ θ T x ∂ θ T x ∂ θ j = − ( y − g ( z ) ) x j begin{aligned} frac{partial mathcal{l}}{partialtheta_j}&=-frac{partial }{partialtheta_j}left[ylog{(h_{theta}(x))}+(1-y)log{(1-h_{theta}(x))}right]\[2ex] &=-frac{partial }{partialtheta_j}left[ylog{(g(z))}+(1-y)log{(1-g(z))}right]\[2ex] &=-left(frac{y}{g(z)}frac{partial g(z)}{partial theta_j}-frac{(1-y)}{(1-g(z))}frac{partial g(z)}{partial theta_j}right)\[2ex] &=-left(frac{y}{g(theta^Tx)}-frac{(1-y)}{(1-g(theta^Tx))}right)frac{partial g(theta^Tx)}{partial theta^Tx}frac{partial theta^Tx}{partial theta_j}\[2ex] &=-(y-g(z))x_jtag{3.4} end{aligned} θjl=θj[ylog(hθ(x))+(1y)log(1hθ(x))]=θj[ylog(g(z))+(1y)log(1g(z))]=(g(z)yθjg(z)(1g(z))(1y)θjg(z))=(g(θTx)y(1g(θTx))(1y))θTxg(θTx)θjθTx=(yg(z))xj(3.4)
(3.5) ∂ l ∂ b = − ( y g ( θ T x ) − ( 1 − y ) ( 1 − g ( θ T x ) ) ) ∂ g ( θ T x ) ∂ θ T x ∂ θ T x ∂ b = − ( y − g ( z ) ) ∗ 1 begin{aligned} frac{partial mathcal{l}}{partial b}&=-left(frac{y}{g(theta^Tx)}-frac{(1-y)}{(1-g(theta^Tx))}right)frac{partial g(theta^Tx)}{partial theta^Tx}frac{partial theta^Tx}{partial b}\[2ex] &=-(y-g(z))*1 tag{3.5} end{aligned} bl=(g(θTx)y(1g(θTx))(1y))θTxg(θTx)bθTx=(yg(z))1(3.5)

这儿用的是 g ( z ) = 1 / ( 1 + e x p ( − z ) ) g(z)=1/(1+exp(-z)) g(z)=1/(1+exp(z)),同样还可以是 t a n h ( z ) tanh(z) tanh(z),但是选取前者主要是因为其求导之后的结果为 g ′ ( z ) = g ( z ) ( 1 − g ( z ) ) g'(z)=g(z)(1-g(z)) g(z)=g(z)(1g(z))便于化简。

于是根据梯度下降算法有:
(3.6) θ j = θ j − 1 m α ( h ( x ) − y ) ⋅ x j begin{aligned} &theta_j = theta_j-frac{1}{m}alpha(h(x)-y)cdot x_jtag{3.6} end{aligned} θj=θjm1α(h(x)y)xj(3.6)
(3.7) b = b − 1 m α ∑ ( h ( x ) − y ) begin{aligned} &b = b - frac{1}{m}alphasum(h(x)-y)tag{3.7} end{aligned} b=bm1α(h(x)y)(3.7)

注意,此时的 x , y x,y x,y均为n个样本点的情况,与 ( 3.4 ) (3.4) (3.4)中不同。 x j x_j xj是指,每个样本点的第j维所组成的列向量。

( 3.6 ) (3.6) (3.6)矢量化后为:
θ = θ − 1 m α    x T ⋅ ( h ( x ) − y ) theta=theta-frac{1}{m}alpha;x^Tcdot(h(x)-y) θ=θm1αxT(h(x)y)

" ⋅ cdot "表示点乘

4. python 实现

def gradDescent(X, y, W, b, alpha):
    maxIteration = 500
    for i in range(maxIteration):
        z = X*W+b
        error = sigmoid(z) - y
        W = W - (1.0/m)*alpha*X.T*error
        b = b - (1.0/m)*alpha*np.sum(error)
    return W,b

源码

最后

以上就是忐忑世界为你收集整理的Logistic回归代价函数的数学推导及实现的全部内容,希望文章能够帮你解决Logistic回归代价函数的数学推导及实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部