1. 程式人生 > >向量化logistics回歸

向量化logistics回歸

ont += 方法 叠代 進行 .... -c 訓練數據 sigmoid

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 += x2

dz2 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

向量化logistics回歸