当前位置: 首页 > news >正文

揭示CTGAN的潜力:利用生成AI进行合成数据

推荐:使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景

我们都知道,GAN在生成非结构化合成数据(如图像和文本)方面越来越受欢迎。然而,在使用GAN生成合成表格数据方面所做的工作很少。合成数据具有许多好处,包括其在机器学习应用程序、数据隐私、数据分析和数据增强中的使用。只有少数模型可用于生成合成表格数据,CTGAN(条件表格生成对抗网络)就是其中之一。与其他 GAN 一样,它使用生成器和鉴别器神经网络来创建与真实数据具有相似统计属性的合成数据。CTGAN可以保留真实数据的底层结构,包括列之间的相关性。CTGAN的额外好处包括通过特定于模式的规范化来增强训练过程,一些架构更改,以及通过使用条件生成器和采样训练来解决数据不平衡问题。

在这篇博文中,我使用CTGAN根据从Kaggle收集的信用分析数据集生成合成数据。

CTGAN的优点

  • 生成与实际数据具有类似统计属性的合成表格数据,包括不同列之间的相关性。
  • 保留真实数据的底层结构。
  • CTGAN生成的合成数据可用于各种应用,例如数据增强,数据隐私和数据分析。
  • 可以处理连续、离散和分类数据。

CTGAN的缺点

  • CTGAN需要大量的真实表格数据来训练模型并生成与真实数据具有相似统计属性的合成数据。
  • CTGAN是计算密集型的,可能需要大量的计算资源。
  • CTGAN生成的合成数据的质量可能会有所不同,具体取决于用于训练模型的真实数据的质量。

调整CTGAN

与所有其他机器学习模型一样,CTGAN在调优时表现更好。在调整CTGAN时需要考虑多个参数。但是,对于此演示,我使用了“ctgan 库”附带的所有默认参数:

  • 纪元:生成器和鉴别器网络在数据集上训练的次数。
  • 学习率:模型在训练期间调整权重的速率。
  • 批量大小:每次训练迭代中使用的样本数。
  • 生成器和鉴别器网络大小。
  • 优化算法的选择。

CTGAN还考虑了超参数,例如潜在空间的维数,生成器和判别器网络中的层数以及每层中使用的激活函数。参数和超参数的选择会影响生成的合成数据的性能和质量。

CTGAN的验证

CTGAN的验证是棘手的,因为它存在局限性,例如难以评估生成的合成数据的质量,特别是在涉及表格数据时。尽管有一些指标可用于评估真实数据和合成数据之间的相似性,但确定合成数据是否准确表示真实数据中的基本模式和关系仍然具有挑战性。此外,CTGAN容易受到过度拟合的影响,并且可以产生与训练数据过于相似的合成数据,这可能会限制它们泛化到新数据的能力。

一些常见的验证技术包括:

  • 统计测试:比较生成数据和真实数据的统计属性。例如,使用相关性分析、柯尔莫哥罗夫-斯米尔诺夫检验、安德森-达林检验和卡方检验等检验来比较生成的数据和真实数据的分布。
  • 可视化:通过绘制直方图、散点图或热图来可视化异同。
  • 应用程序测试:通过在实际应用程序中使用合成数据,查看其性能是否与真实数据相似。

个案研究

关于信用分析数据

信用分析数据包含连续和离散/分类格式的客户数据。出于演示目的,我通过删除具有 null 值的行并删除本演示不需要的几列来预处理数据。由于计算资源的限制,运行所有数据和所有列将需要大量的计算能力,而我没有。以下是连续变量和分类变量的列列表(离散值,如子变量计数 (CNT_CHINDREN) 被视为分类变量):

分类变量:

TARGET
NAME_CONTRACT_TYPE
CODE_GENDER
FLAG_OWN_CAR
FLAG_OWN_REALTY
CNT_CHILDREN

连续变量:

AMT_INCOME_TOTAL
AMT_CREDIT
AMT_ANNUITY
AMT_GOODS_PRICE

生成模型需要大量干净的数据来训练以获得更好的结果。但是,由于计算能力的限制,我从超过 10,000 行的真实数据中只选择了 9,993 行(正好是 300,000 行)进行本演示。虽然这个数字可能被认为相对较小,但对于本演示的目的来说应该足够了。

