使用神经网络 (MLP) 进行估计
Using neural networks (MLP) for estimation
我是 NN 的新手,我遇到了这个问题:
我有一个包含 300 行和 33 列的数据集。每行还有 3 列结果。
我正在尝试使用 MLP 来训练模型,以便当我有一个新行时,它会估计这 3 个结果列。
我可以轻松地将训练期间的错误减少到 0.001,但是当我使用交叉验证时,它的估计一直很差。
如果我使用它用于训练的相同条目,它会正确估计,但如果我使用另一个未用于训练的值,结果就会非常错误
我使用了两个隐藏层,每个隐藏层有 20 个神经元,所以我的架构是 [33 20 20 3]
对于激活函数,我使用的是 biporlarsigmoid 函数。
你们有什么关于我可以尝试改变以改进它的建议吗?
过拟合
如评论中所述,这完美地描述了过度拟合。
我强烈建议阅读有关过度拟合的维基百科文章,因为它很好地描述了原因,但我将在这里总结一些要点。
模型复杂度
当您的模型对于问题来说不必要地复杂时,经常会发生过度拟合。我对你的数据集一无所知,但我猜 [33 20 20 3] 的参数多于预测所需的参数。
再次尝试 运行 您的交叉验证方法,这次使用更少的层数,或者每层更少的节点数。现在你正在使用 33*20 + 20*20 + 20*3 = 1120 个参数(权重)进行预测,是否有必要?
正则化
过度拟合的一个常见解决方案是正则化。驱动原则是 KISS(保持简单,愚蠢)。
通过对您的权重应用 L1 正则化器,您可以优先选择最少数量的权重来解决您的问题。网络会将许多不需要的权重拉为 0。
通过将 L2 正则化器应用于您的权重,您可以优先选择较低等级的问题解决方案。这意味着您的网络将更喜欢跨越较低维度的权重矩阵。实际上,这意味着您的权重将是较小的数字,并且不太可能 "memorize" 数据。
什么是 L1 和 L2?这些是矢量范数的类型。 L1 是你的权重的绝对值之和。 L2 是您的权重平方和的平方和。 (L3 是权重立方之和的立方根,L4 ...)。
失真
另一种常用技术是使用训练样本的扭曲版本来扩充训练数据。这仅对某些类型的数据有意义。例如,图像可以旋转、缩放、移动、添加高斯噪声等,而不会显着改变图像的内容。
通过添加扭曲,您的网络将不再记住您的数据,但也会在事物看起来与您的数据相似时学习。数字 1 旋转 2 度看起来仍然像 1,因此网络应该能够从这两个方面学习。
只有您知道您的数据。如果这可以用您的数据完成(即使只是为每个特征添加一点高斯噪声),那么也许这值得研究。但是不要盲目使用它而不考虑它可能对您的数据集产生的影响。
仔细分析数据
我把这个放在最后是因为它是对过拟合问题的间接反应。在通过黑盒算法(如神经网络)抽取数据之前检查您的数据。如果您的网络无法正常工作,以下是一些值得回答的问题:
- 我的任何特征是否彼此密切相关?
- 基线算法如何执行? (线性回归、逻辑回归等)
- 我的训练样本如何在 class 中分布?我有一个 class 的 298 个样本和另外两个的 1 个样本吗?
- 我的样本在 class 中有多相似?也许我有 100 个样本 class,但它们都是相同的(或几乎相同的)。
我是 NN 的新手,我遇到了这个问题:
我有一个包含 300 行和 33 列的数据集。每行还有 3 列结果。
我正在尝试使用 MLP 来训练模型,以便当我有一个新行时,它会估计这 3 个结果列。
我可以轻松地将训练期间的错误减少到 0.001,但是当我使用交叉验证时,它的估计一直很差。
如果我使用它用于训练的相同条目,它会正确估计,但如果我使用另一个未用于训练的值,结果就会非常错误
我使用了两个隐藏层,每个隐藏层有 20 个神经元,所以我的架构是 [33 20 20 3]
对于激活函数,我使用的是 biporlarsigmoid 函数。
你们有什么关于我可以尝试改变以改进它的建议吗?
过拟合
如评论中所述,这完美地描述了过度拟合。 我强烈建议阅读有关过度拟合的维基百科文章,因为它很好地描述了原因,但我将在这里总结一些要点。
模型复杂度
当您的模型对于问题来说不必要地复杂时,经常会发生过度拟合。我对你的数据集一无所知,但我猜 [33 20 20 3] 的参数多于预测所需的参数。
再次尝试 运行 您的交叉验证方法,这次使用更少的层数,或者每层更少的节点数。现在你正在使用 33*20 + 20*20 + 20*3 = 1120 个参数(权重)进行预测,是否有必要?
正则化
过度拟合的一个常见解决方案是正则化。驱动原则是 KISS(保持简单,愚蠢)。
通过对您的权重应用 L1 正则化器,您可以优先选择最少数量的权重来解决您的问题。网络会将许多不需要的权重拉为 0。
通过将 L2 正则化器应用于您的权重,您可以优先选择较低等级的问题解决方案。这意味着您的网络将更喜欢跨越较低维度的权重矩阵。实际上,这意味着您的权重将是较小的数字,并且不太可能 "memorize" 数据。
什么是 L1 和 L2?这些是矢量范数的类型。 L1 是你的权重的绝对值之和。 L2 是您的权重平方和的平方和。 (L3 是权重立方之和的立方根,L4 ...)。
失真
另一种常用技术是使用训练样本的扭曲版本来扩充训练数据。这仅对某些类型的数据有意义。例如,图像可以旋转、缩放、移动、添加高斯噪声等,而不会显着改变图像的内容。
通过添加扭曲,您的网络将不再记住您的数据,但也会在事物看起来与您的数据相似时学习。数字 1 旋转 2 度看起来仍然像 1,因此网络应该能够从这两个方面学习。
只有您知道您的数据。如果这可以用您的数据完成(即使只是为每个特征添加一点高斯噪声),那么也许这值得研究。但是不要盲目使用它而不考虑它可能对您的数据集产生的影响。
仔细分析数据
我把这个放在最后是因为它是对过拟合问题的间接反应。在通过黑盒算法(如神经网络)抽取数据之前检查您的数据。如果您的网络无法正常工作,以下是一些值得回答的问题:
- 我的任何特征是否彼此密切相关?
- 基线算法如何执行? (线性回归、逻辑回归等)
- 我的训练样本如何在 class 中分布?我有一个 class 的 298 个样本和另外两个的 1 个样本吗?
- 我的样本在 class 中有多相似?也许我有 100 个样本 class,但它们都是相同的(或几乎相同的)。