乐趣区

关于ai开发:揭示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 行)进行本演示。尽管这个数字可能被认为绝对较小,但对于本演示的目标来说应该足够了。

实在数据的地位:
https://www.kaggle.com/datasets/kapoorshivam/credit-analysis

生成的合成数据的地位:

  • 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 nn

from 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 CTGAN

ctgan = 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 TableEvaluator

print(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 进行合成数据

退出移动版