Matlab 创建用于多类分类的基本前馈感知器神经网络

Matlab 创建用于多类分类的基本前馈感知器神经网络,matlab,machine-learning,neural-network,Matlab,Machine Learning,Neural Network,我是神经网络新手,我想为多类分类创建一个前馈神经网络。我可以使用任何公开的代码,但不能使用任何MATLAB工具箱,因为我无法访问它(因此没有神经网络工具箱)。目标是将数据分为10类中的一类,该类由最后一列中的三个字母代码定义 创建神经网络时,您是否只需定义节点数量,并将层i中的每个节点连接到层i+1中的每个节点?然后让他们自己学习重量 还有一个我可以遵循的源代码,它有MATLAB代码,用于创建具有任意数量输入、任意数量节点的神经网络,并进行前馈的多类分类。神经网络的一般介绍(似乎您还需要了解一下

我是神经网络新手,我想为多类分类创建一个前馈神经网络。我可以使用任何公开的代码,但不能使用任何MATLAB工具箱,因为我无法访问它(因此没有神经网络工具箱)。目标是将数据分为10类中的一类,该类由最后一列中的三个字母代码定义

创建神经网络时,您是否只需定义节点数量,并将层i中的每个节点连接到层i+1中的每个节点?然后让他们自己学习重量


还有一个我可以遵循的源代码,它有MATLAB代码,用于创建具有任意数量输入、任意数量节点的神经网络,并进行前馈的多类分类。

神经网络的一般介绍(似乎您还需要了解一下它们是什么):

阅读本文件,该文件解释了带反向传播的前馈网络的工作原理(数学很重要):

这里有一个在matlab中实现的注释:

关于你的问题:

1) “创建神经网络时,您是否只需定义节点数量,并将层i中的每个节点连接到层i+1中的每个节点?”取决于您使用的网络。在简单的全连接前馈神经网络中,是的


2) “然后让他们自己学习重量?”这是一般的想法。你有一些你知道其类别的数据(监督学习),你将把这些数据交给神经网络来学习模式,学习完成后,你使用这些更新的权重对新的、看不见的数据进行分类。

一件应该有帮助的事情是使用错误而不是分类错误或错误(MSE)对于此类多类问题(尤其是评估)。这是一篇很好的文章,解释了这个想法。我将在这里引用它的例子:

假设我们预测一个人的政党归属(民主党, (共和党人,其他人)来自年龄、性别、年收入等独立数据 收入等等。

现在假设您只有三个训练数据项。你的神经 网络使用softmax激活输出神经元,因此 是可以解释为概率的三个输出值。对于 示例假设神经网络的计算输出和目标 (aka所需)值如下所示:

该神经网络的分类误差为1/3=0.33。请注意,NN just勉强正确地获得了前两个训练项目,而第三个训练项目则相差很远。现在查看另一个输出,如下所示:

computed       | targets              | correct?
-----------------------------------------------
0.1  0.2  0.7  | 0  0  1 (democrat)   | yes
0.1  0.7  0.2  | 0  1  0 (republican) | yes
0.3  0.4  0.3  | 1  0  0 (other)      | no
该神经网络的分类误差为1/3=0.33。但是第二个NN比第一个要好得多,因为它确定了前两个训练项目,并且几乎没有遗漏第三个训练项目总而言之,分类误差是一种非常粗糙的误差度量。下面是两种情况下分类误差和平均交叉熵误差的比较:

Neural Network | classification error   | Average cross-entropy error
--------------------------------------------------------------------
NN1            |        0.33            |     1.38
NN2            |        0.33            |     0.64
要在训练中使用交叉熵误差,需要使用不同的代价函数。 见详情


其中,
m
是培训示例的数量,
k
是课程的数量
y
是标签
x
为特征向量
\theta
是权重参数。

这是只用于更新权重的反向传播吗?还是训练整个神经网络?如何设置隐藏层中的节点数和其他参数?如何将其应用于新样本?训练网络本质上就是寻找权重。其他自由参数可通过交叉验证确定。将网络应用于新样本的方式与训练基本相同,但在获得预测输出后停止。请看一些关于神经网络的介绍性书籍。我了解如何将神经网络应用到一个新的示例中,我特别询问了如何使用您链接的代码。它似乎被标记为反向传播,我认为这只是更新权重的过程,而不是训练整个网络的过程。此外,该函数不返回任何内容,因此我应该如何在新示例上使用它?如果您阅读上述文档,您应该能够理解。在任何情况下,在“BackPropAlgo”函数中设置为输出V和W,然后执行“trainNeuralNet”的步骤,直到获得网络的预测输出即输出层的输出。这是交叉熵的一个很好的介绍。但我认为他的问题比这更普遍。
Neural Network | classification error   | Average cross-entropy error
--------------------------------------------------------------------
NN1            |        0.33            |     1.38
NN2            |        0.33            |     0.64