一种非时态表格式数据综合生成器性能的测试框架
sdgym的Python项目详细描述
麻省理工学院从数据到人工智能实验室的开源项目。
SDGym-合成数据健身房
- 许可证:麻省理工学院
- 文档:https://dai-lab.github.io/sdgym/" rel="nofollow">https://dai-lab.github.io/sdgym/
- 主页:https://github.com/dai-lab/sdgym" rel="nofollow">https://github.com/dai-lab/sdgym
概述
synthetic data gym(sdgym)是一个测试合成数据生成器性能的框架 对于非时态表格数据。SDGym基于一篇论文,该论文使用条件建模表格数据 gan,该项目是人工智能数据的一部分。 麻省理工学院的实验室
合成器的基准测试是由 合成器。然后,对每一对真实和合成数据进行多重评分。
什么是合成器功能?
为了使用sdgym,您需要一个合成器功能。 这是一个函数,它接受一个包含真实数据的numpy矩阵作为输入,并输出另一个numpy 用合成数据填充相同形状的矩阵。
此外,除了实际数据之外,还有一些其他变量通知列内容 将被传递,这意味着函数的确切签名如下:
defmy_synthesizer_function(real_data:numpy.ndarray,categorical_columns:list,ordinal_columns:list)->syntehtesized_data:numpy.ndarray
如果您的合成器实现了不同的接口,您可以将其包装成这样的函数:
defmy_synthesizer_function(real_data,categorical_columns,ordinal_columns):# ...do all necessary steps here...returnsynthesized_data
此函数应包含使用 合成器,并调用它根据实际数据生成新的合成数据,即 正在通过。
你的合成器应该使用什么数据?
如前一节所述,sdgym的主要输入是 基准化的,预期是一个函数,它具有作为唯一输入和输出的 数据:
合成器功能的输入应为:
真实数据
:2dnumpy.ndarray
合成器将尝试模拟真实数据。分类列
:a列表
包含应考虑的任何列的索引 根据类型独立分类。序数列
:a列表
包含应视为 序数值。
输出应该是单个2d 用于基准测试的所有数据集都可以在sgdym s3 bucket中找到。
以 为了以相同的格式加载这些数据集,它们将被传递给合成器函数
您可以使用sdgym.loadatasetnumpy.ndarray
与真实数据的形状完全相同
矩阵<<P>
函数传递要加载的数据集的名称。基准数据集
.npz
numpy矩阵存档和包含信息的.json
元数据文件的形式
关于数据集结构及其列。
在本例中,我们将加载成人
数据集:
fromsdgymimportload_datasetdata,categorical_columns,ordinal_columns=load_dataset('adult')
这将返回一个numpy矩阵,其中包含将传递给合成器函数的数据, 以及分类列和序号列的索引列表:
>>>dataarray([[2.70000e+01,0.00000e+00,1.77119e+05,...,4.40000e+01,0.00000e+00,0.00000e+00],[2.70000e+01,0.00000e+00,2.16481e+05,...,4.00000e+01,0.00000e+00,0.00000e+00],[2.50000e+01,0.00000e+00,2.56263e+05,...,4.00000e+01,0.00000e+00,0.00000e+00],...,[4.50000e+01,0.00000e+00,2.07540e+05,...,4.00000e+01,0.00000e+00,1.00000e+00],[5.10000e+01,0.00000e+00,1.80807e+05,...,4.00000e+01,0.00000e+00,0.00000e+00],[6.10000e+01,4.00000e+00,1.86451e+05,...,4.00000e+01,0.00000e+00,1.00000e+00]],dtype=float32)>>>categorical_columns[1,5,6,7,8,9,13,14]>>>ordinal_columns[3]
演示合成器
为了开始使用基准测试工具,已经包含了一些演示合成器 在图书馆里。
这些合成器是可以从sdgym.synthesizers
模块导入的类,并且
以下方法:
fit
:在数据上匹配合成器。需要以下参数:数据(numpy.ndarray)
:二维numpy矩阵,包含要学习的实际数据。分类列(列表或元组)
:数据集中分类列的索引列表。序号列(列表或元组)
:数据集中序号列的索引列表。
sample
:生成与原始数据集相似的新数据。需要以下参数:n_samples(int)
:要生成的样本数。
fit_sample
:适合数据集上的合成器,然后采样数据集中的所有行 原始数据集。它需要与fit
方法相同的参数,并且可以直接 传递到基准
函数以评估合成器性能。
有关如何使用它们的完整示例,请参见下面的"用法"部分。
安装
要求
sdgym已经在python 3.5和3.6上开发和测试
此外,尽管不是严格要求,但使用avirtualenv 强烈建议使用,以避免干扰系统中安装的其他软件 在运行sdgym的地方。
以下是使用python3.6为sdgym创建virtualenv所需的最少命令:
pip install virtualenv virtualenv -p $(which python3.6) sdgym-venv
之后,必须执行此命令才能激活virtualenv:
source sdgym-venv/bin/activate
记住每次启动一个新的控制台来处理sdgym时都要执行它!
使用PIP安装
创建并激活virtualenv之后,我们建议使用 pip以便安装sdgym:
pip install sdgym
这将从pypi中拉取并安装最新的稳定版本。
从源安装
或者,激活virtualenv后,可以克隆存储库并从
通过在stable
分支上运行make install
进行源代码:
git clone git@github.com:DAI-Lab/SDGym.git
cd SDGym
git checkout stable
make install
安装用于开发
如果您想对项目做出贡献,则需要执行一些步骤来准备项目 为了发展。
首先,请转到项目的github页面 并通过单击 页面的右上角。
然后,克隆fork并从master创建一个具有描述性名称的分支,该名称包括 您要处理的问题的编号:
git clone git@github.com:{your username}/SDGym.git cd SDGym git branch issue-xx-cool-new-feature master git checkout issue-xx-cool-new-feature
最后,使用以下命令安装项目,该命令将安装一些 代码行和测试的依赖关系。
defmy_synthesizer_function(real_data:numpy.ndarray,categorical_columns:list,ordinal_columns:list)->syntehtesized_data:numpy.ndarray0
确保在开发时定期使用它们,方法是运行命令make lint
和
进行测试
为了能够对我们从SDCype中获取所有特性,用C++编写的一些依赖项需要 编译。
为此:
- 执行: < > >
- 从sdgym.synthesizers导入合成器类
< > >
defmy_synthesizer_function(real_data:numpy.ndarray,categorical_columns:list,ordinal_columns:list)->syntehtesized_data:numpy.ndarray
5- 创建合成器的实例,传递任何需要的参数。在这种情况下,我们将使用 可以在没有初始化参数的情况下实例化的独立合成器: < > >
- 加载一些数据以适合您的合成器。在这种情况下,我们将加载
成人
数据集: < > > - 调用其
fit
方法传递数据以及分类列和顺序列的列表: < > > - 调用其
sample
方法,传递要采样的行数: < > > - 创建合成器实例: < > >
- 将实例的
fit_sample
方法传递给benchmark
函数作为 合成器功能: < > >
defmy_synthesizer_function(real_data:numpy.ndarray,categorical_columns:list,ordinal_columns:list)->syntehtesized_data:numpy.ndarray
6fromsdgymimportload_datasetdata,categorical_columns,ordinal_columns=load_dataset('adult')
defmy_synthesizer_function(real_data:numpy.ndarray,categorical_columns:list,ordinal_columns:list)->syntehtesized_data:numpy.ndarray
8defmy_synthesizer_function(real_data:numpy.ndarray,categorical_columns:list,ordinal_columns:list)->syntehtesized_data:numpy.ndarray
9这将返回一个包含与原始数据相同列的sampeld数据的numpy矩阵,并且 我们要求的行数:
defmy_synthesizer_function(real_data,categorical_columns,ordinal_columns):# ...do all necessary steps here...returnsynthesized_data
0对演示合成器进行基准测试
简单地评估任何演示合成器的性能:
defmy_synthesizer_function(real_data:numpy.ndarray,categorical_columns:list,ordinal_columns:list)->syntehtesized_data:numpy.ndarray
6defmy_synthesizer_function(real_data,categorical_columns,ordinal_columns):# ...do all necessary steps here...returnsynthesized_data
2接下来是什么?< >
有关sdgym及其所有可能性和功能的详细信息,请查看 文档站点
在那里你可以了解更多 如何为sdgym做出贡献 以帮助我们开发新功能或新创意。
相关项目
SDV
对于synthetic data vault,sdv是 在hdi项目下合成开发中的数据。 sdv允许您使用copulas(一个简单的api)轻松地建模和采样关系数据集。 其他功能包括个人身份信息的匿名化(PII)和保存 采样记录上的关系完整性。
tgan
tgan是一个基于gan的表格数据合成模型。 它也是由麻省理工学院的人工智能实验室数据开发的。 积极发展。
历史记录
V0.1.0-2019-08-07
pypi的第一个版本
推荐PyPI第三方库
defmy_synthesizer_function(real_data:numpy.ndarray,categorical_columns:list,ordinal_columns:list)->syntehtesized_data:numpy.ndarray1
defmy_synthesizer_function(real_data:numpy.ndarray,categorical_columns:list,ordinal_columns:list)->syntehtesized_data:numpy.ndarray2
用法
基准
要使用sdgym基准,只需导入并调用sdgym.benchmark
将合成器函数传递给它的函数:
defmy_synthesizer_function(real_data:numpy.ndarray,categorical_columns:list,ordinal_columns:list)->syntehtesized_data:numpy.ndarray3
基准
函数的输出将是包含所有分数的pd.dataframe
由不同的评估者计算:
defmy_synthesizer_function(real_data:numpy.ndarray,categorical_columns:list,ordinal_columns:list)->syntehtesized_data:numpy.ndarray4
使用演示合成器
要使用sdgym中包含的合成器类,需要执行以下步骤: