我是一个机器学习的新手,正在学习回归的基本概念。我的困惑可以通过举一个输入样本及其目标值的例子来解释。例如(请注意,我给出的例子是普遍情况,我在一个大型自定义图像数据集上观察了性能和预测值。另外,请注意目标值不是浮点数),我有:
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之间的相关性返回空并引发错误。
但是当我有:
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]
这给出了很好的相关性。
我的问题是,在机器学习算法中,是什么因素或过程使得每个输入具有不同目标值时学习效果更好?为什么当大量输入具有重复值时,网络无法正常工作?
回答:
为什么当大量输入具有重复值时,网络无法正常工作?
可以肯定,这绝对不是你展示的第一个数据集网络表现不佳的原因。
(你没有提供任何代码,所以这将不可避免地是一个定性回答)
仔细观察你的第一个数据集:
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并不是魔法)。
仔细观察你的第二个数据集,你会发现情况并非如此,因此网络在这里能够表现得更好是毫不奇怪的;在进行此类实验时,确保我们比较的是苹果和苹果,而不是苹果和橘子非常重要。
你在这里尝试和提问的另一个普遍问题是:神经网络不擅长外推,即预测它们在训练过的数值域之外的数值函数。有关详细信息,请参阅我在深度学习是否不善于拟合训练范围之外的简单非线性函数?的回答
这里最后一个不寻常的事情是你使用了相关性;不确定你为什么选择这样做,但你可能有兴趣知道,在实践中,我们从不使用预测结果和真实值之间的相关性度量来评估模型性能 – 我们使用诸如均方误差(MSE)之类的度量(对于像你这样的回归问题)。