转变您的数据科学项目:发现将变量存储在YAML文件中的好处
转变数据科学项目:存储变量于YAML文件的好处
本博文将讨论在数据科学项目中使用YAML文件作为存储变量、参数和超参数的中央存储库的好处。它将解释如何通过允许轻松访问和修改这些值来改进项目的效率和组织。该博文还将提供示例和逐步指南,以在数据科学项目中实施此方法。
介绍
机器学习和深度学习问题都涉及使用不同参数进行实验。随着参数数量的增加,实验变得非常困难。这种困难部分是由于需要手动更改每个实验迭代的参数值而导致的。但幸运的是,我们有一种方法可以使这个过程变得更容易。通过将YAML文件与Python代码结合使用,我们可以轻松进行不同的实验。本文将演示如何使用YAML文件和Python代码进行不同的实验。
先决条件
- 基本的Python编程语言知识
- 机器学习生命周期的基本知识
议程
- 什么是YAML?
- 为什么不使用传统的存储变量方式?
- 将参数集中存储在YAML文件中的优势
- 下载PyYAML Python库
- 将变量存储在YAML文件中
- 将列表和字典存储在YAML文件中
- 将变量从YAML文件加载到Python文件中
- 结论
什么是YAML?
在深入讨论这个主题之前,让我们先了解一些关于YAML的基本信息。
YAML代表“YAML不是标记语言”。YAML是一种以非常人类可读的格式存储数据的语言,与XML或JSON文件不同。YAML文件只存储信息,因此不包含任何类型的操作。此外,人们可以很容易地将数据从YAML文件转移到其他编程语言,例如Python。
为什么不使用传统的存储变量方式?
为了解释这些概念,我将使用一个名为“信用卡欺诈检测”的数据科学项目作为示例。该项目的目标很简单。该项目专注于检测所执行的交易是否欺诈。这是通过使用有关所述交易的一些信息来完成的。可以作为信息使用的一些示例包括:
- 交易发生地点与信用卡持有人的家庭地址之间的距离。
- 与上一次交易地点的距离
- 平均交易价格与当前交易价格的比率
- 进行交易的IP地址
- 在线还是离线支付
这种检测是通过对用户的信用卡交易历史进行机器学习模型训练来完成的。
基于机器学习的数据科学项目有许多阶段,例如数据探索、数据清洗、寻找适合该问题的机器学习模型、调整模型和保存模型。这些是此类项目中的许多步骤之一。在其中一步中,需要找到适合的机器学习算法和调整适合的机器学习算法时,每个步骤都会创建大量变量。
传统的存储变量方式在这种情况下会产生问题。让我们更详细地了解这一点。找到适合数据并在其中获得最大准确性的适合的机器学习算法主要取决于对算法的超参数进行实验。使用传统方式,我们必须在每个文件中四处更改这些参数以执行每个实验。这变得非常繁琐,并容易出错。为了避免这种不必要的工作和愚蠢的错误,采用了一种新的方法。我们将在本文后面了解到这种新方法。
将参数集中存储在YAML文件中的优势
与在各自文件中存储参数的传统方式不同,此方法建议将所有参数存储在一个文件中。可以通过导入该文件在需要时获取参数。这种方法更简洁,也不容易出现愚蠢的错误。甚至可以使用YAML文件来存储文件路径。
心中可能会有一个问题,为什么只使用YAML文件?这个问题的答案在于YAML文件的极其简单的语法。虽然可以使用其他类型的文件,但为了使一个简单的事情变得更简单,建议使用YAML文件。
现在,让我们看看如何使用一些代码来完成它。
下载PyYAML python库
Python中一个受欢迎的第三方库是PyYAML。这个库得到了积极维护,并且它也在官方的YAML网站上提到。要安装这个库,请在终端中使用以下命令。
python -m pip install pyyaml
完成库的安装后,使用以下命令将其导入到Python文件中。
import yaml
请注意,即使PyYAML是您安装的库的名称,您在Python代码中使用名称“yaml”导入该包。
将变量存储在YAML文件中
YAML文件的语法与Python语言有些相似。在YAML文件中,使用缩进就像在Python中一样。让我们看一下YAML文件以了解这一点。
SimpleImputer: strategy: most_frequent missing_values: nanOrdinalEncoder: handle_unknown: use_encoded_value unknown_value: 100
在这里,我们将变量存储在名为SimpleImputer和OrdinalEncoder的两个组中。这些变量用作Scikit-Learn的简单插补器和顺序编码器变换器的预处理步骤的参数。
请注意,我们不需要在YAML文件中的字符串变量值周围使用引号。但即使我们在字符串变量值周围使用引号,也不会有任何区别。
将文件路径存储到YAML中与将任何其他值保存到YAML文件中类似。以下是用于数据预处理和我们的信用卡欺诈检测模型训练的路径。
data_preparation: training_db: Training_db training_db_dir: Training_Database table_name: trainingGoodRawDataTable schema_training: config/schema_training.json good_validated_raw_dir: data/Training_Raw_Files_Validated/Good_Raw master_csv: master.csv
在YAML文件中存储列表和字典
YAML文件中有两种存储列表和字典的方式。以下是用于欺诈检测所使用的随机森林分类器模型的超参数。
方法1:
random_forest: cv: 5 verbose: 3 param_grid: {n_estimators: [10, 50, 100, 130], max_depth: [2, 3], max_features: ['auto', 'log2']}
在第一种方法中,我们只是将列表或字典放在与Python编程语言中一样的位置。字典表示为简单的键值对。
方法2:
random_forest: cv: 5 verbose: 3 param_grid: n_estimators: - 10 - 50 - 100 - 130 max_depth: - 2 - 3 max_features: - auto - log2
在第二种方法中,所有列表成员都以同一缩进级别开始,符号为“-”。字典表示为简单的键值对。
从YAML文件加载变量到Python文件中
random_forest: cv: 5 verbose: 3 param_grid: n_estimators: - 10 - 50 - 100 - 130 max_depth: - 2 - 3 max_features: - auto - log2
现在假设我们想要从我们的’parameters.yaml’文件中的Python文件中访问’verbose’变量。我们可以通过以下方式实现。
import yamlwith open('parameters.yaml') as p: params = yaml.safe_load(p)verbose = params['random_forest']['verbose']
您可能会想为什么要通过从YAML文件中的Python文件导入变量来导入变量,当我们可以在Python文件中将变量’verbose’初始化为3。这种编码方式背后有一个原因。
假设我们想要在多个文件中使用这个变量。假设我们想要更新 verbose 变量,那么我们将不得不逐个遍历所有文件并进行更改。如果我们将变量存储在 YAML 文件中,然后在每个 Python 文件中导入它,那么一旦我们在 YAML 文件中更改变量的值,它将在使用它的每个 Python 文件中得到反映。
结论
在本文中,我们了解了为什么不应该使用将变量存储在 Python 文件中的传统方法。同时,我们还了解了使用 YAML 文件存储变量的优势以及它如何帮助机器学习项目中的实验。请查看以下链接获取本文的完整代码。
发现将变量存储在 YAML 文件中的好处
跳至内容 在控制台中体验 YouTube(和 Twitch)。最佳体验请使用全屏。分支用于音频和自定义…
replit.com
结语
希望您喜欢这篇文章。如果您对文章有任何想法,请告诉我。同时,如果您喜欢这篇文章,请点赞。
与我在 LinkedIn 上联系。
了解更多关于我的信息,请访问我的网站。
给我发邮件至 [email protected]
祝您度过愉快的一天!