数据集大小对机器学习算法有影响吗?

那么,假设我们可以访问足够多的数据(数百万个用于训练和测试的数据点),并且这些数据的质量足够高。暂时忽略概念漂移,假设数据是静态的且不会随时间变化。使用所有这些数据在模型质量方面是否有意义?

Brain和Webb(http://www.csse.monash.edu.au/~webb/Files/BrainWebb99.pdf)在他们的研究中包含了一些关于不同数据集大小的实验结果。他们的测试算法在训练了16,000或32,000个数据点后趋于稳定。然而,由于我们生活在大数据时代,我们可以访问到数百万个数据点的集合,因此这篇论文虽然相关但已经相当过时了。

是否有关于数据集大小对学习算法(如朴素贝叶斯、决策树、SVM、神经网络等)影响的更近期的研究?

  1. 学习算法何时会收敛到一个稳定的模型,使得更多的数据不会再提高质量?
  2. 这会发生在50,000个数据点之后,还是200,000个数据点之后,或者只有在1,000,000个数据点之后?
  3. 是否有经验法则?
  4. 或者说,算法是否无法收敛到一个稳定的模型,到达某种平衡状态?

我为什么要问这个问题?想象一个存储空间有限的系统,拥有大量独特的模型(数千个模型,每个模型都有自己的独特数据集),且无法增加存储空间。因此,限制数据集的大小非常重要。

对此有任何想法或研究吗?


回答:

我在硕士论文中研究了这个主题,所以对此了解颇多。

简而言之,在我的硕士论文的第一部分,我使用了一些非常大的数据集(约5,000,000个样本),并在这些数据集上测试了一些机器学习算法,通过学习数据集的不同百分比(学习曲线)。HIGGS数据集结果

我的假设是(我主要使用scikit-learn)不优化参数,使用算法的默认参数(出于实际原因,我必须做出这个假设,因为一些模拟在集群上已经超过24小时)。

首先要注意的是,实际上,每种方法都会在数据集的某个部分达到一个平台期。然而,你不能因为以下原因得出达到平台期所需的有效样本数量的结论:

  • 每个数据集都是不同的,对于非常简单的数据库,10个样本就能提供几乎所有信息,而有些数据集即使在12000个样本后仍有新信息可提供(参见我上面的Higgs数据集示例)。
  • 数据集中的样本数量是任意的,在我的论文中,我测试了一个包含错误样本的数据集,这些样本只是为了干扰算法而添加的。

然而,我们可以区分两种不同类型的算法,它们将表现出不同的行为:参数化(线性等)和非参数化(随机森林等)模型。如果非参数化模型达到了平台期,这意味着数据集的其余部分是“无用的”。正如你所见,虽然Lightning方法在我的图中很快就达到了平台期,但这并不意味着数据集没有更多信息可提供,而是该方法所能做的最好结果。这就是为什么非参数化方法在模型复杂且能从大量训练样本中受益时表现最佳。

所以关于你的问题:

  1. 见上文。

  2. 是的,这完全取决于数据集中的内容。

  3. 对我来说,唯一的经验法则是使用交叉验证。如果你认为你将使用20,000或30,000个样本,你通常处于交叉验证不是问题的情况。在我的论文中,我在测试集上计算了我的方法的准确性,当我没有注意到显著改善时,我确定了达到该点所需的样本数量。正如我所说,你可以观察到一些趋势(参数化方法比非参数化方法更快达到饱和)。

  4. 有时当数据集不够大时,你可以使用所有可用的数据点,但如果有更大的数据集,仍有改进的空间。在我的论文中,没有对参数进行优化,Cifar-10数据集表现出这种情况,即使在50,000个样本后,我的算法也没有完全收敛。

我还要补充一点,优化算法的参数对达到平台期的速度有很大影响,但这需要另一个步骤的交叉验证。

你的最后一句与我的论文主题高度相关,但对我来说,更多是与执行机器学习任务可用的内存和时间有关。(因为如果你覆盖的数据集小于整个数据集,你将需要更少的内存,并且速度会更快)。关于这一点,“核心集”的概念可能对你非常有趣。

希望我能帮到你,我不得不停止,因为我可以一直谈论这个话题,但如果你需要更多澄清,我很乐意帮助。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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