真实数据的位置:

Credit Analysis | Kaggle

生成的合成数据的位置:

  • CTGAN的综合信用分析数据(Kaggle)
  • CTGAN生成的合成表格数据集(研究门)
  • DOI: 10.13140/RG.2.2.23275.82728

三十三


信用分析数据 |图片来源:作者

结果

我生成了 10k(确切地说是 9997)合成数据点,并将它们与真实数据进行了比较。结果看起来不错,尽管仍有改进的潜力。在我的分析中,我使用了默认参数,其中“relu”作为激活函数和 3000 个 epoch。增加纪元的数量应该可以更好地生成类似真实的合成数据。生成器和鉴别器损失看起来也不错,损耗越低,表示合成数据和真实数据之间的相似性越近:

三十三


发生器和鉴别器损耗 |图片来源:作者

绝对对数平均值和标准差图中沿对角线的点表示生成的数据质量良好。

三十三


数值数据的绝对对数平均值和标准差 |图片来源:作者

下图中连续列的累积总和并不完全重叠,但它们很接近,这表明合成数据的生成良好且没有过度拟合。分类/离散数据的重叠表明生成的合成数据接近真实。进一步的统计分析见下图:
 

三十三


每个要素的累计总和 |图片来源:作者

三十三


功能分布|图片来源:作者

三十三


特征分布 |图片来源:作者

三十三


主成分分析 |图片来源:作者

以下关联图显示了变量之间的明显相关性。重要的是要注意,即使经过彻底的微调,真实数据和合成数据之间的属性也可能存在差异。这些差异实际上是有益的,因为它们可能会揭示数据集中可用于创建新解决方案的隐藏属性。据观察,增加纪元数可以提高合成数据的质量。
 

三十三


变量之间的相关性(真实数据) |图片来源:作者

三十三


变量之间的相关性(合成数据) |图片来源:作者

样本数据和实际数据的汇总统计似乎也令人满意。

三十三


真实数据和合成数据的汇总统计 |图片来源:作者

Python代码

# Install CTGAN
!pip install ctgan# Install table evaluator to analyze generated synthetic data
!pip install table_evaluator
# Import libraries
import torch
import pandas as pd
import seaborn as sns
import torch.nn as nnfrom ctgan import CTGAN
from ctgan.synthesizers.ctgan import Generator# Import training Data
data = pd.read_csv("./application_data_edited_2.csv")# Declare Categorical Columns
categorical_features = ["TARGET","NAME_CONTRACT_TYPE","CODE_GENDER","FLAG_OWN_CAR","FLAG_OWN_REALTY","CNT_CHILDREN",
]# Declare Continuous Columns
continuous_cols = ["AMT_INCOME_TOTAL", "AMT_CREDIT", "AMT_ANNUITY", "AMT_GOODS_PRICE"]# Train Model
from ctgan import CTGANctgan = CTGAN(verbose=True)
ctgan.fit(data, categorical_features, epochs=100000)# Generate synthetic_data
synthetic_data = ctgan.sample(10000)# Analyze Synthetic Data
from table_evaluator import TableEvaluatorprint(data.shape, synthetic_data.shape)
table_evaluator = TableEvaluator(data, synthetic_data, cat_cols=categorical_features)
table_evaluator.visual_evaluation()
# compute the correlation matrix
corr = synthetic_data.corr()# plot the heatmap
sns.heatmap(corr, annot=True, cmap="coolwarm")# show summary statistics SYNTHETIC DATA
summary = synthetic_data.describe()
print(summary)

结论

CTGAN的训练过程有望收敛到生成的合成数据与真实数据无法区分的程度。然而,在现实中,不能保证趋同。有几个因素会影响CTGAN的收敛性,包括超参数的选择、数据的复杂性和模型的架构。此外,训练过程的不稳定性可能导致模式崩溃,其中生成器仅生成一组有限的相似样本,而不是探索数据分布的全部多样性。

原文链接:揭示CTGAN的潜力:利用生成AI进行合成数据 (mvrlink.com)

