解决二分类问题的算法,二分类模型的例子

  解决二分类问题的算法,二分类模型的例子

  本文来自网易云课堂。

  两个分类问题:logistic回归中的梯度下降法本节主要使用三个核心公式:

  z=wTx b

  y^=a=(z)=11 e(z)

  L(a,y)=(ylog(a)(1y)log(1a))

  本文中使用的符号说明:

  Dz=Lz,一般简称dLdz

  Da=La,通常被称为dLda

  Dw=Lw,通常被称为dLdw

  Db=Lb,通常简称为dLdb

  从下图可以清楚地看到正向传播过程。现在,计算导数。

  该公式推导如下:

  dLda=ya 1 y1a

  dadz=a(1a)

  dz=dLdz=dLdadadz=a y

  dw=dLdw=dLdzdzdw=(a y)x=dzx

  db=dLdb=dLdzdzdb=a y=dz

  m个样品的梯度下降岩心公式:

  J(w,b)=1mmi=1L(a(i),y)

  a(i)=y^(i)=(z(i))=(wTx(i)

  w1j(w,b)=1mmi=1w1l(a(i),y)=1mmi=1dw(i)1

  全局代价函数实际上是所有损失函数的平均值,相应地,全局代价函数对w1的导数也是所有损失函数对w1的平均值。所以,我们实际要做的是计算全局梯度导数W1J (W,B),所以我们可以这样表示算法。

  但是这种计算方法并不完美,我们可以通过编程来改进。首先这个算法需要写两个for循环,一个遍历M个样本,另一个遍历每个样本中的N个特征(上图只有2个特征)。当使用深度学习算法时,会发现使用for循环会使算法效率低下。同样,深度学习领域的数据集也会越来越多,所以能够在完全不使用display for loop的情况下应用你的算法是有帮助的。矢量化技术的出现可以帮助你的代码摆脱这些显示出来的for循环。

  vector import numpy as NP import time a=NP . random . rand(100000)b=NP . random . rand(100000)TIC=time . time()c=NP . dot(a,b)toc=time.time()print 矢量化版本: str(1000 *(TOC-TIC)) ms c=0 TIC=time . time()for I in range(1000000):c=a[I]* b[I]TOC=time

  矢量化版本:3.00002098083毫秒

  250134.4175349188

  对于循环:524.56949毫秒

  从时间对比可以看出,向量化比for循环节省了近200倍的时间。对于深度学习算法,通过向量化可以大大提高效率。经验法则是在计算回归时避免使用for循环。

  python中的Numpy模块可以实现矢量化运算。

  导入numpy为np a=np.zeros((1,10))b=np.exp(a)b数组([[1。 1. 1. 1. 1. 1. 1. 1. 1. 1.]])

  m个样本的Logistic回归首先,我们通过向量化消除第一个循环,过程如下:

  对于m个样本,我们可以得到这样一个公式:

  Z=WTX b,ZR1m,WRn1,XRnm,

  其中z代表m个输出,x代表样本矩阵,包含m个样本,每个样本有n个特征值,w代表n个参数,b代表阈值。因为python中的广播机制,可以在矩阵中加入B,实际上就是将B复制扩展到相同维数的矩阵中。

  其次,我们通过向量化消除第二个循环,过程如下:

  我们可以如下图所示进一步修改算法,从而实现一次迭代。当然,如果要使用多次迭代,恐怕还是要使用for循环。

  Z=WTX b=np.dot(W.T,X) b

  A=(z)

  dZ=A Y

  dW=1mXdZT

  db=1mnp.sum(dZ)

  W=W-dW

  b=b-db

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: