我是机器学习和学习回归的基本概念的新手。通过放置带有目标值的输入样本的示例,可以很好地说明我的困惑。因此,例如(请注意,我输入的示例是一般情况,我观察了大型自定义图像数据集的性能和预测值。此外,请注意目标值不在浮点数中。),我有:
xtrain = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
ytrain = [10, 10, 10, 20, 20, 20, 30, 30, 30, 40, 40, 40]
和
xtest = [13, 14, 15, 16]
ytest = [25, 25, 35, 35]
您会注意到,三个样本(测试集中两个样本)具有相似的目标值。假设我有一个带有一个Flatten()和两个Dense()层的多层感知器网络。训练后,网络可以预测测试样品的目标值都相同:
yPredicted = [40, 40, 40, 40]
因为预测值都相同,所以 ytest 和 yPredicted 之间的相关性返回null并给出错误。
但是当我有
xtrain = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
ytrain = [332, 433, 456, 675, 234, 879, 242, 634, 789, 432, 897, 982]
并且:
xtest = [13, 14, 15, 16]
ytest = [985, 341, 354, 326]
预测值为:
yPredicted = [987, 345, 435, 232]
具有很好的相关性。
我的问题是,当每个输入具有不同的目标值时,机器学习算法中的什么东西或过程使学习变得更好?当具有大量输入的重复值时,为什么网络不起作用?
答案 0 :(得分:0)
为什么对大量输入具有重复值时网络无法工作?
当然,这不是您的网络在所示的第一个数据集中表现不佳的原因。
(您尚未提供任何代码,因此不可避免地这将是定性的答案)
仔细查看您的第一个数据集:
xtrain = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
ytrain = [10, 10, 10, 20, 20, 20, 30, 30, 30, 40, 40, 40]
不难得出结论,我们有一个单调(递增)函数y(x)
(它不是严格单调的,但在提供了整个x
范围。
鉴于这一点,您的模型完全没有办法“知道” ,对于x > 12
,该函数的定性性质发生了显着变化(并且更确切地说,从测试集中可以明显看出)
xtest = [13, 14, 15, 16]
ytest = [25, 25, 35, 35]
并且您不应该期望它以任何方式知道或“猜测”它(尽管许多人似乎相信,NN不是 魔术)。
密切关注您的第二个数据集,您会发现事实并非如此,因此,毫无疑问,网络在此处的性能更好;在进行此类实验时,确保我们将苹果与苹果而不是苹果与橙子进行比较非常重要。
您在这里尝试的另一个普遍问题是您的问题:神经网络不擅长外推,即在训练神经网络的数字域之外预测此类数字函数。有关详细信息,请访问Is deep learning bad at fitting simple non linear functions outside training scope?
查看自己的答案这里最后一个不寻常的事情是您对关联的使用;不确定为什么选择这样做,但是您可能想知道,实际上,我们永远不会使用预测结果和基本事实之间的相关性度量来评估模型性能-我们使用均方误差(MSE)等度量来代替(用于回归问题,例如此处的问题)。