关于深度学习:用CTGAN生成真实世界的表格数据

57次阅读

共计 3150 个字符,预计需要花费 8 分钟才能阅读完成。

随着 CLIP 和稳固模型的疾速倒退,图像生成畛域中 GAN 曾经不常见了,然而在表格数据中 GAN 还是能够看到它的身影。

事实世界的复杂性与许多方面相干 (例如,缺失数据、不均衡数据、噪声数据),但最常见的一个问题是蕴含异构(或“混合”) 数据,即蕴含数字和分类特色的数据。

因为每种特色类型都可能具备本人的外在特色,异构数据对合成数据生成过程提出了额定的挑战。

CTGAN(Conditional Tabular Generative Adversarial Network)就是通过“捕捉”事实世界数据的这种异质性,与其余架构 (如 WGAN 和 WGAN- gp 等) 相比,已被证实对各种数据集更加强壮和可泛化。

在本文中,咱们将介绍 CTGAN,并且阐明哪些属性使得它对表格数据如此高效,以及为什么和何时应该利用它。

真实世界的表格异构数据

咱们所说的“表格数据”,即能够以相似表格的格局进行结构化和组织和存储的数据。特色 (有时称为“变量”或“属性”) 以列示意,而察看值 (或“记录”) 对应于行。真实世界的数据通常包含数字和分类特色:

数值特色 (也称为“间断的”) 是那些编码定量值的特色,而分类特色 (也称为“离散的”) 示意定性测量。

上面是一个支出数据集的示例,age 和 fnlwgt 是数字特色,而其余的是分类特色。

为什么异构表格数据须要 CTGAN ?

从最后的 GAN 开始,钻研人员始终在对原始架构、新的损失函数或优化策略提出批改,以解决特定的 GAN 局限性。

例如,WGAN 和 WGAN- gp 等架构在训练稳定性和收敛工夫方面对 GAN 进行了显著改良。,PacGAN 的设计是为了缓解模式解体,这是传统 GAN 架构的另一个常见毛病。

然而在数据异构方面(即解决数字和分类特色及其外在特色),这些体系结构仿佛依然不尽如人意。它们在数字特色方面体现得很好,但它们很难捕获分类特色的散布,而分类特色的存在对于大多数真实世界的数据集来说都是事实的。

这些架构都没有解决蕴含混合特色类型的异构数据——包含数字和分类。然而 CTGAN 是专门设计解决表格数据集的。在其余架构 (如 WGAN-GP 和 PacGAN) 取得成功的根底上,CTGAN 更进一步,将合成数据生成视为一个残缺的流程——从数据筹备到 GAN 架构自身。也就是说,CTGAN 关注数字和类别特色的特定特色,并将这些特色合并到生成器模型中。

数值特色:非高斯分布和多峰分布

CTGAN 引入特定归一化,与像素值通常遵循相似高斯分布的图像数据相同,表格数据中的间断特色通常是非高斯分布的。它们偏向于遵循多峰分布,其中概率分布具备不止一种模式,即它们呈现出不同的部分极大值(或“峰值”):

为了捕捉这些行为,CTGAN 应用特定于模式的归一化。应用 VGM(变分高斯混合)模型,间断特色中的每个值都由示意其采样模式的独热向量和示意依据该模式归一化的值的标量示意:

分类特色: 稠密独热编码向量和高分类不均衡

CTGAN 引入了条件生成器,旨在解决由分类特色引入的两个次要挑战:

一个是独热编码向量在实在数据中的稠密性。当生成器输入所有可能的类别值的概率分布时,原始的“实在”类别值间接编码在一个独热向量中。通过比拟实在数据和合成数据之间的散布稠密性,判断器很容易辨别这些数据。

另一个是与某些分类特色相干的不均衡。如果一个特色的某些类别没有被充沛示意,那么生成器就不能充沛地学习它们。如果咱们关注预测建模或分类工作,数据过采样可能是缓解这一问题的解决方案。然而因为合成数据生成的指标是模仿原始数据的属性,所以这个解决方案不成立。

