本文旨在解决使用涉及GANs的开源库来增强/扩展你现有的数据集的需求。
照片:Munro StudioonUnsplash
1.1.背景
作为一个ML从业者或数据科学家,当我们发现自己处于 "如果我们有更多的数据就好了 "这样的情况时,可能会有这样的想法。很多时候,我们所拥有的数据集非常有限,不确定如果给我们更多数量的统计学上的类似数据,我们的机器学习模型的性能是更好还是更差。当然,我们可以从获得现有数据的同一来源挖掘更多的数据,但这可能不是每次都能做到的。如果有一种方法可以从我们已有的数据中创造更多的数据呢?
2.介绍--以数据为中心的方法
以数据为中心的方法正在成为这些年常见的热门讨论话题,像Andrew Ng这样的热门人物主张需要拥有/构建以数据为中心的人工智能解决方案,而不是模型本身。当然,拥有正确的模型也是必不可少的,也应该牢记在心。关于以数据为中心与以模型为中心的争论是一个重要的问题,因为我们不能完全赞成一种方法而不是另一种。
3.为什么让人工智能扩大你的数据集?
让我们问自己两个基本问题 -
- 为什么我们要让人工智能,本质上是一个模型(一段代码)来扩展我们的数据集,为什么我们不能拿我们现有的数据集来手动做?
- ML算法将在我们现有的数据基础上生成新的数据。让人工智能模型用更多但(某种程度上)冗余的信息来增加数据集,而不是保留更少但更有用的信息,这不是毫无意义吗?
第一个问题的答案是相当明显的,因为当我们处理几千(甚至几百万)大小的数据集时,人工干预变得几乎不可能,因为很难研究整个数据集并提取基本上构成数据集的重要特征。然后,这些提取的特征需要以特定的方式进行复制,以便为数据集添加更多的例子。一个简单的办法是猎取更多的数据。但猎取往往并不容易,更具体地说,如果项目需要一个非常利基或特定类型的数据集。另外,在当今世界,隐私是个大问题,如果数据猎取过程涉及到搜刮用户的个人数据或身份,那么这可能不是最道德的方式。
至于第二个问题,要马上回答就有点棘手了,这需要深入思考。这个问题的答案将涉及交叉检查负责生成新数据的ML算法。更多时候,是否需要这样做取决于项目要求和最终结果。
考虑这个问题的最简单方法如下。比方说,我们预留了一个特定的精心策划的测试数据集用于最终测试。现在,如果新生成的数据集与原始数据集相结合,能够在三倍的范围内改善模型,它将解决我们的目的,并且足够有用。换句话说,如果我们的模型在未见过的数据集上的性能有所提高,我们可以得出结论,将现有数据的增强版添加到模型中,改善了模型,并使系统对从未见过的数据更加稳健。
4.GANs--简要描述
关于GANs的出色和详细的阅读可以在谷歌开发者的博文中找到,但用非常简单的术语来说,生成对抗网络由两方组成,他们试图相互竞争。其中一方试图欺骗另一方,而另一方则试图避免这种欺骗。
这两方是一个生成器和一个鉴别器,都是神经网络,它们试图以下列方式相互竞争。
- 生成器试图生成的内容在理想情况下应该与真实内容一样,可以是图像、文本,或者只是一般的数字数据。如果鉴别器能够区分真实内容和生成的内容,生成者就会受到惩罚。
- 鉴别器试图区分生成内容和真实内容。如果鉴别器不能区分真实内容和生成内容,则会受到惩罚。
最终的目标是让生成器能够产生与真实数据非常接近的数据,以至于鉴别器无法再避免欺骗,这就使我们拥有比开始时更多的数据。
(重构)来自谷歌开发页面的方框图
5.使用ydata-synthetic生成数据
ydata-synthetic是一个用于生成合成数据的开源库。目前,它支持创建常规的表格数据,以及基于时间序列的数据。在这篇文章中,我们将快速查看生成一个表格数据集。更具体地说,我们将使用信用卡欺诈检测数据集并生成更多的数据例子。在ydata-synthetic的资源库中提供了一个笔记本的例子,可以在Google Colab中打开,以便在信用卡数据集的基础上合成一个表格式数据集。
让我们阅读一下数据集,看看这个特定的数据集由哪些颜色组成
我们得到了以下颜色。
Dataset columns: ['V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10', 'V11', 'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19', 'V20', 'V21', 'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28', 'Amount', 'Class']
暂时不涉及太多具体领域的细节,这些基本上是描述信用卡交易的特征。在数据集中有一个叫做 "类别 "的最后一栏,在欺诈的情况下其值为1,否则为0。在这个数据集中,与非欺诈相比,欺诈案件实际上非常少,我们希望增加欺诈案例的数据集。
因此,我们只从数据集中提取那些类别为1的条目,也就是欺诈值。然后我们应用PowerTransformation,以使分布呈高斯状。
然后,我们可以继续训练我们的GAN模型,使其研究和学习欺诈值。在这个例子中,我们将使用一种特殊类型的GAN模型,称为WGAN-GP(带梯度惩罚的Wasserstein GAN)。超参数和训练设置以列表的形式定义,并交给我们的模型进行训练。
最后,我们可以通过给它提供一个随机值的矩阵作为启动器,从训练过的模型中实际生成数据。
为了可视化和比较生成的输出,我们从_g_z_中取任意2个颜色(例如V10和V17),并为多个历时的训练权重制作散点图。
实际输出和GAN输出的比较
因此,我们看到V17和V10的值在我们的原始数据集中有一个模式("实际欺诈数据",左图),在训练和预测期间,GAN试图从中学习并尽可能地复制。在第60个历时结束时,V17和V10的最终值(以及其他特征)在一定程度上与原始数据集的值相似。
完整的实践演练可以在Ydata-synthetic资源库的Google Colab笔记本中找到,前面也有链接。
6.结论,以及下一步?
我们研究了根据我们的用例和最终目标产生合成数据的需要。我们简单介绍了GAN架构,我们还使用了ydata-synthetic来生成表格数据。在未来的文章中,我们还可以探索生成时间序列数据的可能性。
用合成数据生成/扩展你的数据集》最初发表在《迈向数据科学》杂志上,人们在那里通过强调和回应这个故事来继续对话。