如何在MATLAB中验证概率神经网络的输出?

6

我对学习神经网络很感兴趣,作为一个示例,我尝试使用以下基于实验数据推导出的数据集。

我正在为我的神经网络使用以下输入向量;

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函数,我得到了三个类别的决策边界。
我对验证决策边界是否合适有疑问。我用一个数据X =[2;3.55]验证输出,它属于第二类。在输出图中,它被表示为黑点。蓝色是第一类。黄色是属于第二类的区域。红色是第三类。
如图所示,神经网络的预测被发现是第二类,与集合的实际类别相符。
那么,这是否意味着我的神经网络是正确的和经过验证的?
附言:我对神经网络有基本的理解。我也了解更多的训练例子和验证集的概念。我期望得到一个根据可用细节回答的答案,因为我无法从实验上获得更多的数据。

enter image description here


1
根据您提供的信息,答案似乎是“是的,您的神经网络已经验证,做得很好”。但请注意,您的训练和测试似乎完全相同(通过查看前两个图),因此您当然会得到正确的答案。尝试使用未在训练中使用过的值来验证您的神经网络。 - Ander Biguri
@AnderBiguri 谢谢你的回答。不过,在发布这个问题后,我感到很愚蠢地提出了这个问题。我知道训练数据对于任何形式的结论性训练来说都非常少。我使用三次插值法来获取更多的数据点(120)。我保留了100个用于训练网络和20个用于测试。现在预测结果非常好。准确率约为98%。我想,这个问题现在已经解决了,但由于我为这个问题宣布了赏金,所以我不能删除这个问题。再次感谢您的回答。 - rcty
1个回答

1

嗯,我觉得你可能不太理解神经网络中验证的含义。你不能仅通过一个样本检查网络。因此,我将尝试教你有关验证神经网络的知识。这是一个涉及“真实世界数据”、“预期行为”等一些反思的长期统计过程。你不能只用10-20个数据和一个验证点来验证某些东西。

通常,在训练神经网络时,你应该有3个集合

  • 第一个是训练集,是算法的输入,用于设置不同网络的权重。它只是运行算法所必需的数据。
  • 第二个是验证集,用于选择适合您问题的正确算法并减少过拟合。它比较不同算法的性能,并选择最佳算法(过拟合的算法性能很差)。
  • 测试集:这是最后一阶段。在选择算法及其参数之后,您使用一组来自现实世界的新数据,并检查它是否执行了应该执行的任务(类似于一致性测试)。

(来源:https://stats.stackexchange.com/questions/19048/what-is-the-difference-between-test-set-and-validation-set

例如,我们正在构建一个算法,用于检查一个人“有没有成为富人的机会”。以下是如何创建和验证神经网络的方法。
  1. 首先,我们询问10,000人他们是否富裕,并检查一些参数(年龄、地点等)。这构成了“原始数据集”。
  2. 我们将这个10,000人的列表分为3个集合(6000、2000和2000):训练集、验证集和测试集(注意:比例可以根据验证过程而改变)。
  3. 我们将学习集(前6000个数据)应用于不同的神经网络中进行教学(命名为A、B、C和D)。
  4. 我们拿出验证集(接下来的2000个数据)来检查四个网络的性能。以下是如何避免过度拟合的方法。假设网络A根本不是网络,它只是一个记录器。它记录不同的数据及其类别,但无法预测任何结果。如果我们使用前6000个人进行验证测试,那么“虚拟算法”将会给出100%的结果,但在该测试中完全失败。因此,在该测试之后,您可以选择“最佳算法”。让我们选择C。
  5. 现在,我们使用剩余的数据(测试集或新数据,如果可能的话,总是更好)运行C。如果我们发现C的行为非常奇怪和不可预测(可能是由于某些人为错误引起的,例如制作不真正独立或仍然正确的集合,例如数据来自1996年),我们选择另一个算法或尝试检查数据或算法的问题。

这是如何创建可靠的神经网络(不要忘记,两个主要问题是不检查最终结果和过度拟合)。

由于过度拟合是一个关键概念。我将尝试稍微定义一下并举个例子。过度拟合是指能够构建非常接近的近似算法,但无法预测任何东西(我称之为“虚拟算法”)。

例如,我们比较线性插值器和多项式(1000000阶,非常高阶)插值器。我们的多项式算法可能非常适合数据(极端过度拟合是完全适合我们的所有数据)。但它将无法预测任何东西。

对于下面的示例,如果我们在验证集中(从实际数据中提取)有一个点在(2,-2)和(-1,2),我们可以假设我们的多项式插值明显过度拟合,因为它建议像(-1,10)和(2,20)这样的值。线性插值器应该更接近。

enter image description here

我希望这可以帮到您。(请注意,我并非该领域专家,但我会尽力回答得通俗易懂。如果有任何错误之处,请随意留言 :))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接