合成表格数据
使用 CTGAN 生成表格合成数据:
现实世界中的领域通常由表格数据描述,即可以结构化并组织成表格格式的数据,其中特征/变量以列表示,而观测值对应于行。
此外,现实世界的数据通常包含数值和分类特征。数值特征编码定量值,而分类特征表示定性测量。
CTGAN 专门设计用于处理表格数据集带来的挑战,处理混合(数值和分类)数据:
- 📑 论文: 使用条件 GAN 建模表格数据
以下是如何使用 Adult Census Income 数据集通过 CTGAN 合成表格数据的示例:
from pmlb import fetch_data
from ydata_synthetic.synthesizers.regular import RegularSynthesizer
from ydata_synthetic.synthesizers import ModelParameters, TrainParameters
# Load data and define the data processor parameters
data = fetch_data('adult')
num_cols = ['age', 'fnlwgt', 'capital-gain', 'capital-loss', 'hours-per-week']
cat_cols = ['workclass','education', 'education-num', 'marital-status', 'occupation', 'relationship', 'race', 'sex',
'native-country', 'target']
# Defining the training parameters
batch_size = 500
epochs = 500+1
learning_rate = 2e-4
beta_1 = 0.5
beta_2 = 0.9
ctgan_args = ModelParameters(batch_size=batch_size,
lr=learning_rate,
betas=(beta_1, beta_2))
train_args = TrainParameters(epochs=epochs)
synth = RegularSynthesizer(modelname='ctgan', model_parameters=ctgan_args)
synth.fit(data=data, train_arguments=train_args, num_cols=num_cols, cat_cols=cat_cols)
synth.save('adult_ctgan_model.pkl')
#########################################################
# Loading and sampling from a trained synthesizer #
#########################################################
synth = RegularSynthesizer.load('adult_ctgan_model.pkl')
synth_data = synth.sample(1000)
print(synth_data)
最佳实践与结果优化
生成最佳合成数据质量
如果您在确保 CTGAN 返回适用于您用例的合成数据质量方面遇到困难, 请尝试使用 YData Fabric 合成数据。 Fabric 合成数据生成在质量方面被认为是最佳的。 在此基准测试中了解更多信息。
CTGAN 与其他任何机器学习模型一样,需要在数据准备层面以及超参数调优方面进行优化。以下是一些最佳实践和提示,以提高您的合成数据质量:
-
理解您的数据: 在使用 CTGAN 之前,彻底了解原始数据集的特征和分布。 识别数据中的重要特征、相关性和模式。 利用 ydata-profiling 功能来自动化理解数据的过程。
-
数据预处理: 在训练 CTGAN 之前,清理和预处理数据以处理缺失值、异常值和其他异常。 标准化或归一化数值特征以确保一致的尺度。
-
特征工程: 创建额外的有意义特征,这些特征可以提高合成数据的质量。
-
优化模型参数: 尝试 CTGAN 的超参数,如 epochs、batch_size 和 gen_dim,以找到最适合您特定数据集的值。 微调 学习率 以获得更好的收敛性。
-
条件生成: 如果适用,利用 CTGAN 的条件生成能力,为某些特征指定条件。 调整条件机制以增强生成样本的相关性。
-
处理不平衡数据: 如果您的原始数据集不平衡,确保 CTGAN 有效地捕捉少数类的分布。 如有必要,调整采样策略。
-
使用更大的数据集: 尽可能在更大的数据集上训练 CTGAN,以捕捉更全面的底层数据分布表示。