我需要使用Matlab MLP对数据集进行分类并显示分类。
数据集看起来像
到目前为止,我所做的是:
我创建了一个包含隐藏层(两个神经元)的神经网络 ?? 也许有人可以给我一些建议 神经元适合我的例子 )和输出层(一个 神经元)。
我使用过几种不同的学习方法,比如Delta bar Delta,反向传播(这两种方法都与-out一起使用 势头和Levenberg-Marquardt。)
这是我在Matlab中使用的代码(Levenberg-Marquardt示例)
net = newff(minmax(Input),[2 1],{'logsig' 'logsig'},'trainlm');
net.trainParam.epochs = 10000;
net.trainParam.goal = 0;
net.trainParam.lr = 0.1;
[net tr outputs] = train(net,Input,Target);
下面显示了Matlab对数据生成的隐藏神经元分类边界,我有点困惑,因为网络应该产生非线性结果,但下面的结果似乎是两条边界线是线性的。
生成上图的代码是:
figure(1)
plotpv(Input,Target);
hold on
plotpc(net.IW{1},net.b{1});
hold off
我还需要绘制输出神经元的输出函数,但我仍然坚持这一步。谁能给我一些建议?
提前致谢。
答案 0 :(得分:2)
关于隐藏层中神经元的数量,对于这样一个小例子,两个绰绰有余。确定最佳状态的唯一方法是使用不同的数字进行测试。在此常见问题中,您可以找到可能有用的经验法则:http://www.faqs.org/faqs/ai-faq/neural-nets/
对于输出功能,将它分为两步通常很有用:
首先,给定输入向量 x ,隐藏层中神经元的输出为 y = f( x )= < strong> x ^ T w + b 其中 w 是从输入神经元到隐藏层的重量矩阵和 b 是偏向量。
其次,您必须将网络的激活函数g应用于上一步的结果向量 z = g( y )
最后,输出是点积h( z )= z 。 v + n,其中 v 是从隐藏层到输出神经元的权重向量,n是偏差。在多个输出神经元的情况下,您将为每个神经元重复此操作。
我从未使用过matlab mlp函数,因此在这种情况下我不知道如何获得权重,但我确信网络将它们存储在某个地方。编辑:搜索文档我找到了属性: