这个例子演示了使用神经网络作为分类器,从螃蟹的物理维度来识别螃蟹的性别。
在这个例子中,我们试图构建一个分类器,可以根据物理测量来识别螃蟹的性别。蟹的六个物理特征被考虑到:种类,前唇,后宽,长度,宽度和深度。现在的问题是根据这6种物理特征的观测值来确定螃蟹的性别。
神经网络已经证明自己是熟练的分类器,特别适合寻求非线性问题。鉴于现实世界现象的非线性性质,如螃蟹分类,神经网络肯定是解决问题的好候选人。
六种物理特征将充当神经网络的输入,螃蟹的性别将是目标。给定输入,该输入构成了螃蟹的物理特征的六个观察到的值,预计神经网络将识别螃蟹是男性还是女性。
这是通过向神经网络呈现的先前记录的输入来实现,然后调整它以产生所需的目标输出。这个过程称为神经网络培训。
分类问题的数据是通过将数据组织成两个矩阵,输入矩阵X和目标矩阵T来建立神经网络。
输入矩阵的每第i列都有6个元素,分别代表螃蟹的种类、正面、背面宽度、长度、宽度和深度。
目标矩阵的每一列都有两个元素。雌性蟹的第一个元素是“1”,雄性蟹的第二个元素是“1”。(所有其他元素为零)。
这里加载了数据集。
[x,t] = crab_dataset;尺寸(x)
ans =1×26 200.
尺寸(t)
ans =1×22 200年
下一步是创建一个神经网络,该网络将学会识别螃蟹的性别。
由于神经网络以随机初始权重开始,因此每次运行时,此示例的结果将略有不同。随机种子被设置为避免这种随机性。但是,这不是您自己的应用程序所必需的。
setdemorandstream (491218382)
双层(即一个隐藏层)前锋神经网络可以学习在隐藏层中给出足够神经元的任何输入 - 输出关系。不输出图层的图层称为隐藏层。
在这个例子中,我们将尝试一个由10个神经元组成的隐藏层。一般来说,更困难的问题需要更多的神经元,也许需要更多的层次。简单的问题需要更少的神经元。
输入和输出的大小为0,因为网络还没有配置为匹配我们的输入和目标数据。当网络被训练时就会发生这种情况。
网= patternnet (10);视图(净)
现在网络已经准备好接受训练了。将样本自动划分为训练集、验证集和测试集。训练集用于网络教学。只要网络在验证集上继续改进,训练就会继续进行。该测试集提供了一个完全独立的网络准确性度量。
[净,tr] =火车(网,x,t);
要了解网络在培训期间的性能如何改进,请单击培训工具中的“性能”按钮,或调用PlotPerform。
性能是以均方的误差衡量的,并且以日志比例示出。随着网络训练,它迅速下降。
为每个培训,验证和测试集显示性能。
PlotPerform(TR)
现在可以使用测试样本进行训练的神经网络。这将使我们在从现实世界应用于数据时如何做网络的感觉。
网络输出的范围是0到1,所以我们可以使用vec2ind函数获取类索引作为每个输出向量中最高元素的位置。
testx = x(:,tr.testind);testt = t(:,tr.testind);testy = net(testx);testindices = vec2ind(testy)
testIndices =1×30.2 2 1 1 2 2 1 2 2 2 1 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1
一种衡量神经网络如何适应数据的衡量标准是混乱的图。这里,混淆矩阵在所有样品上绘制。
混淆矩阵显示正确和错误分类的百分比。正确的分类是矩阵对角线上的绿色方块。红色方块是错误的分类。
如果网络已经学会正确分类,红色方块中的百分比应该非常小,表明很少有错误分类。
如果情况并非如此,那么进一步的训练,或者训练一个拥有更多隐藏神经元的网络,将是可取的。
plotconfusion (testT暴躁的)
以下是正确和不正确的分类的总体百分比。
(c cm) =混乱(testT,暴躁的)
c = 0
厘米=2×212 0 0 18
流('百分比正确分类:%%% \ n',100 *(1-c));
正确分类百分比:100.000000%
流('百分比不正确分类:%f %% \ n',100 * c);
错误分类百分比:0.000000%
另一个衡量神经网络有多好的拟合数据是接收机操作特征图。这显示了当输出的阈值从0到1变化时,假阳性和真阳性率是如何相关的。
越往左和越往上,越少的假阳性需要被接受,以获得较高的真阳性率。最好的分类器会有一条线从左下角,到左上角,到右上角,或接近它。
Plotroc(Testt,Testy)
这个例子演示了使用神经网络对螃蟹进行分类。
探索其他示例和文档以更深入地了解神经网络及其应用。