Press "Enter" to skip to content

在数据科学项目中停止硬编码 – 使用配置文件代替

如何在Python中高效地与配置文件进行交互

问题

在数据科学项目中,某些值倾向于经常变化,例如文件名、选定的特征、训练测试分割比例以及模型的超参数。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第1张

在编写用于假设测试或演示目的的临时代码时,硬编码这些值是可以的。但是,随着代码库和团队的扩展,避免硬编码变得至关重要,因为它可能会产生各种问题:

  • 可维护性:如果值散布在代码库中,更新它们变得更加困难。这可能会导致更新值时出现错误或不一致。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第2张

  • 可重用性:硬编码值限制了代码在不同场景下的可重用性。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第3张

  • 安全问题:将密码或API密钥等敏感信息直接硬编码到代码中可能存在安全风险。如果代码被共享或暴露,可能会导致未经授权的访问或数据泄露。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第4张

  • 测试和调试:硬编码值可能会使测试和调试更加具有挑战性。如果值被硬编码到代码中,那么模拟不同场景或有效地测试边缘情况就变得困难。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第5张

解决方案 – 配置文件

配置文件通过提供以下优点来解决这些问题:

  • 配置与代码分离:配置文件允许您将参数与代码分开存储,这提高了代码的可维护性和可读性。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第6张

  • 灵活性和可修改性:使用配置文件,您可以轻松修改项目配置而不必修改代码本身。这种灵活性允许快速实验、参数调整以及将项目适应不同的情况或环境。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第7张

  • 版本控制:将配置文件存储在版本控制中,可以跟踪配置随时间的变化。这有助于保持项目配置的历史记录,并促进团队成员之间的协作。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第8张

  • 部署和生产化:在将数据科学项目部署到生产环境时,配置文件可以轻松自定义特定于生产环境的设置,无需进行代码修改。这种将配置与代码分离简化了部署过程。

介绍 Hydra

在众多可用于创建配置文件的Python库中,Hydra因其出色的功能集而脱颖而出,包括:

  • 方便的参数访问
  • 命令行配置覆盖
  • 从多个来源组合配置
  • 执行具有不同配置的多个作业

让我们深入了解每个功能。

请随意播放并分叉本文的源代码:

在 GitHub 上查看

方便的参数访问

假设所有配置文件都存储在conf文件夹下,所有Python脚本都存储在src文件夹下。

.
├── conf/
│   └── main.yaml
└── src/
    ├── __init__.py
    ├── process.py
    └── train_model.py

main.yaml 文件如下所示:

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第9张

在 Python 脚本中访问配置文件就像将单个装饰器应用于 Python 函数一样简单。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第10张

要访问配置文件中的特定参数,我们可以使用点符号表示法(例如 config.process.cols_to_drop ),这是一种更清晰、更直观的方式,与使用方括号(例如 config['process']['cols_to_drop'] )相比。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第11张

这种简单直接的方法使您可以轻松地检索所需的参数。

命令行配置覆盖

假设您正在尝试不同的 test_size 。重复打开配置文件并修改 test_size 值是耗时的。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第12张

幸运的是,Hydra 可以轻松地直接从命令行覆盖配置。这种灵活性允许快速调整和微调,而不需要修改底层配置文件。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第13张

从多个来源组成配置

假设您想要尝试不同的数据处理方法和模型超参数的各种组合。虽然您可以在每次运行新实验时手动编辑配置文件,但这种方法可能会耗费时间。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第14张

Hydra 可以使用配置组从多个来源组成配置。要为数据处理创建配置组,请创建一个名为 process 的目录,其中包含每个处理方法的文件:

.
└── conf/
    ├── process/
    │   ├── process1.yaml
    │   └── process2.yaml
    └── main.yaml

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第15张

如果要默认使用 process1.yaml 文件,则将其添加到 Hydra 的默认列表中。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第16张

按照相同的程序创建用于训练超参数的配置组:

.
└── conf/
    ├── process/
    │   ├── process1.yaml
    │   └── process2.yaml
    ├── train/
    │   ├── train1.yaml
    │   └── train2.yaml
    └── main.yaml

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第17张

train1 设置为默认配置文件:

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第18张

现在运行应用程序将默认使用 process1.yaml 文件和 model1.yaml 文件中的参数:

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第19张

当需要无缝组合不同的配置文件时,这种能力特别有用。

多次运行

假设您想要使用多个处理方法进行实验,逐个应用每个配置可能是一项耗时的任务。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第20张

幸运的是,Hydra允许您同时使用不同的配置运行相同的应用程序。

在数据科学项目中停止硬编码 - 使用配置文件代替 数据科学 第21张

这种方法简化了使用不同参数运行应用程序的过程,最终节省了宝贵的时间和精力。

结论

恭喜您!您刚刚学会了使用配置文件的重要性以及如何使用Hydra创建配置文件。我希望本文能给您创造自己的配置文件所需的知识。

Khuyen Tran是一位多产的数据科学作家,并写了一系列有用的数据科学主题,包括代码和文章。Khuyne目前正在寻找2022年5月之后在海湾地区担任机器学习工程师、数据科学家或开发者倡导者角色的职位,如果您正在寻找具有她的技能的人,请联系她。

原文。获得授权后转载。

Leave a Reply

Your email address will not be published. Required fields are marked *