Logistic Regression

    xiaoxiao2021-04-18  261

    Logistic Regression

    定义loss function & cost function代价函数的解释交叉熵CEH的角度极大似然估计的角度 求解求梯度迭代求解 代码示例参考

    定义

    对于一个样本x,模型模拟函数如下: y ^ = a = σ ( z ) = σ ( w T x + b ) \hat{y}=a=\sigma(z)=\sigma(w^Tx+b) y^=a=σ(z)=σ(wTx+b) σ ( z ) = 1 1 + e − z \sigma(z)=\frac 1{1+e^{-z}} σ(z)=1+ez1 z = w T x + b z=w^Tx+b z=wTx+b 其中, σ ( z ) \sigma(z) σ(z)是 sigmod 函数称为激活函数,如下图所示。可依据器输出的值大小对样本x进行分类。由于其值域范围为0~1,可以将该激活函数的输出看做为某一类别的概率。

    loss function & cost function

    loss function: l ( y ^ , y ) = − y l o g y ^ − ( 1 − y ) l o g ( 1 − y ^ ) l(\hat{y},y)=-ylog\hat{y}-(1-y)log(1-\hat{y}) l(y^,y)=ylogy^(1y)log(1y^) cost function: J ( w , b ) = 1 m ∑ i = 1 m l ( y ^ ( i ) , y ( i ) ) = − 1 m ∑ i = 1 m y l o g y ^ + ( 1 − y ) l o g ( 1 − y ^ ) J(w,b)=\frac 1m\sum_{i=1}^{m}l(\hat{y}^{(i)},y^{(i)})=-\frac 1m\sum_{i=1}^{m}ylog\hat{y}+(1-y)log(1-\hat{y}) J(w,b)=m1i=1ml(y^(i),y(i))=m1i=1mylogy^+(1y)log(1y^) 其中,m表示样本个数i表示样本个数。损失函数 l l l衡量的时单个样本的预测值和实际值的差距,代价函数cost衡量的时所有样本的差距

    代价函数的解释

    交叉熵CEH的角度

    补充:交叉熵和KL散度正相关,都反映了假设分布到真实分布的距离(无效性)

    对于一个假设分布q 和一个真实已确定的分布p,其交叉熵公式如下: C E H ( p , q ) = E p [ − l o g ( q ) ] = − ∑ x ϵ X [ p ( x ) l o g q ( x ) ] CEH(p,q)=E_p[-log(q)]=-\sum_{x\epsilon{X}}[p(x)logq(x)] CEH(p,q)=Ep[log(q)]=xϵX[p(x)logq(x)] 其中假设样本数据,为已知分布p, 则对于样本x的概率为: p ( x ) = { y , y = 1 1 − y , y = 0 p(x)=\left\{ \begin{aligned} y &&, && y=1 \\ 1-y &&,&& y=0 \\ \end{aligned} \right. p(x)={y1y,,y=1y=0 其中预测的分布为q,则对于样本x 的概率为: q ( x ) = q ( y ∣ w , b , x ) = { y ^ , y = 1 1 − y ^ , y = 0 q(x)=q(y|w,b,x)=\left\{ \begin{aligned} \hat{y} &&, && y=1 \\ 1-\hat{y} &&,&& y=0 \\ \end{aligned} \right. q(x)=q(yw,b,x)={y^1y^,,y=1y=0 所以,将上面两个概率带入交叉熵函数,可得: J ( w , b ) = 1 m C E H ( p , q ) = − 1 m ∑ i = 1 m y l o g y ^ + ( 1 − y ) l o g ( 1 − y ^ ) J(w,b)=\frac1mCEH(p,q)=-\frac 1m\sum_{i=1}^{m}ylog\hat{y}+(1-y)log(1-\hat{y}) J(w,b)=m1CEH(p,q)=m1i=1mylogy^+(1y)log(1y^)

    极大似然估计的角度

    补充:似然函数描述的时在参数条件下,某件事发生的概率,我们要做的就是找到该参数使其概率最大

    L = ∏ ( y ^ ) y ( 1 − y ^ ) ( 1 − y ) L=\prod(\hat y)^y(1-\hat y)^{(1-y)} L=(y^)y(1y^)(1y) 也就是目标为: − L m i n ( w , b ) -L_{min}(w,b) Lmin(w,b), 对其求对数,转换成对数似然就可得到代价函数。

    求解

    求解的基本方法梯度下降

    求梯度

    1、目标是找到,w,b使得代价函数最小,因此需要求,损失函数对w 和 b的偏导。(复合函数求导,chain rule) ∂ l ∂ w = ∂ l ∂ y ^ ∗ ∂ y ^ ∂ z ∗ ∂ z ∂ w \frac{\partial l}{\partial w}=\frac{\partial l}{\partial \hat{y}}*\frac{\partial \hat{y}}{\partial z}*\frac{\partial z}{\partial w} wl=y^lzy^wz ∂ l ∂ b = ∂ l ∂ y ^ ∗ ∂ y ^ ∂ z ∗ ∂ z ∂ b \frac{\partial l}{\partial b}=\frac{\partial l}{\partial \hat{y}}*\frac{\partial \hat{y}}{\partial z}*\frac{\partial z}{\partial b} bl=y^lzy^bz

    2、activation function sigmoid , σ ( z ) = 1 1 + e − z \sigma(z)=\frac 1{1+e^{-z}} σ(z)=1+ez1 的导数为:

    σ ′ ( z ) = d y ^ d z = σ ( z ) ( 1 − σ ( z ) ) = y ^ ( 1 − y ^ ) \sigma^{'}(z)=\frac{d\hat y}{dz}=\sigma(z)(1-\sigma(z))=\hat y(1-\hat y) σ(z)=dzdy^=σ(z)(1σ(z))=y^(1y^) 3、loss函数对 y ^ \hat{y} y^求偏导 ∂ l ∂ y ^ = − y y ^ + 1 − y 1 − y ^ \frac{\partial l}{\partial \hat{y}}=-\frac{y}{\hat y}+\frac{1-y}{1-\hat y} y^l=y^y+1y^1y 4、x为n维向量 ∂ z ∂ w 1 = x 1 \frac{\partial z}{\partial w_1}=x_1 w1z=x1 ∂ z ∂ w 2 = x 2 \frac{\partial z}{\partial w_2}=x_2 w2z=x2 ∂ z ∂ w n = x n \frac{\partial z}{\partial w_n}=x_n wnz=xn ∂ z ∂ b = 1 \frac{\partial z}{\partial b}=1 bz=1

    对于样本x依据链式法则: ∂ l ∂ w = ( y ^ − y ) x \frac{\partial l}{\partial w}=(\hat y-y)x wl=(y^y)x 因此: ∂ J ∂ w = 1 m ∑ i = 1 m ( y ^ i − y i ) x i = 1 m X ( Y ^ − Y ) T \frac{\partial J}{\partial w}=\frac{1}{m}\sum_{i=1}^{m}(\hat y^{i}-y^{i})x^{i}=\frac{1}{m}X(\hat Y-Y)^{T} wJ=m1i=1m(y^iyi)xi=m1X(Y^Y)T ∂ l ∂ b = 1 m ∑ i = 1 m ( y ^ − y ) \frac{\partial l}{\partial b}=\frac{1}{m}\sum_{i=1}^{m}(\hat y-y) bl=m1i=1m(y^y) 注: X为nxm维的矩阵,你为特征维度,m为样本个数

    迭代求解

    repeat:{ w : w − α ∂ w w : w-\alpha \partial w w:wαw b : b − α ∂ b b:b-\alpha \partial b b:bαb }

    代码示例

    ```python # 这段代码用来解释说明 logistic regression import numpy as np # activation functuion: sigmoid def sigmoid(z): """ z 为入参,类型为 array 数组 retuen :sigmoid(z) """ s= 1.0/(1+np.exp(-z)) return s # 定义初始化参数函数 def initialize_w_b(dim): """ w: 维度为(dim,1) 这里 w 和 b 都初始化 为0,也可以采用其他方法,注意出现 梯度消失 的现象。 """ w = np.zeros((dim,1),dtype=float) b = 0 assert(isinstance(b,float) or ininstance(b,int)) return w,b # 定义函数 完成 前向计算和反向梯度求解 def propagate(w,b,X,Y): """ w : shape (nx,1) b : bias X : shape (nx,number of examples) Y : shape (1,number of examples) return: cost -- 计算代价 dw -- w的梯度 db -- b的梯度 """ # forward propagatioon m = X.shape[1] # the number of sample A =sigmoid(np.dot(w.T,x)+b) # the resulr of activation function cost = -np.sum((Y*np.log(A)+(1-Y)*np.log(1-A)),axis=1)/m # backward propagation dw = np.dot(X,(A-Y).T)/m db = np.sum((A-Y))/m assert(dw.shape == w.shape) assert(sb.dtype == float) cost = np.squeeze(cost) assert(cost.shape == ()) # build result grads ={"dw":dw,"db":db} return grads , cost # 定义迭代优化求解的函数 def optimize(w,b,X,Y,num_iterations,learning_rate,print_cost=False): """ 简单的梯度下降迭代优化求解 """ costs = [] for i in range(num_iterations): # 计算当前代价 和 参数梯度 grads, cost = propagate(w,b,X,Y) # 更新参数 dw = grads["dw"] db = grads["db"] w = w=learning_rate*dw b = b-learning-rate*db if i0 ==0: costs.append(cost) if print_cost and i % 100 == 0: print ("Cost after iteration %i: %f" %(i, cost)) params = {"w":w,"b":b} grads = {"dw":dw,"db":db} return params, grads , costs #end ,至此完成一个logistic regression 训练的所有函数都已经实现完毕。

    参考

    logistics regression wikipedia Interpretable Machine Learning stochastic gradient descent wikipedia Cross entropy wikipedia


    最新回复(0)