前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Binary Classification

Binary Classification

作者头像
mathor
发布2019-12-30 15:43:49
8190
发布2019-12-30 15:43:49
举报
文章被收录于专栏:mathor

当实现一个神经网络的时候,我们需要知道一些非常重要的技术和技巧。例如有一个包含$m$个样本的训练集,你很可能习惯于用一个for循环来遍历训练集中的每个样本,但是当实现一个神经网络的时候,我们通常不直接使用for循环来遍历整个训练集

另外在神经网络的计算中,通常先有一个叫做前向暂停($forward\ pause$)或叫做前向传播($foward\ propagation$)的步骤,接着有一个叫做反向暂停($backward\ pause$) 或叫做反向传播($backward\ propagation$)的步骤

这里我将使用逻辑回归($logistic\ regression$)来传达这些想法,以使大家能够更加容易地理解这些概念。即使你之前了解过逻辑回归,我认为这里还是有些新的、有趣的东西等着你去发现和了解,所以现在开始进入正题

逻辑回归是一个用于二分类($binary\ classification$)的算法。首先我们从一个问题开始说起,假如你有一张图片作为输入,比如这只猫,如果识别这张图片为猫,则输出标签1作为结果;如果识别出不是猫,那么输出标签0作为结果。现在我们可以用字母$y$来 表示输出的结果标签,如下图所示:

我们来看看一张图片在计算机中是如何表示的,为了保存一张图片,需要保存三个矩阵,它们分别对应图片中的红、绿、蓝三种颜色通道,如果你的图片大小为64x64像素,那么你就有三个规模为64x64的矩阵,分别对应图片中红、绿、蓝三种像素的强度值。为了便于表示,这里我画了三个很小的矩阵,注意它们的规模为5x4 而不是64x64,如下图所示:

为了把这些像素值放到一个特征向量中,我们需要把这些像素值提取出来,然后放入一个特征向量$x$。为了把这些像素值转换为特征向量$x$,我们需要像下面这样定义一个特征向量$x$来表示这张图片,我们把所有的像素都取出来,例如255、231等等,直到取完所有的红色像素,接着最后是255、134、…、255、134等等,直到得到一个特征向量,把图片中所有的红、绿、蓝像素值都列出来。如果图片的大小为64x64像素,那么向量$x$的总维度,将是64乘以64乘以3,这是三个像素矩阵中像素的总量,在这个例子中结果为12,288。现在我们用$n_x = 12,288$,来表示输入特征向量的维度,有时候为了简洁,我会直接用小写的$n$来表示输入特征向量$x$的维度。所以在二分类问题中,我们的目标就是习得一个分类器,它以图片的特征向量作为输入,然后预测输出结果$y$为1还是0,也就是预测图片中是否有猫:

接下来我们说明一些在以后可能常用到的一些符号

  • $x$:表示一个$n_x$维的输入数据,维度为$(n_x,1)$
  • $y$:表示输出结果,取值为$(0,1)$
  • $(x^{(i)},y^{(i)})$:表示第$i$组数据,可能是训练数据,也可能是测试数据,此处默认为训练数据
  • $X=[x^{(1)},x^{(2)},...,x^{(m)}]$:表示所有的训练数据集的输入值,放在一个$n_x\times m$的矩阵中,其中$m$表示样本的数目
  • $Y=[y^{(1)},y^{(2)},...,y^{(m)}]$,对应表示所有训练数据集的输出值,维度为$1\times m$
  • $M_{train}$:表示训练样本的个数
  • $M_{test}$:表示测试集的样本数

用一对$(x,y)$来表示一个单独的样本,$x$代表$n_x$维的特征向量,$y$表示标签(输出结果0或1)。而训练集将由$m$个训练样本组成,其中$(x^{(1)},y^{(1)})$表示第一个样本的输入和输出,$(x^{(2)},y^{(2)})$表示第二个样本的输入和输出,直到最后一个样本$(x^{(m)},y^{(m)})$,然后所有的这些一起表示整个训练集。

最后为了能把训练集表示得更紧凑一点,我们会定义一个矩阵用大写的$X$表示,它由输入向量$x^{(1)}$、$x^{(2)}$等组成。如下图放在矩阵的列中,把$x^{(1)}$作为第一列放在矩阵中,$x^{(2)}$作为第二列,$x^{(m)}$放到第$m$列,然后我们就得到了训练集矩阵$X$。所以这个矩阵有$m$列,$m$是训练集的样本数量,矩阵的高度为$n_x$。注意有时候可能因为其他某些原因,矩阵$X$会由训练样本按照行堆叠起来而不是列,如下图所示,但是在实现神经网络的时候,使用左边的这种形式,会让整个实现的过程变得更加简单

现在来简单温习一下:$X$是一个规模为$n_x \times m$的矩阵,当你使用Python的时候,你可能会看到一条命令X.shape,这条命令用于显示矩阵的规模,即X.shape等于$(n_x,m)$

综上所述,这就是如何将训练样本(输入向量$X$的集合)表示为一个矩阵

那么输出标签$y$呢?同样的道理,为了能更加容易地实现一个神经网络,将标签$y$放在列中将会使得后续计算非常方便,所以我们定义大写的$Y$等于$y^{(1)},...,y^{(m)}$,所以在这里是一个规模为$1\times m$的矩阵,同样地使用PythonY.shape表示为$(1,m)$

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档