主要内容

葡萄酒的分类

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

问题:葡萄酒分类

在这个例子中,我们试图建立一个神经网络,可以根据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(:,tr.testInd);testY = net(testX);testIndices = vec2ind(testY)
testIndices =1×271 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3

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

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

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

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

plotconfusion (testT暴躁的)

{

这里是正确和错误分类的总百分比。

[c,cm] =混淆(testT,testY)
C = 0
厘米=3×37 0 0 0 12 0 0 0 8
流(正确分类:%f%%\n, 100 * (1 - c));
正确分类:100.0000%
流('错误分类百分比:%f%%\n', 100 * c);
错误分类:0.00000%

衡量神经网络拟合数据的第三个指标是接收者操作特征图。这表明当输出的阈值从0到1变化时,假阳性和真阳性率是如何关联的。

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

plotroc (testT暴躁的)

{

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

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