Logistic回归模型

Logistic回归的向量化

 首先,可以通过向量化的方式来消除遍历所有参数时使用的循环
 然后,集中精力使用向量化技术消除另一个循环,即用来遍历所有训练样本的循环
 第一步,将线性变换过程改写为向量化
 第二步,将激活过程改写为向量化
 第三步,做偏导数的向量化
 第四步,求出梯度中权值w的向量化表示
 第五步,求出梯度中偏置b的向量化表示
 第六步,对梯度dw和db做平均
 第七步,根据全局梯度dw和db来更新参数w和b

———

第一步,将线性变换过程改写为向量化

对于每一个样本有z(i)=wTx(i)+b,其中z表示线性组合的结果(计算过程中的中间值),wT表示一个权重向量,x表示
一个输入样本的特征向量,b表示偏置。当把视角放到所有样本的时候,就可以把公式改写为:Z=WX+b,其中,
Z=(z(1),z(2)…,z(i),…z(n))是一个向量,其中的每个分量是一个样本线性组合后的结果(计算过程中的中间值),
W=( wT(1),wT(2)…,wT(i),…wT(n))是一个矩阵,其中的每个向量是一个输入样本特征向量对应的权重向量,
X=( x(1),x(2)…,x(i),…x(n))是一个矩阵,其中的每个向量是一个输入样本特征向量,
b=( b(1),b(2)…,b(i),…b(n))是一个向量,其中的每个分量是一个线性变换运算过程中的偏置。

第二步,将激活过程改写为向量化

在完成了线性变换后,进行非线性变换。对于每一个样本有a(i)=sigmoid(z(i)),其中a(i)表示该样本的预测值。当把
视角放到所有样本的时候,就可以把公式改写为A=sigmoid(Z),其中A=( a(1),a(2)…,a(i),…a(n))表示一个向量其中
的每一个分量是一个输入值对应的预测值。这样通过一行代码就能实现所有样本的激活过程。

第三步,做偏导数的向量化

如果只考虑一个样本,那么公式dz(i)=a(i)-y(i)成立。
当需要同时考虑所有样本时,可以将多个dz向量组成一个矩阵
dZ= ( dz(1),dz(2)…,dz(i),…dz(n))。
同样的道理,将每个样本的真实值拿出组成一个向量Y=( y(1),y(2)…,y(i),…y(n))。
那么dZ就可以用A和Y来表示了,dZ=A-Y=( a(1)- y(1), a(2)- y(2),…,a(i)- y(i),…a(n)- y(n))。
这也就是说,完全可以通过向量A和向量Y来计算dZ。在代码实现的层面来看,只要构造出A和Y这两个向量,就可以
通过一行代码直接计算出dZ,而不需要通过for循环逐个计算。

第四步,求出梯度中权值w的向量化表示

再回顾之前关于梯度dw和db的计算,他们的实际计算过程分别如下:
这里写图片描述
通过观察可知道,上述的计算过程完全可以使用向量操作替代。
dw的计算过程其实就是样本矩阵X与梯度矩阵dZ的转置矩阵相乘,将计算结果除以训练样本数m得到平均值,这样就得到
了全局梯度值dw,所以将计算过程表示如下:
这里写图片描述

第五步,求出梯度中偏置b的向量化表示

再观察db的计算过程,其实更为简单,将每个训练样本的dz相加后,再除以m,即可得到全局梯度值db。
在python代码中,只需要使用numpy库提供的np.sum(dZ),一行简单代码就可以完成db的计算
这里写图片描述

第六步,对梯度dw和db做平均

在python中将向量dw和向量db分别除以m即可,
即 dw/=m和db/m,
python会自动使用广播机制,令向量dw中的值统一除以m。

第七步,根据全局梯度dw和db来更新参数w和b

在python中可以直接方便地使用向量化操作w=w-udw以及b=b-udb来更新参数,其中u代表学习率。
以上七个步骤便是Logistic回归梯度下降算法的向量化实现,通过向量化的方式不仅提升了效率,还从直观上看起来简
洁易懂了许多。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三更鬼

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值