自动调整模型

atm-ml的Python项目详细描述


circleci覆盖状态documentation

ATM-自动调谐模式

  • 自由软件:麻省理工学院许可证
  • 文档:http://atm.readthedocs.io/en/latest/" rel="nofollow">http://atm.readthedocs.io/en/latest/

ATM是 人类数据交互项目 (HDI)麻省理工学院。它是一个分布式的、可扩展的automl系统,设计时考虑到了易用性。

摘要

对于给定的分类问题,ATM的目标是找到

  1. 一种分类方法,如决策树、支持向量机等。 或随机森林,和
  2. 该方法的一组超参数 < > >

    从而产生最好的分类器。

    atm将预提取特征向量和标签的数据集作为csv文件。 然后开始并行地训练和测试分类器(机器学习模型)。 随着时间的推移,ATM将使用以前分类器的结果来智能地选择 下一步要尝试哪些方法和超参数。 在这个过程中,ATM保存它训练的每个分类器的数据,包括超参数 用于培训IT、广泛的性能指标和模型本身的序列化版本。

    ATM具有以下功能:

    • 它允许用户为多个数据集和多个 并行配置问题。
    • 它可以在本地、aws*或自定义计算群集上运行*
    • 它可以被配置为使用各种automl方法来进行超参数调整和 选择,可在附带的库中找到。
    • 它存储关于每个 它已经训练了分类器。

    *正在工作!请参见问题40

    当前状态

    atm及其配套的图书馆btb正在积极发展中。 我们已经进行了转换和改进。

    设置/安装

    本节介绍在运行ubuntu linux的机器上使用atm的最快方法。 我们希望将来能有更深入的指导,但现在,你应该可以代替 命令您选择的包管理器启动ATM并在最新版本上运行 基于Unix的系统。

    ATM与Python2.7、3.5和3.6兼容,并已在Python2.7、3.5和3.6上进行了测试。

    1. 克隆项目

      git clone https://github.com/hdi-project/ATM.git /path/to/atm
      cd /path/to/atm
      
    2. 安装数据库

      您需要安装libmysqlclient dev包(用于sqlalchemy)

      sudo apt install libmysqlclient-dev
      

      以及以下至少一个数据库。

      • 对于sqlite(更简单):
      sudo apt install sqlite3
      
      • 对于MySQL:
      sudo apt install mysql-server mysql-client
      
    3. 安装python依赖项

      这也将安装核心自动中的ML库 hdi项目下的开发,作为一个egg,它将跟踪git存储库的更改。

      这里显示了virtualenv的用法,但是您可以用conda或您喜欢的 环境经理也一样。

      virtualenv venv
      . venv/bin/activate
      python setup.py install
      
    4. < > >

      快速使用

      下面我们将提供一个如何在桌面上运行ATM的快速教程。 我们将使用一个功能化的数据集,它已经保存在data/test/pollution_1.csv中。 这是openml.org上可用的数据集之一。 在这里可以找到更多详细信息。 在这个问题中,目标是使用与空气相关的指标来预测死亡率 污染。下面是csv文件的快照。 数据有15个功能,最后一列是标签。

      <表><广告>prec一月七月ovr65弹出教育 小时密度nonwwwdrk差hc氮氧化物 所以@潮湿 类 < /广告><正文>35237211.13.141178.842813.550.714.48103957144297410.43.219.881.642600.839.412.466335414745796.53.4111.177.5312527.150.220.618824小时 56 14335777.63.449.684.6644124.443.714.343382065515345807.73.4510.266.8332538.543.125.530327254143307410.93.2312.183.946793.549.211.3 21326256 04530739.33.2910.68621405.340.410.564456 0………………………………………………………………………………………………………………………………37317583.2611.978.4425913.149.613.9239155813546857.13.2211.879.9144114.851.216.1111540
      1. 创建数据运行

        python scripts/enter_data.py
        

        此命令将创建一个datarun。在ATM中,"数据运行"是一种单逻辑机器学习 任务。如果在没有任何参数的情况下运行上述命令,它将使用默认设置 在atm/config.py中找到,要在/atm.db创建新的sqlite3数据库,请创建一个新的 数据集引用上述数据的实例,并创建一个 指向那个数据集。有关此数据库中存储的内容及其用途的详细信息 在这里可以找到

        该命令应该会产生大量输出,输出的结尾如下:

        ========== Summary ==========
        Training data: data/test/pollution_1.csv
        Test data: <None>
        Dataset ID: 1
        Frozen set selection strategy: uniform
        Parameter tuning strategy: gp_ei
        Budget: 100 (classifier)
        Datarun ID: 1
        

        最重要的信息是数据运行ID。

      2. 启动工人

        python scripts/worker.py
        

        这将启动一个构建分类器、测试它们并将它们保存到 /models/目录。输出应该显示正在测试哪些超参数 以及每个分类器的性能("判断度量"),加上陆上通信线 迄今为止的表现。

        Classifier type: classify_logreg
        Params chosen:
                C = 8904.06127554
                _scale = True
                fit_intercept = False
                penalty = l2
                tol = 4.60893080631
                dual = True
                class_weight = auto
        
        Judgment metric (f1): 0.536 +- 0.067
        Best so far (classifier 21): 0.716 +- 0.035
        

        偶尔,工人在构建和测试 分类器。发生这种情况时,工作程序将向终端打印错误数据,并记录 数据库出错,请转到下一个分类器。

      3. < > >

        就这样!您可以使用ctrl+c从Worker中脱离并重新启动 用同样的命令;它会在它停止的地方拾取。你也可以运行 在不同的终端同时命令并行工作——所有工人都将 请参考同一个ModelHub数据库。当你预算中的100个分类器都建立好了, 所有工人都将优雅地离开。

        定制ATM的配置并使用您自己的数据

        atm的默认配置完全由atm/config.py控制。我们的文件会 更详细地介绍配置,但本节简要概述了 指定最重要的值。

        使用自己的数据运行ATM

        如果要将系统用于自己的数据集,请将数据转换为类似的csv文件 上面的例子。格式为:

        • 每列都是一个功能(或标签)
        • 每一行都是一个训练示例
        • 第一行是标题行,其中包含每列数据的名称
        • 单个列(目标标签)命名为

        接下来,您需要使用enter_data.py为您的任务创建数据集和数据运行。

        脚本将按顺序在以下位置查找每个配置变量的值:

        1. 命令行参数
        2. 配置文件
        3. atm/config.py
        4. 中指定的默认值 < > >

          这意味着有两种方法可以将配置传递给命令。

          1. 使用yaml配置文件

            将配置保存为yaml文件是保存复杂设置或共享的简单方法 他们与团队成员一起。

            您应该从atm/config/templates中提供的模板开始并修改它们 以满足您自己的需要。

            git clone https://github.com/hdi-project/ATM.git /path/to/atm
            cd /path/to/atm
            
            0

            run.yaml包含单个数据集和数据运行的所有设置。指定列车路径 指向您自己的数据集。

            sql.yaml包含ModelHub SQL数据库的设置。默认配置将 连接到(并在必要时创建)相对于目录位于/atm.db的sqlite数据库 从中运行enter_data.py。如果使用的是mysql数据库,则需要更改 文件如下:

            git clone https://github.com/hdi-project/ATM.git /path/to/atm
            cd /path/to/atm
            
            1

            aws.yaml应包含在云中运行ATM的设置。这是不必要的 用于本地操作。

            更新了yaml文件后,运行datarun创建脚本并将路径传递给它 到您的新配置文件:

            git clone https://github.com/hdi-project/ATM.git /path/to/atm
            cd /path/to/atm
            
            2
          2. 使用命令行参数

            也可以在命令行上分别指定每个参数。的名字 变量与yaml文件中的变量相同。SQL配置变量必须是 以sql-开头,aws配置变量必须以aws-开头

            使用命令行参数对于快速实验或 只需要更改默认配置中的几个值。例如:

            git clone https://github.com/hdi-project/ATM.git /path/to/atm
            cd /path/to/atm
            
            3

            也可以使用配置文件和命令行参数的混合;任何命令行 您指定的参数将覆盖配置文件中的值。

          3. < > >

            创建自定义数据运行后,启动一个工作进程,指定配置文件和 要计算的数据运行。

            git clone https://github.com/hdi-project/ATM.git /path/to/atm
            cd /path/to/atm
            
            4

            工作程序使用的sql配置必须与您的配置相匹配 传递到enter_data.py--其他rwise,工人会在错误的模型集线器中查找 数据库的数据运行!

            引用ATM

            如果您使用ATM,请考虑引用以下文件:

            托马斯·斯威林根、威尔·德雷沃、贝内特·塞弗斯、阿尔弗雷多·奎斯塔·因凡特、阿伦·罗斯、卡扬·维拉马切内尼。atm:用于自动机器学习的分布式、协作性、可扩展系统。ieee bigdata 2017,151-162

            bibtex条目:

            git clone https://github.com/hdi-project/ATM.git /path/to/atm
            cd /path/to/atm
            
            5

            相关项目

            BTB

            btb,用于贝叶斯优化和bandits,是核心automl HDI项目下正在开发的库。btb公开了几种超参数方法 通过公共api进行选择和调优。它允许领域专家扩展现有的方法 很容易添加新的。BTB是ATM的核心部分,这两个项目是在 串联的,但是它的设计是不可知实现的,并且应该在广泛的范围内有用 超参数选择任务。

            功能工具

            featuretools是一个用于自动化的python库 特征工程。它可以用来为ATM准备原始的事务和关系数据集。 它由功能实验室创建和维护,也是功能实验室的一部分。 人类数据交互项目

            历史记录

            0.1.0(2018-05-04)

            • pypi上的第一个版本。

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

            推荐PyPI第三方库


热门话题
java Android应用程序在后台   如何使用java减去日期。sql。时间戳   在Eclipse中使用Tomcat和Maven的java抛出错误   java Runnable jar什么都不做,资源不导出   并发Java内存模型:volatiles和读/写重新排序   使用Morphia在MongoDB中进行java批量升级。可能吗?   java将自己创建的sqlite数据库复制到安卓失败   在java中使用嵌套循环解决消除?   地图上多个标记的java实时动画   java如何在J2EE web应用程序中从服务层调用DAO方法   java我只想浏览文件,并将其作为电子邮件中的文件。我应如何附加:   猜猜我在think Java中的数字是57   可以在java流中的groupingBy中使用foreach吗?   我的Java程序编译时没有任何错误,但不会完全运行