葡萄酒的分类

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

问题:对葡萄酒进行分类

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

  • 酒精

  • 苹果酸

  • 碱度的火山灰

  • 总酚类化合物

  • 类黄酮

  • Nonflavonoid酚类

  • 原花青素

  • 颜色的强度

  • 色调

  • 稀释葡萄酒的OD280/OD315

  • 脯氨酸

这是一个模式识别问题的示例,其中输入与不同的类相关联,我们希望创建一个神经网络,该网络不仅能正确地对已知的葡萄酒进行分类,而且还能泛化到准确地对未用于设计解决方案的葡萄酒进行分类。

神经网络的原因吗?

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

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

该网络将通过使用邻域属性来设计,以训练网络生成正确的目标类。

准备数据

通过将数据组织成输入矩阵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);nntraintool nntraintool (“关闭”)

要查看网络在培训期间的性能改进情况,可以单击培训工具中的“performance”按钮,或者调用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 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3

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

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

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

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

plotconfusion (testT暴躁的)

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

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

第三个衡量神经网络拟合数据好坏的指标是接收器的工作特性图。这显示了假阳性和真阳性率如何与输出的阈值从0到1的变化相关。

这条线越左越高,为了获得较高的真实阳性率,假阳性需要接受的次数就越少。最好的分类器会有一条从左下角,到左上角,到右上角,或者接近的线。

plotroc (testT暴躁的)

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

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