更多数据是否总是带来更好的性能-
更多数据是否总是带来更好的性能?
原文:
towardsdatascience.com/does-more-data-always-yield-better-performance/
引言
在数据科学中,我们在拟合手头的数据时,努力提高我们模型的不太令人满意的性能。我们尝试从改变模型复杂性到数据按摩和预处理的各种技术。然而,更常见的情况是我们被建议“仅仅”获取更多数据。除了这比说起来容易做起来难之外,也许我们应该停下来质疑传统智慧。换句话说,*
增加更多数据是否总是带来更好的性能?
在这篇文章中,我们将使用真实数据和我为这种调查构建的工具来检验这个谚语。我们将揭示与数据收集和扩展相关的微妙之处,挑战这种努力自动提高性能的观念,并呼吁更加谨慎和有策略的实践。
更多数据意味着什么?
让我们首先定义一下我们所说的“更多数据”究竟是什么意思。在最一般的设置中,我们通常想象数据是表格形式的。当提出获取更多数据的想法时,首先想到的是向我们的数据框中添加更多行(即更多数据点或样本)。
然而,另一种方法可能是增加更多列(即更多属性或特征)。第一种方法在垂直方向上扩展数据,而第二种方法在水平方向上扩展。
我们接下来将考虑两种方法的共性和特性。

数据可以通过添加更多样本或更多列来扩展。(图片由作者提供)
案例一:更多样本
让我们考虑增加更多样本的第一个案例。增加更多样本是否必然会提高模型性能?
为了深入探究这个问题,我创建了一个托管在 HuggingFace 空间中的工具,以针对这个问题。这个工具允许用户在分析UCI Irvine – 预测学生辍学和学术成功数据集[1]时,通过决策树实验改变属性集、样本大小和/或模型复杂性的影响。虽然这个工具和数据集都旨在教育目的,但我们仍然能够从中获得有价值的见解,这些见解可以推广到这个基本设置之外。

…


特征/深度/样本探索工具(由作者使用 UCI 数据集生成)
假设学校的院长给你一些学生记录,并要求你确定预测学生辍学的因素以解决这个问题。你一开始有 1500 个数据点。你创建了一个 700 个数据点的隐藏测试集,并使用其余的进行训练。提供给你的数据包含学生的国籍和父母的职业,以及 GDP 和通货膨胀率以及失业率。
然而,结果似乎并不令人印象深刻。F1 分数很低。因此,你自然会要求你的院长拉一些关系来获取更多学生记录(可能是来自前几年或其他学校),他们花了几个星期时间这样做。每次你得到一批新的学生记录时,你都会重新运行实验。传统智慧认为,增加更多数据会稳步提高建模过程(测试 F1 分数应单调递增),但你看到的情况并非如此。随着数据的增加,性能波动不定。你感到困惑。为什么更多的数据会损害性能?为什么在添加一个批次后,F1 分数从 46%下降到 39%?这种关系不应该是因果的吗?

样本数量与性能:即使进行交叉验证的超参数调整,随着样本数量的增加,训练和测试的 F1 分数也会波动。增加更多样本的影响可能是混乱的,并且不符合直觉。(由作者使用 UCI 数据集生成的图像)
好吧,问题是实际上是否额外的样本必然提供更多信息。让我们首先思考这些额外样本的本质:
-
它们可能是错误的(即,数据收集中的错误)
-
它们可能是有偏见的(例如,过度代表与测试集表示的真实分布不一致的特殊情况)
-
测试集本身可能是有偏见的…
-
一些批次可能会引入虚假模式,而其他批次可能会取消这些模式。
-
收集的属性与目标(即,存在未考虑到的潜在变量)几乎没有相关性或因果关系。因此,无论你添加多少样本,它们都不会带你走得太远!
因此,是的,增加更多数据通常是一个好主意,但我们必须注意数据的不一致性(例如,两个同国籍和社会地位的学生可能由于其他因素而走上不同的道路)。我们还必须仔细评估可用属性的实用性(例如,也许 GDP 与学生辍学率无关)。
有些人可能会争辩说,当你拥有大量真实数据时,这不会成为问题(毕竟,这是一个相对较小的数据集)。这个论点有一定的道理,但前提是数据高度同质化,并考虑到属性集的不同可变性以及“自由度”(即每个属性可以取的值范围以及这些值在现实世界中的可能组合)。研究已经展示了被认为是黄金标准的大型数据集,它们以有趣且不明显的方式表现出偏差,这些偏差在第一眼看来并不容易发现,导致误导性的高精度报告[2]。
案例二:更多属性
现在,说到属性,让我们考虑一个替代场景,即你的院长未能获取更多学生记录。然而,他们来了,说:“嘿,你……我没能获取更多学生记录……但我能使用一些 SQL 获取更多数据属性……我相信你现在可以提升你的表现了。对吧?……对吧?!”

