主要内容

蟹类分类

本例说明了使用神经网络作为分类器,从螃蟹的物理尺寸识别螃蟹的性别。

问题:螃蟹的分类

在这个例子中,我们试图建立一个分类器,通过物理测量来识别螃蟹的性别。考虑了螃蟹的六个物理特征:物种、前胸、后胸宽度、长度、宽度和深度。目前的问题是根据这六个物理特征中的每一个的观察值来识别螃蟹的性别ics。

神经网络的原因吗?

神经网络已经证明自己是熟练的分类器,特别适合处理非线性问题。考虑到现实世界现象的非线性本质,比如螃蟹分类,神经网络当然是解决这个问题的一个很好的候选对象。

这六个生理特征将作为神经网络的输入,而蟹的性别将成为目标。给定一个输入,该输入由螃蟹的6个物理特征的观测值组成,神经网络预计将识别螃蟹是雄性还是雌性。

这是通过将先前记录的输入输入到神经网络,然后对其进行调整以产生所需的目标输出来实现的。这个过程叫做神经网络训练。

准备数据

通过将数据组织成两个矩阵,即输入矩阵X和目标矩阵T,为神经网络建立分类问题的数据。

输入矩阵的第i列将包含六个元素,分别表示螃蟹的种类、前臀、后臀宽度、长度、宽度和深度。

目标矩阵的每个对应列将有两个元素。雌性螃蟹在第一个元素中用一表示,雄性螃蟹在第二个元素中用一表示。(所有其他元素均为零)。

这里加载了数据集。

[x, t] = crab_dataset;大小(x)
ans=1×2200年6
大小(t)
ans=1×22 200

构建神经网络分类器

下一步是创建一个神经网络来学习识别螃蟹的性别。

由于神经网络的初始权值是随机的,所以每次运行时,结果都会略有不同。随机种子的设置就是为了避免这种随机性。然而,对于您自己的应用程序来说,这并不是必需的。

setdemorandstream(491218382)

两层(即单隐层)前馈神经网络只要在隐层中有足够的神经元,就可以学习任意的输入输出关系。非输出层的层称为隐藏层。

在这个例子中,我们将尝试一个由10个神经元组成的隐藏层。一般来说,更困难的问题需要更多的神经元,甚至可能需要更多的层。更简单的问题需要更少的神经元。

输入和输出的大小为0,因为网络尚未配置为匹配我们的输入和目标数据。这将在网络训练时发生。

净=图案净(10);视图(净)

现在,网络已准备好接受培训。样本自动分为培训集、验证集和测试集。培训集用于教授网络。只要网络在验证集上不断改进,培训就会继续。测试集提供了对网络准确性的完全独立的测量。

(净,tr) =火车(净,x, t);

要查看网络的性能在培训期间是如何提高的,可以单击培训工具中的“性能”按钮,或者调用PLOTPERFORM。

性能以均方误差衡量,并以对数尺度显示。随着网络的训练,它迅速下降。

显示每个训练、验证和测试集的性能。

plotperform (tr)

测试分类器

经过训练的神经网络现在可以用测试样本进行测试。这将给我们一个感觉,当应用到来自真实世界的数据时,这个网络将做得多好。

网络输出将在0到1的范围内,因此我们可以使用Vec2In函数获取类索引,作为每个输出向量中最高元素的位置。

testX = x (:, tr.testInd);testT = t (:, tr.testInd);暴躁的=净(testX);testIndices = vec2ind(暴躁的)
证明=1×302 2 1 1 2 2 1 2 2 2 1 2 2 2 2 2 1 1 2 2 2 1 2 2 1 2 1 1 1 1

衡量神经网络与数据吻合程度的一个指标是混淆图。这里绘制了所有样本的混淆矩阵。

混淆矩阵显示正确和错误分类的百分比。正确的分类是对角矩阵上的绿色正方形。红色方框中的分类不正确。

如果网络已学会正确分类,则红色方框中的百分比应非常小,表明很少出现错误分类。

如果不是这样,那么进一步的训练,或者训练一个有更多隐藏神经元的网络,将是可取的。

绘图混乱(testT,testY)

下面是正确和错误分类的总体百分比。

[c,cm]=混乱(testT,testY)
c=0
厘米=2×212 0 0 18
fprintf('正确分类百分比:%f%%\n', 100 * (1 - c));
分类正确率:100.000000%
fprintf('百分比错误分类:%f%%\n', 100 * c);
分类错误百分比:0.000000%

另一个衡量神经网络数据拟合程度的指标是接收器工作特征图。它显示了输出阈值在0到1之间变化时假阳性率和真阳性率的关系。

行越左越高,需要接受的误报越少,以获得较高的真阳性率。最好的分类器将有一条从左下角到左上角、右上角或接近该点的行。

plotroc (testT暴躁的)

这个例子说明了如何使用神经网络对螃蟹进行分类。

探索其他示例和文档,了解神经网络及其应用。