主要内容

葡萄酒的分类

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

问题:给葡萄酒分类

在这个例子中,我们试图建立一个神经网络,它可以根据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,因为网络尚未配置为匹配我们的输入和目标数据。这将在网络被训练时发生。

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

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

神经网络训练工具显示了正在训练的网络和用于训练它的算法。在训练过程中显示训练状态,停止训练的标准将以绿色突出显示。

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

[net,tr] = train(net,x,t);

要查看网络在训练期间的性能改善情况,可以单击训练工具中的“performance”按钮,或者调用PLOTPERFORM。

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

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

plotperform (tr)

测试网络

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

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

testX = x(:,tr.testInd);testT = t(:, trt . testind);testY = net(testX);testIndices = vec2ind(test)
testIndices =1×271 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3

另一个衡量神经网络对数据拟合程度的指标是混淆图。在这里,混淆矩阵是在所有样本上绘制的。

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

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

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

plotconfusion (testT暴躁的)

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

[c,cm] =混乱(testT,testY)
C = 0
厘米=3×37 0 0 0 11 0 0 0 9
流(“正确分类百分比:%f%%\n”, 100 * (1 - c));
分类正确率:100.000000%
流(“分类错误百分比:%f%%\n”, 100 * c);
分类错误百分比:0.000000%

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

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

plotroc (testT暴躁的)

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

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