全文共3577字,预计学习时长7分钟
谷歌、Facebook和微软这样的大型科技巨头正在毫不吝啬的将最新的机器学习算法和软件包免费提供给用户,其原因在于如今算法领域的入门门槛相当低。
开源社区和工具(如scikit-learn)已走过了漫长的道路,大量的开源项目推动了数据科学/数字分析和机器学习的发展。可以肯定的是,身处2019年,稀缺的资源并不是算法、编程框架和机器学习包(甚至也不是学习这些技术的教程),而是高质量的数据。
对数据科学和机器学习领域的从业者而言,在对算法进行调整或微调时,数据稀缺往往是一个棘手的问题。本文谈论的数据稀缺是在算法研究、教学学习和建立模型方面,而不是扩展和商业运营方面。
本文不讨论如何获取用于开发旅行或时尚类应用程序的高质量数据。有专门的议题讨论如何收集这类消费者、社交或行为数据。然而,即使是像为检测特定算法的局限性和不确定性获取高质量数据这样看似简单的事情,也常常并非易事。
为什么需要合成数据集?
建议新手从简单的小规模数据集开始。可以在二维空间中绘图,直观地了解其规律,并查看ML算法的运行情况。
然而,随着数据维度爆炸,视觉判断必须扩展到更复杂的问题——学习和样本复杂性、计算效率、类不平衡等概念。
此时,需要将实验灵活性与数据集性质之间的平衡纳入考量范围。总能找到一个真实的大型数据集来练习算法。但这仍然是一个样本数量固定,潜在规律固定,并且正负样本之间类别分离程度固定的数据集。还必须研究以下问题:
• 所选测试和训练数据比例如何影响算法的性能和健壮性
• 面对不同程度的类别不平衡,衡量指标有多么健壮
• 如何权衡偏差和方差
• 各种噪声信号干扰下,算法在训练和测试数据中的表现(即标签及特征集中的噪声)
• 如何测试和找出ML算法的缺陷?
事实证明,仅靠一个真实的数据集很难解决上述问题。因此,必须使用足够随机的合成数据来实现真实数据集的不确定性,同时这些数据必须足够可控,才能有助于科学地研究特定ML Pipeline的优缺点。
虽然本文不会讨论这一问题,但是在医学分类或财务建模这些敏感的应用领域,合成数据集的潜在优势显著。这些领域获取高质量标记数据集,往往因为耗资巨大令人却步。
ML合成数据集的基本特征
现在应理解合成数据集是通过程序生成的,而不是源自社科实验、商业交易数据、传感器读取或图像手动标记。然而,这些数据集绝对不是完全随机的,生成和使用用于ML的合成数据必须遵循一些总体需求。尤其是:
• 数据集可以是数字、二进制或分类的(顺序或非顺序的),数据集的维度和长度可以不固定
• 数据集必须具有一定的随机性,但与此同时,用户能够按照各种各样的统计分布来生成这些数据,即可以精确控制和调整数据背后的随机过程
• 用于分类算法的数据及需要能够控制类分离程度来调节学习问题的难易程度
• 能够以可控的方式在数据集中插入随机噪声
• 数据集能够足够迅速地生成,以便能够使用大量此类数据集针对任何特定ML算法进行实验,即,如果合成数据基于实际数据集上的数据增广,则增广算法必须具有计算效率
• 对于回归问题,可以使用复杂非线性生成过程来获取数据——真实的物理模型可能会对这一问题有所帮助
下一节将介绍如何使用一些最流行的ML库和编程技术生成合适的数据集。