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

时间:2016-06-14 15:42:13

标签: matlab validation neural-network

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

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

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]验证输出属于第2类。它由输出图中的黑点表示。蓝色是1级。黄色是属于2级的区域。红色是3级。

如图所示,神经网络的预测被发现为2级,与该组的实际类别一致。

那么,这是否意味着我的神经网络是正确和有效的?

P.S。我对神经网络有基本的了解。此外,我理解拥有更多培训示例和验证集的概念。我希望得到一个满足可用细节的答案,因为我无法通过实验获得更多数据。

enter image description here

1 个答案:

答案 0 :(得分: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年),我们选择另一种算法或我们试着检查数据或算法的问题。
  6. 这就是你如何建立一个可靠的神经网络(不要忘记,两个主要问题是不检查最终结果和过度拟合)。

    过度拟合是一个关键概念。我会尝试定义一下并给出一个例子。过度拟合使得算法能够构建非常接近的近似但是无法预测任何东西(我称之为“虚拟算法”)。

    让我们比较一个线性插值器和一个多项式(1000000度,非常高度)。我们的多项式算法可能非常适合数据(极端过度拟合恰好适合我们所有的数据)。但是,它根本无法预测任何事情。

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

    enter image description here

    我希望它会有所帮助。 (请注意,我不是该领域的专家,但我试图提出一个非常易读且简单的答案,所以如果有任何错误,请随意评论:))