相关文章:

揭示CTGAN的潜力:利用生成AI进行合成数据

推荐:使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 我们都知道,GAN在生成非结构化合成数据(如图像和文本)方面越来越受欢迎。然而,在使用GAN生成合成表格数据方面所做的工作很少。合成数据具有许多好处&#x…...

GitHub中readme.md文件的编辑和使用

GitHub中readme.md文件的编辑和使用 | YuuiChungs BlogGitHub - guodongxiaren/README: README文件语法解读,即Github Flavored Markdown语法介绍...

Python 四舍五入到最接近的十位

本篇文章将讨论使用 Python 的 ceil() 函数将数字四舍五入到最接近的十。 Python 整数到最接近的十 Python 具有三个内置函数 round()、floor() 和 ceil(),可用于对数字进行舍入。 ceil() 函数属于数学模块,用于将浮点数舍入为大于或等于给定数字的最接…...

Unity限制在一个范围内移动

Unity限制在一个范围内移动 这个例子中,我们学习Vector3.ClampMagnitude的用法,限制小球在范围内移动。 在地图上放了一个小球,让他移动,但是不想让他掉下去,限制在一个球星范围内,就好像绳子拴住了一样&…...

dji uav建图导航系列(一)建图

文章目录 1、uav + rplidir雷达1.2、思岚激光雷达1.3、dji uav的launch文件2、cartographer激光建图2.1、启动文件2.2、config修改2.3、建图过程3、融合odom+laser建图1、uav + rplidir雷达 思岚激光雷达frame为base_laser_link, 无人机frame为base_footprint。 文件uav_lid…...

AAAI论文阅读

文章目录 Open-Vocabulary Multi-Label Classifcation via Multi-Modal Knowledge Transfer——知识蒸馏的范畴Med-EASi: Finely Annotated Dataset and Models for Controllable Simplifcation of Medical Texts——医学领域数据集构建“Nothing Abnormal”: Disambiguating M…...

填补5G物联一张网,美格智能快速推进RedCap商用落地

自5G R17版本标准冻结以来,RedCap一直引人注目。2023年更是5G RedCap突破性发展的一年,从首款5G RedCap调制解调器及射频系统——骁龙X35发布,到国内四大运营商发布RedCap技术白皮书,芯片厂商、模组厂商、运营商及终端企业都在积极…...

服务器杂七杂八的知识/常识归纳(不断更新)

一.pID与端口号不一样吗? pID(Process ID,进程标识符)和端口号是不同的概念。 pID是操作系统中用来唯一标识一个正在运行的进程的数字。每个正在运行的进程都会被分配一个唯一的pID,它可以用来追踪和管理进程。 而端口号是在网…...

掌握Java排序算法:实现主流排序方法与性能对比

一,C语言,主流的排序方法介绍 当谈论主流的排序方法时,通常指的是在实际应用中表现优秀且被广泛采用的排序算法。以下是常见的主流排序方法及其介绍、时间复杂度、空间复杂度和简单的C语言代码实现: 冒泡排序(Bubble S…...

jdk17 SpringBoot JPA集成多数据库

switchRegion(切换地区)功能, 客户端可手动切换地区 , 查询不同的数据库, 后台根据地区切换数据库, 请求头添加region的key 配置类 import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; im…...

vue 新学习 06 js的prototype ,export暴露,vue组件,一个重要的内置关系

01 在js中: 原型链 注意:构造函数.prototype实例化对象.__proto__,都是指向函数的原型。 export: -export用于对外输出本模块(一个文件可以理解为一个模块)变量的接口 -import用于在一个模块中加载另一个…...

冠达管理:“高温超导”不是“室温超导”,5天4板百利电气再次澄清

短短半个月,“室温超导”在惊喜、质疑间回转,但资本市场对“超导概念股”的炒作还在进行,8月7日室温超导概念持续疯涨。同花顺显现,到8月7日收盘,18只超导概念股中,有16只股票飘红。 广东研山私募证券投资&…...

CS 144 Lab Four 收尾 -- 网络交互全流程解析

CS 144 Lab Four 收尾 -- 网络交互全流程解析 引言Tun/Tap简介tcp_ipv4.cc文件配置信息初始化cs144实现的fd家族体系基于自定义fd体系进行数据读写的adapter适配器体系自定义socket体系自定义事件循环EventLoop模板类TCPSpongeSocket详解listen_and_accept方法_tcp_main方法_in…...

Linux面试专题

Linux面试专题 1 Linux中主要有哪几种内核锁?2 Linux 中的用户模式和内核模式是什么含意?3 怎样申请大块内核内存?4用户进程间通信主要哪几种方式?5通过伙伴系统申请内核内存的函数有哪些?6) Linux 虚拟文件系统的关键数据结构有哪些?(至少写出四个)7) 对文件或设备的操作…...

