用CTGAN生成真实世界的表格数据

news2024/9/28 7:21:32

随着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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/429951.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考电子商务设计师如何备考?

关于软考电子商务设计师考什么?如何备考? 一、电子商务设计师概述? 电子商务设计师属于软考中级资格考试,软考是由国家人力资源和社会保障部(原人事部)、工业和信息化部(原信息产业部)领导的…

使用Softing edgePlug软件扩展数控机床的连接性

那些使用SINUMERIK 840D控制器来运行数控机床的制造商正面临着一个挑战——从车间提取机床性能和过程数据来进行分析。这些数据对于优化流程至关重要,但它们却无法通过传统方式来被获取。对此,制造商的应对方法是通过自定义代码来实现数据访问&#xff0…

Redis与MySQL的双写一致性问题

Redis与MySQL的双写一致性问题更新缓存? 删除缓存?先更新缓存再更新数据库先更新数据库,再更新缓存先删除缓存再更新数据库先更新数据库,再删除缓存解决方案1. 重试2. 异步重试2.1 使用消息队列实现重试2.2 Binlog实现异步重试删除…

10万字智慧政务大数据治理平台解决方案(word)

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。 1 项目整体建设规划方案 按照《省人民政府关于推进数字政府建设的指导意见》(鄂政发(2019) 4号)的规则要求,结合XX市“互联网政府服务”建设现状&…

【Android笔记93】Android小案例(三)之模仿小米商城(首页商品展示界面)

这篇文章,主要介绍Android小案例(三)之模仿小米商城(首页商品展示界面)。 一、模仿小米商城(首页布局) 1.1、首页运行效果 这篇文章实现的首页布局界面如下所示: 1.2、实现思路 首页轮播图,这里采用一个Banner组件实现,不知道的可以看下我之前写的一篇文章【【And…

DUET详解草稿

详解VLN动机:流程拓扑图Text EncoderCoarse-scale Cross-modal EncoderNode embeddingGraph-aware cross-modal encodingGlobal action predictionFine-scale Cross-modal EncoderVisual EmbeddingFine-grained cross-modal reasoningLocal action prediction and o…

heic格式怎么改成jpg?

你想知道heic格式怎么改成jpg吗?当我们面对heic格式图片时,很有可能就会遇到无法打开图片的情况。因为heic与JPG相比,heic格式占用空间更少,图像质量更无损。HEIC格式照片支持iOS11和macOS High Sierra(10.13)及更高版本。但是这种…

【数据结构】链表 详解

我们不废话,直入正题。引入什么是链表?来看看百度怎么说:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点&#…

STM32+ESP8266点灯(STA 模式)点灯(2)

1、简介 STM32ESP8266点灯(APSTA 模式)点灯(1)一文已经通过串口助手实现与网络调试助手透传,本文通过STM32单片机替代网络调试助手,实现远程点灯。 2、单片机配置 2.1 cubemax配置 2.1.1 RCC配置 2.1.2…

华为手表开发:WATCH 3 Pro(13)websocket 请求数据到服务器

华为手表开发:WATCH 3 Pro(13)websocket 请求数据到服务器初环境与设备文件夹:文件重点核心代码:app.js新增一个文本输入框index.hmlindex.cssindex.js初 希望能写一些简单的教程和案例分享给需要的人 鸿蒙可穿戴开发…

Detectron2小白教程之安装试用篇

这里写自定义目录标题官方安装说明1、安装python2、安装opencv3、安装nvdia显卡驱动4、安装cuda11.75、安装pytorch6、安装nijia7、clone并安装detectron8、试运行detectronDetectron2是facebook主导的支持图像分类(Image classification),目标检测(Object detectio…

【Java EE】-文件IO

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【JavaEE】 分享: 主要内容:文件的认识,绝对路径相对路径,二进制文件文本文件,File的方法的使用,普通文件的…

如何用docker容器部署nuxt3项目

Nuxt3是基于Vue3的一个开发框架,基于服务器端渲染SSR,可以更加方便的用于Vue的SEO优化。 Nuxt 3.0 新特性包括: 更轻量:以现代浏览器为目标的服务器部署和客户端产物最多可缩小 75 倍 更快:基于 nitro 提供动态代码…

CentOS 查找未挂载磁盘,格式化后并挂载

1.查看当前Linux服务器磁盘分区 1 # df -Th 2.查看当前服务器硬盘 1 # fdisk -l 图中磁盘 /dev/sdb为未挂载的磁盘(磁盘符号依次为sda、sdb、sdc……) 后面以sdb为例 3.磁盘分区 fdisk /dev/sdb (依次键入) n 回车 p 回车 1 回车 (此处…

总结822

学习目标: 4月(复习完高数18讲内容,背诵23篇短文,熟词僻义300词基础词) 学习内容: 暴力英语:早上背了《the method of learning 》,之后默写了一遍,还不是很熟练。抄写了前10篇的短…

BVH ==>SMPL for Unified

BVH to SMPL 将BVH文件转换为SMPL模型,需要使用专业的3D建模软件。 例如 Blender或Maya。 Steps 导入BVH文件到建模软件中。将BVH文件应用于一个适当的人体模型。将人体模型转换为SMPL模型。导出SMPL模型文件。 Realization https://github.com/Meshcapade/SMPL_b…

软件质量保证与软件测试复习笔记(第一周总体介绍+黑盒测试详细)

第一周 2.23 (总体性介绍) 软件测试的定义 常用术语解释 错误 缺陷 故障 失效 测试和测试用例、测试过程 出现软件缺陷的原因 软件开发的主要环节 测试过程的生命周期模型 软件测试的本质是针对要测试的内容确定一组测试用例 测试用…

电脑无法正常关机?点了关机又会自动重启

“真木马”相信不少朋友遇到过电脑关机自动重启现象,一点关机,但随后电脑有会进入重启状态,就是一直不会停,属实是很难崩。 目录 一、问题症状 二、问题原因 三、解决方案 方法一: 1.关闭系统发生错误时电脑自动…

生命在于折腾——PicGo+Minio+Typora图床搭建

好久没更新了,前段时间太忙了,还有些摆烂,所以,嗯,懂得都懂,写这篇博客前一天我还在椅子上坐了两个小时,思考人生的意义。 话不多说,开始吧。 一、起因 因为好久没管过博客&#…

显存不够用?一种大模型加载时节约一半显存的方法

Loading huge PyTorch models with linear memory consumption 本文主要介绍了一种用于加载巨大模型权重时节约接近一半显存的方法 首先,创建一个模型: import torch from torch import nnclass BoringModel(nn.Sequential):def __init__(self):super().__init__…