向量化logistics回归

时间:2022-03-27 21:21:07

Z = wTx + b

a = σ (z) = 1 / ( 1 + e-z )

L ( a , y ) = —( y log(a) + ( 1 - y ) log(1-a) )

dz(i) = a(i) - y(i)

dw = xdz

db = dz

 

 如何向量化计算m个训练数据的梯度:

梯度计算时dz(i) = a(i) - y(i)

定义 Z = { z1 , z2 , z3 ................zm }

        A = { a1 , a2 ,a3 ................ am }

        Y = { y1 , y2 , y3 ................ym }

则:

        dz = A - Y = { a1 - y1 , a2 - y2 , a3 - y3 ....................am - ym  }

对于传统方法需要用for循环来重复更新dw和db的值

如: dw = 0                                                             db = 0

        dw  += x1dz1                                                                           db += dz1

        dw  += x2dz2                                                                           db += dz2

               :                                                                      :

               :                                                                      :

               :                                                                      :

       dw  += xmdzm                                                                             db += dzm

       dw /= m                                                              db / = m

 

深度学习中使用方法为:

Z = np.dot(w.T,X)+b

A = sigmoid(Z)

dz = A - Y 

dw = 1/m X dzT       (其中X为x1 , x2 ......... xm组成的n*m阶矩阵 ,dz为z1 ,z2 .......... zm组成的1*m阶矩阵,则dzT为m*1阶矩阵 )

db = 1 / m * np.sum ( dz )

 

到这里就完成了正向和反向传播,确实实现了对所有训练样本进行预测和求导,而且没有用一个for循环,然后梯度下降更新参数

w = w - α * dw

b = b - α * db

其中α是学习率 

 

上述所有标黄的部分就实现了logistic回归的梯度下降一次迭代

如果需要多洗进行迭代梯度下降,如:要求1000次导数进行梯度下降,在最外层需要一次for循环

for  i   in   range (1000) : 

  Z = np.dot(w.T,X)+b

  A = sigmoid(Z)

  dz = A - Y 

  dw = 1/m X dzT  

  db = 1 / m * np.sum ( dz )

  w = w - α * dw

  b = b - α * db