特征集与性能:每根垂直线表示决策树(800 个样本,带有交叉验证的超参数调整)的重新训练,增加了一个额外的属性。一些属性有帮助(母亲的职业),而其他则有害(父亲的职业和性别)。更多的列有时可能意味着更多的噪声和过拟合的方式。(由作者使用 UCI 数据集生成图像)
好吧,让我们来验证一下。让我们看看以下例子,其中我们逐步添加更多属性,扩展学生的个人资料,包括他们的婚姻、财务和移民状态。每次添加一个属性,我们都会重新训练树并评估其性能。正如你所看到的,一些增量可以提高性能,而其他则实际上会损害它。但再次问,为什么?
仔细观察属性集,我们发现并非所有属性都实际携带有用信息。现实世界是混乱的……一些属性(例如,性别)可能在训练集中提供噪声或错误的关联,这些关联在测试集中不会很好地泛化(过拟合)。
此外,虽然常识认为,随着你添加更多数据,你应该增加模型复杂性,但这种做法并不总是产生最佳结果。有时,当添加一个属性时,降低模型复杂性可能有助于解决过拟合问题(例如,当课程被引入时)。

特征集与树深度:随着属性的增加,最佳树深度(通过网格搜索选择)会波动。请注意,更多的属性并不总是意味着更大的树。(由作者使用 UCI 数据集生成图像)
结论
退一步来看整个大局,我们会发现,虽然收集更多数据是一个崇高的目标,但我们应小心不要自动假设性能会变得更好。这里有两个作用力:模型与训练数据的拟合程度,以及这种拟合如何可靠地推广到未见数据。
让我们总结一下每种类型的“更多数据”如何影响这些力量——这取决于添加的数据是好(代表性、一致性、信息性)还是坏(有偏、噪声、不一致):
| 如果数据质量好… | 如果数据质量差… |
|---|
| 更多样本(行) | • 训练误差可能略微上升(更多的变化使其难以拟合)。
• 测试误差通常下降。模型变得更加稳定和自信。| • 训练误差可能波动,因为存在冲突的例子。
• 测试误差通常上升。|
| 更多属性(列) | • 训练误差通常下降(更多的信号导致更丰富的表示。)
• 测试误差下降,因为属性编码了真实和可推广的模式。| • 训练误差通常下降(模型记住了噪声模式)。
• 测试误差上升,因为存在虚假的相关性。|
泛化不仅仅是关于数量,还关乎质量以及模型的正确复杂度。
总结一下,下次有人建议你“简单地”获取更多数据以神奇地提高准确性时,与他们讨论这个计划的复杂性。讨论所获取数据的性质、大小和质量。指出数据与模型复杂度之间细微的相互作用。这将有助于使他们的努力变得有价值!
需要内化的教训:
-
尽可能不要轻信别人的(或我的)说法。亲自实验!
-
在添加更多训练数据点时,问问自己:这些样本是否代表你正在建模的现象。它们是否向模型展示了更有趣的现实案例?或者它们是有偏的,或者不一致的?
-
在添加更多属性时,问问自己:这些属性是否被假设为携带信息,从而增强我们做出更好预测的能力,或者它们主要是噪声?
-
最终,进行超参数调整和适当的验证,以消除在评估新训练数据的信息量时产生的疑虑。
亲自试试!
如果你想亲自探索这篇文章中展示的动态,我在这里提供了交互式工具链接。当你通过调整样本大小、属性数量和/或模型深度进行实验时,你会观察到这些调整对模型性能的影响。这种实验丰富了你对数据科学和数据分析背后机制的理解和视角。
参考文献:
[1] M.V.Martins, D. Tolledo, J. Machado, L. M.T. Baptista, V.Realinho. (2021) “高等教育中对学生表现的早期预测:一个案例研究” Trends and Applications in Information Systems and Technologies, vol.1, in Advances in Intelligent Systems and Computing series. Springer. DOI: 10.1007/978-3-030-72657-7_16. 此数据集根据Creative Commons Attribution 4.0 International (CC BY 4.0)许可协议授权。这允许任何人出于任何目的共享和改编数据集,前提是给予适当的信用。
[2] Z. Liu and K. He, 十年间对数据集偏差的斗争:我们是否已经到达那里? (2024), arXiv: arxiv.org/abs/2403.08632

浙公网安备 33010602011771号