合成表格数据的生成性对抗训练

tgan的Python项目详细描述


dai lab麻省理工学院从数据到人工智能实验室的开源项目。

pypi shieldtravis ci shield

生成性对抗训练,用于合成表格数据。

TGAN是一个表格数据综合器。它可以从真实数据中生成完全合成的数据。目前,TGAN可以 生成数值列和分类列。

  • 自由软件:麻省理工学院许可证
  • 文档:https://dai-lab.github.io/tgan" rel="nofollow">https://dai-lab.github.io/tgan
  • 主页:https://github.com/dai-lab/tgan" rel="nofollow">https://github.com/dai-lab/tgan

要求

巨蟒

tgan已经在python上开发并运行3.53.63.7

此外,尽管不是严格要求,但使用avirtualenv 强烈建议使用,以避免干扰系统中安装的其他软件,其中tgan 运行。

安装

安装tgan的最简单且推荐的方法是使用pip:

pip install tgan

或者,您也可以克隆存储库并从源安装它

git clone git@github.com:DAI-Lab/TGAN.git
cd TGAN
make install

对于开发,您可以使用make install development来安装所有必需的 测试和代码linting的依赖项。

数据格式

输入格式

为了能够采集新的合成数据,首先需要将tgan拟合到 现有数据。

拟合过程的输入数据必须是满足以下条件的单个表 规则:

  • 没有丢失的值。
  • 具有intfloatstrbool类型的列
  • 每列只包含一种类型的数据。

这种表格的一个例子是:

<表><广告>str_列浮动列 整数列布尔列< /广告><正文>"绿色"0.15正确"蓝色"7.25错误"红色"10.00错误"黄色"5.50正确

如您所见,此表包含4列:str_columnfloat_columnint_columnbool_column,每个列都是支持的值类型的示例。同时也要注意 任何行都不缺少值。

注意:必须正确识别哪些列是数值列,这意味着 它们表示一个数量级,哪些是分类的,如在 数据列、数字列和分类列的处理方式将有所不同。

输出格式

tgan的输出是一个采样数据表,其列与输入表和 按要求多行。

演示数据集

tgan包含一些用于开发或演示的数据集。这些数据集 来自UCI机器学习库 根据 输入格式部分。

这些数据集可以从 hdi项目tgan aws s3 bucket

人口普查数据集

此数据集包含一个表,其中包含来自人口普查的信息,标记为 年收入是否大于50000美元。它是一个csv文件,包含 199522行41列。在这41列中,只有7列被确定为连续列。在 tgan此数据集称为人口普查

封面类型

此数据集包含一个表,其中包含标记为 福尔斯特封面类型。它是一个csv文件,包含465588行和55列。从这些 55列,10列为连续列。在tgan中,这个数据集叫做covertype。

快速启动

在这个简短的教程中,我们将指导您完成一系列步骤,帮助您获得 从最基本的tgan用法开始,以便从给定的数据集生成样本。

注意:以下示例也包含在ajupyter笔记本中, 您可以在virtualenv中运行以下命令来执行:

pip install jupyter
jupyter notebook examples/Usage_Example.ipynb
<H2>1。加载数据

第一步是加载我们用来安装tgan的数据。为了做到这一点,我们将首先 导入函数tgan.data.load_data并用我们想要的数据集名称调用它 负荷:

