回顾Logistic回归
- y^ = σ(wT x + b) , σ(z) = 1/(1+e-z) 是Logistic回归的表达式,其中y^为使用Logistic回归计算出来的预测值,而y为训练样本的真实值。
目标是想要得到一个w和b,使y^ ≈ y。
z(i) = wTx(i) + b 可向量化为 Z = WTX + b。
伪损失函数Loss(y^ , y) = 1/2×(y^ - y)2,而真实的损失函数为:
代价函数J(w,b) = 1/m × ∑mi=1Loss(y^(i),y(i)),即对Loss函数从1到m(m为训练样本集的容量)求和,再除以m。代价函数是基于参数w,b的总成本,因此在训练Logistic回归时,我们需要寻找合适的参数w和b以使代价函数J尽可能地小。
梯度下降法
- 回顾Logistic回归。
使用梯度下降法寻找到合适的w,b使J尽可能地小。而(w,b,J)是一个三维空间内的碗形函数,因此通过梯度下降,一定会得到一个全局最优解。
梯度下降的迭代过程:
对于梯度下降中的参数更新,如下所示:
之后我们会将 dJ(w , b)/dw 记为 dw,b中的偏导项即为db。
Logistic回归中的梯度下降
- 回顾Logistic回归:
假设此时我们只用两个训练样本x1和x2,还有w1,w2和b,那么这些参数可计算出z。使用偏导数流程图可表示为:
而Logistic回归的目的是寻找合适的参数,来使Loss函数尽可能地小。 - 偏导数流程图:
想要计算L(a,y),需要计算da,即dL(a,y)/da。再向前一步,计算出dz。
反向传播在Logistic回归中的应用:
即,从输出层开始,一步一步向前计算需要的偏导数。
m个参数的梯度下降
- 代价函数J:
J(w,b) = 1/m × Σmi=1L(a(i),y)
其中,a(i) = y^(i) = sigmoid(z(i))
实现m个参数的梯度下降,则需要使用向量化的方法。 - 不使用向量化的累加过程:
做完累加之后,再对参数w和b进行更新。 - 使用向量化,去掉了两个显示的for循环:
Python实现Logistic回归
import numpy as np