如何验证 MATLAB 中概率神经网络给出的输出?
Posted
技术标签:
【中文标题】如何验证 MATLAB 中概率神经网络给出的输出?【英文标题】:How to validate the output given by the Probabilistic Neural Network in MATLAB? 【发布时间】:2016-10-15 10:53:58 【问题描述】:我对学习神经网络很感兴趣,作为一个例子,我尝试了以下通过实验得出的数据集。
我正在为我的神经网络使用以下输入向量;
X = [1 1; 1 2; 1 3; 1 4; 4 1; 4 2; 4 3; 4 4; 7 1;7 2; 7 3; 7 4]';
Tc = [1 1 2 3 1 1 2 2 1 1 2 2];
我想将输入数据分为三类,由输入向量 Tc 描述。然后我将目标类索引 Tc 转换为向量 T 并且我使用的传播值是 1。
在 MATLAB 中使用 newpnn 函数,我得到了三个类的决策边界。
我对验证决策边界是否合适有疑问。我正在使用属于第 2 类的单个数据 X =[2;3.55]
验证输出。它由输出图中的黑点表示。蓝色是 1 类。黄色是属于 2 类的区域。红色是 3 类。
如图所示,发现神经网络的预测是类 2,与集合的实际类重合。
那么,这是否意味着我的神经网络是正确且经过验证的?
附:我对神经网络有基本的了解。此外,我理解拥有更多训练示例和验证集的概念。我期待一个符合可用细节的答案,因为我无法通过实验获得更多数据。
【问题讨论】:
嗯,根据您提供的信息,答案似乎是“是的,您的 NN 已通过验证,您做得很好”。但是,请注意,您的训练和测试似乎完全相同(通过查看前 2 个图),因此您当然会有正确的答案。尝试使用训练中未使用的值验证您的 NN。 @AnderBiguri 感谢您的回答。不过,就在发布这个问题之后,我觉得问这个问题很愚蠢。我知道任何类型的结论性训练的训练数据都非常少。我使用三次插值来获得更多数据点(120)。我保留了 100 个用于训练网络,20 个用于测试。现在预测结果非常好。准确率约为 98%。我想,这个问题现在已经解决了,但是由于我已经宣布了这个问题的赏金,我不能删除这个问题。再次感谢您的回答。 【参考方案1】:嗯,我认为您不太了解验证是基于神经网络的。您无法仅使用一个样本检查您的网络。所以,我会尝试教你我所知道的关于验证神经网络的知识。这是一个漫长的统计过程,涉及到对“现实世界数据”、“预期行为”的一些反思……你无法用 10-20 个数据和一个验证点来验证某些东西。
一般来说,当你教一个神经网络时,你应该有3套:
第一个,训练集是算法的输入,用于设置不同网络的权重。它只是一种用于运行算法的强制性数据。 第二组验证集用于为您的问题选择正确的算法并减少过度拟合。它比较不同的性能并选择最好的(过度拟合的根本不会有好的性能)。 测试集:这是最后一个阶段。选择算法及其参数后,您使用一组新数据(取自现实世界)并检查它是否执行应该做的(这就像一个连贯性测试)。(来源:https://stats.stackexchange.com/questions/19048/what-is-the-difference-between-test-set-and-validation-set)
例如,我们正在构建一种算法,用于检查一个人是否“有机会致富”。以下是你如何制作和验证你的神经网络。
-
首先,我们询问 10 000 个人是否富有,并检查一些参数(年龄、位置、...)。它使“原始数据集”。
我们将 10 000 人的列表分成 3 组(6000 2000 和 2000):训练集、验证集和测试集(注意:比例可能会根据验证过程而变化)。
我们应用学习集(6000 个第一个数据)并将其应用到我们不同的神经网络来教授它们(我们将它们命名为 A、B、C 和 D)
我们使用验证集(2000 个下一个数据)来检查四个网络的性能。以下是它如何避免过度拟合。让我们假设网络 A 根本不是网络,它只是一个记录器。它记录了不同的数据及其类别,但根本无法预测任何事情。如果我们用 6000 第一人称进行验证测试,那么“虚拟算法”将给出 100% 的结果,但在该测试中将完全失败。因此,在该测试之后,您可以选择“最佳算法”。让我们选C。
现在,我们使用其余数据(测试集或新数据,如果可以的话,它总是更好)运行 C。如果我们看到 C 有一个非常奇怪和不可预测的行为(它可能是由一些人为错误引起的,例如生成的集合不是真正独立或仍然正确的,例如如果数据来自 1996 年),我们会选择另一种算法或我们尝试检查数据或算法的问题。
这是构建可靠神经网络的方法(不要忘记,两个主要问题是不检查最终结果和过度拟合)。
因为过度拟合是一个关键概念。我将尝试对其进行一些定义并举一个例子。过度拟合正在制作一种能够建立非常接近但无法预测任何东西的算法(我称之为“虚拟算法”)。
例如,让我们比较一个线性插值器和一个多项式(第 1000000 次,非常高的次数)之一。我们的多项式算法可能非常适合数据(极端过拟合正好适合我们所有的数据)。但是,它根本无法预测任何事情。
对于下面的示例,如果我们的验证集(从现实世界数据中提取)中有一个点位于 (2,-2) 和 (-1,2) 中,我们可以假设我们的多项式插值明显过度拟合,因为它建议使用 (-1,10) 和 (2,20) 等值。线性的应该更接近。
我希望它会有所帮助。 (请注意,我不是该领域的专家,但我试图做出一个非常易读且简单的答案,所以如果有任何错误,请随时发表评论:))
【讨论】:
以上是关于如何验证 MATLAB 中概率神经网络给出的输出?的主要内容,如果未能解决你的问题,请参考以下文章
Matlab - 神经网络 - 如何使用不同的数据集进行训练、验证和测试?
在matlab中使用神经网络进行分类:获取属于第i类的元素的概率
故障诊断分析基于matlab PNN概率神经网络柴油机故障诊断含Matlab源码 2343期