在这种情况下,我们将加载人口普查数据集,我们将在后续步骤中使用它, 并获得两个对象:

  1. 数据,其中包含pandas.dataframe人口普查数据表 数据集已准备好用于模型。

  2. 连续列,它将包含带有连续列索引的列表。

  3. < > >
    >>> from tgan.data import load_demo_data
    >>> data, continuous_columns = load_demo_data('census')
    >>> data.head(3).T[:10]
                                  0                                     1                             2
    0                            73                                    58                            18
    1               Not in universe        Self-employed-not incorporated               Not in universe
    2                             0                                     4                             0
    3                             0                                    34                             0
    4          High school graduate            Some college but no degree                    10th grade
    5                             0                                     0                             0
    6               Not in universe                       Not in universe                   High school
    7                       Widowed                              Divorced                 Never married
    8   Not in universe or children                          Construction   Not in universe or children
    9               Not in universe   Precision production craft & repair               Not in universe
    
    >>> continuous_columns
    [0, 5, 16, 17, 18, 29, 38]
    
    
    <H2>2。创建tgan实例

    下一步是导入tgan并创建模型的实例。

    为此,我们需要导入tgan.model.tganModel类并用 连续列作为唯一参数。

    这将创建一个带有默认参数的tgan实例:

    >>> from tgan.model import TGANModel
    >>> tgan = TGANModel(continuous_columns)
    
    <H2>3。安装模型

    一旦有了tgan实例,就可以继续调用它的fit方法来传递数据 您以前加载过以便开始装配过程:

    >>> tgan.fit(data)
    

    此过程不会返回任何内容,但是,将在 屏幕:

    注意这取决于您运行的系统的性能以及所选的参数 对于车型,此步骤可能需要几个小时。

    <H2>4。新数据示例

    安装模型后,您可以通过调用sample tgan实例的方法,将所需的样本量传递给它:

    >>> num_samples = 1000
    >>> samples = tgan.sample(num_samples)
    >>> samples.head(3).T[:10]
                                             0                                     1                                   2
    0                                       12                                    27                                  56
    
    0                                       12                                    27                                  56
    1                          Not in universe        Self-employed-not incorporated                             Private
    2                                        0                                     4                                  35
    3                                        0                                    34                                  22
    4                                 Children            Some college but no degree          Some college but no degree
    5                                        0                                     0                                 500
    6                          Not in universe                       Not in universe                     Not in universe
    7                            Never married       Married-civilian spouse present     Married-civilian spouse present
    8              Not in universe or children                          Construction   Finance insurance and real estate
    9                          Not in universe   Precision production craft & repair      Adm support including clerical
    
    

    返回的对象samples是一个pandas.dataframe包含 与我们要求的输入数据和1000行格式相同。

    <H2>5。保存并加载模型

    在上面的台阶上我们看到安装过程可能需要很多时间,所以我们可能会 避免了我们想要的每一个样本。取而代之的是我们可以装一个模型, 保存它,并在每次我们想采样新数据时加载它。

    如果我们有一个合适的模型,我们可以通过调用它的save方法来保存它,这只需要 作为参数存储模型的路径。类似地,tganmodel.load允许加载 通过作为参数传递存储模型的路径而存储在磁盘上的模型。

    >>> model_path = 'models/mymodel.pkl'
    >>> tgan.save(model_path)
    Model saved successfully.
    

    记住,如果文件已经存在,tgan将避免覆盖它,除非 force=true参数被传递:

    >>> tgan.save(model_path)
    The indicated path already exists. Use `force=True` to overwrite.
    

    为此:

    pip install tgan
    
    0

    保存模型后,可以使用tgan model.load 方法:< > >

    pip install tgan
    
    1

    此时,我们可以使用此模型实例生成更多示例。

    加载自定义数据集

    在前面的步骤中,我们使用了一些演示数据,但是我们没有向您展示如何加载您自己的 数据集:

    为此,需要从数据集生成pandas.dataframe对象。如果你 数据集是一种csv格式,您可以使用pandas来执行此操作。读取csv并将路径传递给它 要加载的CSV文件。

    此外,您还需要创建列索引的0索引列表,将其视为连续的。

    例如,如果要加载本地csv文件path/to/my.csv,该文件具有连续列 它们的前4列,即索引[0,1,2,3],我们会这样做:

    pip install tgan
    
    2

    现在,您可以使用连续的列来创建一个tgan实例,并使用数据来适应 就像我们以前一样:

    pip install tgan
    
    3

    模型参数

    如果要更改tganmodel的默认行为,例如differentbatch\u sizenum-epochs,您可以在创建实例时通过传递不同的参数来完成此操作。

    模型一般行为

    • 连续的列(list[int],必需):要视为连续的列索引列表。
    • output(str,default=output):存储模型及其工件的路径。

    神经网络定义与拟合

    • 最大历元(int,默认值=100):训练期间要使用的历元数。
    • 每个历元的步数(int,默认值=10000):每个历元上要运行的步数。
    • 保存检查点(bool,默认值为true):是否在每个训练阶段后存储模型的检查点。
    • 恢复会话(bool,默认值为true):是否从最后一个检查点继续训练。
    • 批大小(int,默认值=200):在每个步骤为模型提供的批大小。
    • Z_dim(int,默认值=100):发电机噪声输入中的维数。
    • 噪声(float,默认值=0.2):添加到分类列的高斯噪声的上限。
    • l2norm(float,默认值=0.00001):计算损失时的l2调节系数。
    • 学习率(float,默认值=0.001):优化器的学习率。
    • num_gen_rnn(int,默认值=400):生成器中rnn单元中的单元数。
    • num-gen-u特性(int,默认值=100):发电机中完全连接层中的单元数。
    • num dis_layers(int,默认值=2):鉴别器中的层数。
    • num_dis_hidden(int,default=200):鉴别器中每层的单位数。
    • 优化器(str,default=adamoptimizer):要在fit期间使用的优化器的名称,可能 值为:[gradientdescentoptimizeradamoptimizeradadeltaoptimizer]。

    如果要创建与步骤2中创建的实例相同的实例,但传递 参数以明确的方式表示,这可以通过以下几行实现:

    pip install tgan
    
    4

    命令行界面

    我们包括一个命令行界面,允许用户访问tgan功能。仅限当前 支持一个操作。

    随机超参数搜索

    输入

    为了随机搜索给定数据集的最佳模型超参数,我们需要:

    • csv文件中的数据集,不缺少任何值,只包含boolstrintfloat并且只有一种列类型,如输入格式中指定的那样

    • 包含搜索配置的json文件。此配置应包含:

      • 名称:实验的名称。将创建具有此名称的文件夹。
      • num_random_search:超参数搜索中的迭代次数。
      • train_csv:包含数据集的csv文件的路径。
      • 连续列:列索引列表,从0开始,视为连续。
      • epoch:训练模型的epoch数。
      • 每个历元的步骤数:每个历元中的优化步骤数。
      • 采样行:评估模型时要采样的行数。

    您可以在examples/config.json中看到这样一个json文件的示例 可以下载并用作模板。

    执行

    一旦我们准备好一切,我们就可以使用以下命令启动随机超参数搜索:

    pip install tgan
    
    5

    其中第一个参数config.json是配置json的路径,第二个参数, results.json是存储执行摘要的路径。

    这将运行随机搜索,基本上包括以下步骤:

    1. 我们在测试和列车之间提取和分割数据。
    2. 我们随机选择要测试的超参数。
    3. 然后,对于每个超参数组合,我们使用真实的训练数据训练一个tgan模型。 生成一个综合训练数据集tsynth。
    4. 然后,我们在真实数据集和合成数据集上训练机器学习模型。
    5. 我们在真实的测试数据上使用这些经过训练的模型,看看它们的性能如何。
    6. < > >

      输出

      实验完成后,可以找到以下内容:

      • 一个json文件,在上面的例子中称为results.json,包含实验的摘要。 这个json将为每个实验name包含一个键,在这个键上,有一个长度数组 num_random_search,带有所选参数及其评估分数。对于配置 与示例一样,摘要将如下所示:
      pip install tgan
      
      6
      • 一组文件夹,每个文件夹的名称都在json配置中指定的名称之后,包含 在实验文件夹中。在每个文件夹中,都可以找到采样数据和模型。对于配置 与示例一样,这将如下所示:
      pip install tgan
      
      7

      研究

      第一个tagn版本是为使用生成性对抗网络合成表格数据而构建的支持软件。

      本文提到的软件的确切版本可以在releases部分找到,如研究预发布版

      引文

      如果您使用TGAN,请引用以下工作:

      < Buff行情>

      徐磊,维拉马切内尼。2018。使用生成性对抗网络合成表格数据。

      pip install tgan
      
      8

      您可以在这里找到原始论文

      历史记录

      0.1.0

      欢迎加入QQ群-->: 979659372 Python中文网_新手群

      推荐PyPI第三方库


热门话题
java需要设置框架。可设置大小(false)以重新绘制()   java我对PDF文件感到困惑   为什么是太阳。jvm。热点。调试器。DebuggerException:无法打开二进制文件`?   设置结果为textview时出现java空指针异常   我应该使用什么同步原语在Java中实现事件驱动程序框架?   java为什么WindowClosing处理程序在退出程序之前不执行后台任务?   如何将“20170712T18:43:04.000Z”转换为安卓或java中的相对时间?   Java,获取按键的时间长度,currentTimeMillies()始终为24   maven构建的java可执行Jar找不到logback。xml   java在其外部的函数中使用for循环中的值   java如何以表格格式将不同长度的数据对齐   java Play 2.5 WebSocket连接构建   maven而非eclipse的java强制转换问题   java如何在JFreeChart中使X轴上的值水平?   构建Java Windows应用程序以访问在线MySQL数据库需要什么   java添加构造函数会出错吗?这没有道理,请帮忙,编程问题   java在一个jframe中的两个JPanel中使用两个绘制方法   java数学或逻辑问题   java如何复制Androids库存摄像头方向更改