MySQL错误日志(Error Log)详解

错误日志(Error Log)是 MySQL 中最常用的一种日志,主要记录 MySQL 服务器启动和停止过程中的信息、服务器在运行过程中发生的故障和异常情况等。 作为初学者,要学会利用错误日志来定位问题。下面介绍如何操作查看错误日志。 启动…...

Qt应用开发(基础篇)——LCD数值类 QLCDNumber

一、前言 QLCDNumber类继承于QFrame,QFrame继承于QWidget,是Qt的一个基础小部件。 QLCDNumber用来显示一个带有类似lcd数字的数字,适用于信号灯、跑步机、体温计、时钟、电表、水表、血压计等仪器类产品的数值显示。 QLCDNumber可以显示十进制…...

新版百度、百家号旋转验证码识别

昨天突然发现,百度旋转验证码发生了变化,导致使用老版本验证码训练出来的识别模型效果不佳。所有昨天花了一天时间完成了新版模型的训练。 老版本验证码 新版本验证码 新版的验证码感觉像是AI绘画随机生成的,还有随机阴影出现。 验证码识别…...

PMP考试每日一练(8月8日)

1、项目经理正在领导一个正在努力协作的多元文化团队。项目经理一开始将此视为团队建设的典型震荡阶段,但团队未能成功通过该阶段。结果,项目开始落后于进度。 项目经理在第一次发现这个问题时应该做哪两项工作?(选两个&#xff0…...

机器学习实战1-kNN最近邻算法

文章目录 机器学习基础机器学习的关键术语 k-近邻算法(KNN)准备:使用python导入数据实施kNN分类算法示例:使用kNN改进约会网站的配对效果准备数据:从文本文件中解析数据分析数据准备数据:归一化数值测试算法…...

【eNSP】静态路由

【eNSP】静态路由 原理网关路由表 实验根据图片连接模块配置路由器设备R1R2R3R4 配置PC的IP地址、掩码、网关PC1PC2PC3 配置静态路由查看路由表R1R2R3R4测试能否通信 原理 网关 网关与路由器地址相同,一般路由地址为.1或.254。 网关是当电脑发送的数据的目标IP不在…...

算法训练Day42|1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

背包类别 01背包:有n种物品,每种物品只有一个. 完全背包:有n种物品,每种物品有无限个. 多重背包:有n种物品,每种物品个数各不相同. 区别:仅仅体现在物品个数上的不同而已。 确定dp[i][j]数组的…...

HBase-组成

client 读写请求HMaster 管理元数据监控region是否需要进行负载均衡,故障转移和region的拆分RegionServer 负责数据cell的处理,例如写入数据put,查询数据get等 拆分合并Region的实际执行者,由Master监控,由regionServ…...

第一部分:领域中的基本概念

目录 一、什么是模型 二、什么是领域 三、什么是领域模型 四、什么是领域建模 一、什么是模型 模型是一种简化、它是对现实的解释,它与解决问题密切相关的方面抽象出来,而忽略无关细节。 二、什么是领域 领域是指某一专业或事物方面范围的涵盖。比如…...

react使用ref调用子组件的方法

Class类组件 import React, { useRef } from react;const MyComponent () > {const myComponentRef useRef(null);const handleClick () > {// 调用MyComponent组件的方法myComponentRef.current.myMethod();};return (<div><MyComponent ref{myComponentRe…...

JVM面试突击班2

JVM面试突击班2 对象被判定为不可达对象之后就“死”了吗 对象的生命周期 创建阶段 &#xff08;1&#xff09;为对象分配存储空间 &#xff08;2&#xff09;开始构造对象 &#xff08;3&#xff09;从超类到子类对static成员进行初始化 &#xff08;4&#xff09;超类成…...

【80天学习完《深入理解计算机系统》】第二天 2.2 整数的表示【有符号数,无符号数,符号数的扩展,有无符号数的转变】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…...

基于 CentOS 7 构建 LVS-DR 群集以及配置nginx负载均衡

目录 一、基于 CentOS 7 构建 LVS-DR 群集 1、前期准备 1、关闭防火墙 2、安装ifconfig 3、准备四台虚拟机 2、在DS上 2.1、配置LVS虚拟IP 2.2、手工执行配置添加LVS服务并增加两台RS 2.3、查看配置 3、在RS端&#xff08;第三台、第四台&#xff09; 上 3.1、配置W…...

golang trace view 视图详解

大家好&#xff0c;我是蓝胖子&#xff0c;在golang中可以使用go pprof的工具对golang程序进行性能分析&#xff0c;其中通过go trace 命令生成的trace view视图对于我们分析系统延迟十分有帮助&#xff0c;鉴于当前对trace view视图的介绍还是很少&#xff0c;在粗略的看过tra…...

zju代码题:4-6

一 分段函数算水费 #include <stdio.h>int main() {/*** 定义两个* 定义浮点型变量* y:水费* x:用水的吨数* */double x, y;printf("Enter x(x>=0):\n"...

数据链路层概述

数据传输过程如下&#xff1a; 数据包按上述过程传输&#xff0c;详见&#xff08;计算机网络概述三&#xff09;。在分析数据链路层时可以假象成其沿着水平传播。 这三段链路层的传播方式可能会有所不同。 基本概念&#xff1a; 链路&#xff1a;指一个节点到相邻节点的一段物…...

服装品牌建设网站的目的/管理培训

引论 &#xff1a; 如果你不知道在解决某个特定问题时需要多少个对象&#xff0c;或者它们将存活多久&#xff0c;那么你就不可能知道如何存储这些对象。你如何才能知道需要多少空间来创建这些对象呢&#xff1f;答案是你不可能知道&#xff0c;因为这类信息只有在运行时刻才能…...

织梦古典网站模板/最成功的网络营销案例

一、MySQL引擎介绍 数据库存储引擎是数据库重要的存储机制&#xff0c;数据库管理系统主要是使用数据引擎进行创建、查询、更新和删除数据。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能&#xff0c;使用不同的存储引擎&#xff0c;还可以获得特定的功能。在面…...

网站建设推广营销策划/免费的app推广平台

原文链接&#xff1a;https://blog.csdn.net/forezp/article/details/80098675 本系列教程翻译于docker文档&#xff0c;文档地址&#xff1a;https://docs.docker.com/ &#xff0c;由于某些原因,docker官方文档通常都是打不开&#xff0c;如果打不开&#xff0c;安装完docker…...

遵义住房和城乡建设厅网站/seo工具大全

需求在网页中启动本地应用程序并传递参数实现利用URL Protocol实现1、URL Protocol格式&#xff0c;如下&#xff1a;使用记事本输入上述内容&#xff0c;修改其中的协议名称、应用程序路径&#xff0c;启动参数&#xff0c;并保存成reg文件。点击执行保存的reg文件&#xff0c…...

建设一个网站的工作方案/关键词优化平台有哪些

刚才安装notebook插件jupyter_contrib_nbextensions&#xff0c;搜了很多教程都没有作用。直到用了这个命令&#xff0c;一行解决。 pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install 打开打开 Jupyter Notebook&#xff0c;可以看到…...

phpcms获取网站名称/口碑营销的方法

线性表一般分为顺序结构和链式结构。 顺序表里面元素的地址是连续的&#xff0c;如数组&#xff1b; 链表里面节点的地址不是连续的&#xff0c;是通过指针连起来的&#xff0c;如单链表&#xff1b; 顺序表和链表结构各自的优缺点&#xff1a;&#xff08;引自百度知道&#x…...