CTGAN 引入了一个条件生成器来解决不均衡类别,然而这通常会导致 GAN 的模式解体。在条件也没有完满的解决这个问题,它也须要筹备输出以便生成器能够解释条件,并且生成的行须要保留输出条件。

CTGAN 生成表格数据代码示例

CTGAN 的公布曾经有 2 - 3 年的工夫了,咱们能够间接应用 上面的 代码装置官网的实现并应用它:

 pip install ctgan

然而,咱们这里要介绍一个更简略并且不便的应用形式,还记得 stable diffusion web UI 吗,我可间接能够用过点点点就能生成图片,当初 ydata-synthetic 也推出了一个 Streamlit 应用程序,咱们能够间接通过 webUI 来执行数据读取,剖析,新生成的合成数据的残缺流程。

首先要装置 ydata-synthetic。别忘了加上“streamlit”:

 pip install "ydata-syntehtic[streamlit]==1.0.1"

而后,关上一个 Python 文件增加上面 2 行代码:

 from ydata_synthetic import streamlit_app
 
 streamlit_app.run()

运行后,控制台将输入能够拜访应用程序的 URL !

1、训练一个模型

训练合成器很简略: 你能够拜访“Train a Synthesizer”选项卡并上传一个文件(我应用的是下面的支出数据集):

文件加载后须要指定哪些特色是数字的和分类的:

而后,能够抉择合成器参数,即咱们打算应用的模型及其参数,如批量大小、学习率和其余设置(例如噪声维度、层维度和正则化常数 beta 等等)。抉择训练轮数,而后点击一个按钮开始训练:

我在示例中应用了 CTGAN,这个 UI 还反对其余模型,如 GAN、WGAN、WGANGP、CRAMER 和 DRAGAN。

2、生成数据样本

要生成新的样本,咱们能够拜访“Generate synthetic data”选项卡,抉择要生成的样本数量,并指定保留它们的文件名。模型在默认状况下以 trained_synth 保留和加载。也能够通过提供它的门路来加载先前训练过的模型。

“Generate synthetic data profiling”能够生成一个数据分析报告来查看合成数据的整体特色,设置实现后能够点击“Generate Samples”开始生成。

生成的报告是应用 ydata-profiling 包生成的,而合成的样本保留在 syntic_adult .csv 文件中。

通过钻研新生成的样本报告,能够很容易地确定 CTGAN 曾经胜利地学习了原始数据的特色,即便在简单的异构场景中,包含:

  • 数字和类别特色的基本特征统计数据保持一致(例如,平均值 / 标准偏差,类别 / 模式的数量)
  • 在合成数据上放弃原始类别的频率,模仿了类别特色的示意
  • 特色之间的根本关系 (相关性) 也被保留

依据给定给模型的特定参数,也能够改良合成数据生成后果,使新数据尽可能靠近原始数据。有了这个不便的 UI 咱们基本上不必写代码就能够生成新的数据了。

局限性和毛病

只管 CTGAN 已被证实是一种弱小的表格数据架构,但它依然有一些局限性和毛病(正如预期的那样,一些是所有深度学习模型独特的):

  • 为具备不同特色的数据集优化超参数具备挑战的,须要大量的重复试验;
  • 解决高基数特色依然存在问题,因为模型很难学习和生成如此大量的独特类别
  • 解决偏态散布或具备大量常量值(例如,大量 0)的散布也很难被该架构捕捉
  • 对于小数据集,合成可能不太精确,因为 CTGAN 与任何其余深度学习模型一样,须要大量数据
  • 训练和收敛可能须要大量的计算资源和工夫,尤其是对于十分大的数据集

然而 CTGAN 能够最无效地为具备异构特色和足够训练规模的结构化表格数据集生成合成数据,这一点是很好的。

总结

在本文中,咱们探讨了 CTGAN 的工作原理,摸索了 ydata-synthetic 的 Streamlit 应用程序,它容许咱们在无代码的环境中合成数据。

依据更新打算,下一个将增加到 UI 的是对工夫序列模型 (TimeGAN) 的反对,这是一个十分好的音讯。

相干文件下在地址:

https://avoid.overfit.cn/post/512c0554f1d84a56a14cf53181d6e471

作者:Miriam Santos

正文完
 0