机器学习回归中每个样本的相同与不同目标值

我是一个机器学习的新手,正在学习回归的基本概念。我的困惑可以通过举一个输入样本及其目标值的例子来解释。例如(请注意,我给出的例子是普遍情况,我在一个大型自定义图像数据集上观察了性能和预测值。另外,请注意目标值不是浮点数),我有:

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]

因为预测值全部相同,ytestyPredicted之间的相关性返回空并引发错误。

但是当我有:

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)之类的度量(对于像你这样的回归问题)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注