sunchang0124/dp_cgans

GitHub: sunchang0124/dp_cgans

结合差分隐私与条件生成对抗网络的表格与 RDF 合成数据生成库。

Stars: 92 | Forks: 28

# 👯 DP-CGANS (差分隐私 - 条件生成对抗网络) [![PyPi Shield](https://img.shields.io/pypi/v/dp-cgans)](https://pypi.org/project/dp-cgans/) [![Py versions](https://img.shields.io/pypi/pyversions/dp-cgans)](https://pypi.org/project/dp-cgans/) [![Test package](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/23fa5a5317225047.svg)](https://github.com/sunchang0124/dp_cgans/actions/workflows/test.yml) [![Publish package](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/a9a63b462c225050.svg)](https://github.com/sunchang0124/dp_cgans/actions/workflows/publish.yml) **摘要**:本仓库展示了一个结合差分隐私技术的用于表格数据(和 RDF 数据)的条件生成对抗网络。我们的预印本出版物:[Generating synthetic personal health data using conditional generative adversarial networks combining with differential privacy](https://doi.org/10.1016/j.jbi.2023.104404)。 **作者**:Chang Sun,马斯特里赫特大学数据科学研究所 **开始日期**:2021 年 11 月 **状态**:开发中 **注**:“站在巨人的肩膀上”。本仓库受到了来自 [Synthetic Data Vault (SDV)](https://github.com/sdv-dev/SDV) 的 [CTGAN](https://github.com/sdv-dev/CTGAN)、[Tensorflow Privacy](https://github.com/tensorflow/privacy) 和 [RdfPdans](https://github.com/cadmiumkitty/rdfpandas) 等出色工作的启发。非常感谢他们分享的想法和实现,公开代码以及编写良好的文档。更多相关工作可在下方的参考文献中找到。 该包扩展自 SDV (https://github.com/sdv-dev/SDV)、CTGAN (https://github.com/sdv-dev/CTGAN) 以及 GANs 中的差分隐私 (https://github.com/civisanalytics/dpwgan)。作者修改了条件矩阵和代价函数,以强调变量之间的关系。主要更改位于 ctgan/synthesizers/ctgan.py ../data_sampler.py ../data_transformer.py ## 📥️ 安装 你需要 Python >=3.8+ 且 <=3.11。sdv ==1.6.0,以及 rdt==1.9.0 ``` pip install dp-cgans ``` ## 🪄 用法 ### ⌨️ 作为命令行界面使用 在使用 pip 安装 `dp-cgans` 后,你可以轻松地通过终端为文件生成合成数据。 为了快速运行我们的示例,你可以下载 [示例数据](https://raw.githubusercontent.com/sunchang0124/dp_cgans/main/resources/example_tabular_data_UCIAdult.csv): ``` wget https://raw.githubusercontent.com/sunchang0124/dp_cgans/main/resources/example_tabular_data_UCIAdult.csv ``` 然后运行 `dp-cgans`: ``` dp-cgans gen example_tabular_data_UCIAdult.csv --epochs 100 --output out.csv --gen-size 100 ``` 通过以下命令获取生成合成数据的可用选项的完整概览: ``` dp-cgans gen --help ``` ### 🐍 配合 Python 使用 该库也可以直接在 Python 脚本中使用 如果你的输入是表格数据(例如 csv): ``` from dp_cgans import DP_CGAN import pandas as pd import time tabular_data=pd.read_csv("../resources/example_tabular_data_UCIAdult.csv") ### 添加您的预处理(如果需要) for col in tabular_data.columns: tabular_data[col] = pd.to_numeric(tabular_data[col], errors='ignore', downcast='integer') for col in tabular_data.columns: if tabular_data[col].nunique() < 10: tabular_data[col] = tabular_data[col].astype('object') # 配置模型超参数 model = DP_CGAN( epochs=500, # number of training epochs batch_size=100, # the size of each batch log_frequency=True, verbose=True, generator_dim=(128, 128, 128), discriminator_dim=(128, 128, 128), generator_lr=2e-4, discriminator_lr=2e-4, discriminator_steps=10, private=False, ) start_time = time.time() print("Start training the model: ") model.fit(tabular_data) end_time = time.time() elapsed_time = end_time - start_time print("Training model time ", elapsed_time) print("Saving the trained generator...") model.save("generator.pkl") # print("load the trained file.") # loaded_model=DP_CGAN.load("PATH_TO_MODEL") # 生成 100 行合成数据 syn_data = model.sample(100) syn_data.to_csv("syn_data_file.csv",index=None) ```