主要内容

葡萄酒的分类

这个例子说明了模式识别神经网络如何根据葡萄酒的化学特征对葡萄酒进行分类。

问题:对葡萄酒进行分类

在这个例子中,我们试图构建一个神经网络,它可以根据13个属性对3家酒厂的葡萄酒进行分类:

  • 酒精

  • 苹果酸

  • 碱度的火山灰

  • 总酚类化合物

  • 类黄酮

  • Nonflavonoid酚类

  • 原花青素

  • 颜色的强度

  • 色调

  • 稀释葡萄酒的OD280/OD315

  • 脯氨酸

这是一个模式识别问题的例子,其中的输入与不同的类别相关联,我们想要创建一个神经网络,不仅可以正确地分类已知的葡萄酒,而且还可以一般化,准确地分类没有用于设计解决方案的葡萄酒。

神经网络的原因吗?

神经网络非常擅长解决模式识别问题。拥有足够元素的神经网络(称为神经元)可以以任意精度对任何数据进行分类。它们特别适合于复杂的多变量决策边界问题。因此,神经网络是解决葡萄酒分类问题的理想选择。

这13个邻域属性将作为神经网络的输入,每个邻域属性的目标将是一个3元素的类向量,在关联的酒厂#1,#2或#3的位置上有一个1。

通过使用社区的属性来设计网络,训练网络产生正确的目标类。

准备数据

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

输入矩阵的每第i列都有13个元素,它们代表的葡萄酒的酿酒厂是已知的。

目标矩阵的每一列都有三个元素,其中两个0和一个1位于相关联的酒厂的位置。

这里加载了这样一个数据集。

[x, t] = wine_dataset;

我们可以看到输入X和目标T的大小。

注意,X和T都有178列。这代表了178个葡萄酒样本属性(输入)和相关的酒庄类向量(目标)。

输入矩阵X有13行,对应13个属性。目标矩阵T有三行,对于每个例子,我们有三个可能的酒厂。

大小(x)
ans =1×2178年13
大小(t)
ans =1×23 178

基于神经网络的模式识别

下一步是建立一个神经网络来学习对葡萄酒进行分类。

由于神经网络的初始权值是随机的,所以每次运行时,结果都会略有不同。

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

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

输入和输出的大小为0,因为网络还没有配置为匹配我们的输入和目标数据。当网络被训练时就会发生这种情况。

网= patternnet (10);视图(净)

现在网络已经准备好接受训练了。将样本自动划分为训练集、验证集和测试集。训练集用于网络教学。只要网络在验证集上继续改进,训练就会继续进行。该测试集提供了一个完全独立的网络准确性度量。

神经网络训练工具显示了被训练的网络和用来训练它的算法。它还显示训练期间的训练状态,停止训练的标准将以绿色突出显示。

底部的按钮打开有用的图形,可以在训练期间和训练后打开。算法名称和绘图按钮旁边的链接打开了关于这些主题的文档。

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

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

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

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

plotperform (tr)

测试网络

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

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

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

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

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

如果网络已经学会正确分类,红色方块中的百分比应该非常小,表明很少有错误分类。

如果情况并非如此,那么进一步的训练,或者训练一个拥有更多隐藏神经元的网络,将是可取的。

plotconfusion (testT暴躁的)

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

(c cm) =混乱(testT,暴躁的)
c = 0
厘米=3×37 0 0 11 0 0 0 9
流('正确分类百分比:%f%%\n', 100 * (1 - c));
正确分类百分比:100.000000%
流('百分比错误分类:%f%%\n', 100 * c);
错误分类百分比:0.000000%

第三个衡量神经网络有多好的拟合数据是接收器操作特征图。这显示了当输出的阈值从0到1变化时,假阳性和真阳性率是如何相关的。

越往左和越往上,越少的假阳性需要被接受,以获得较高的真阳性率。最好的分类器会有一条线从左下角,到左上角,到右上角,或接近它。

plotroc (testT暴躁的)

这个例子说明了如何设计一个神经网络,根据葡萄酒的特点将葡萄酒分为三个酒庄。

探索其他示例和文档以更深入地了解神经网络及其应用。