100天搞定机器学习:写YAML配置文件

简介: 100天搞定机器学习:写YAML配置文件

大家好,我是老胡


编程中免不了要写配置文件,今天继续100天搞定机器学习的番外学习一个比 JSON 更简洁和强大的语言————YAML 。文简单介绍 YAML 的语法和用法,以及 YAML 在机器学习项目中的应用实例。欢迎大家一起学习,也欢迎点赞、在看、分享!

另:yaml的妙用不限于本篇,我会在后续的Python网络编程专栏再做介绍。


YAML


YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲。YAML 的配置文件后缀为 .yaml

YAML 它的基本语法规则如下:


  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • #号 表示注释


YAML 支持的数据结构有三种:


  • 对象:键值对的集合,对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。
  • 数组:一组按次序排列的值,又称为序列/ 列表,用 - 表示。
  • 纯量(scalars):单个的、不可再分的值


YAML 用法


安装


pip install pyyaml


yaml 文件格式很简单,比如:


# categories.yaml file
sports: #注意,冒号后面要加空格
  - soccer # 数组
  - football
  - basketball
  - cricket
  - hockey
  - table tennis
countries: 
  - Pakistan
  - USA
  - India
  - China
  - Germany
  - France
  - Spain


python 读取 yaml 文件


# read_categories.py file
import yaml
with open(r'categories.yaml') as file:
    documents = yaml.full_load(file)
    for item, doc in documents.items():
        print(item, ":", doc)


运行结果:


sports : ['soccer', 'football', 'basketball', 'cricket', 'hockey', 'table tennis']
countries : ['Pakistan', 'USA', 'India', 'China', 'Germany', 'France', 'Spain']


以上便是 YAML 最基础的应用了,可能大家还是有点一头雾水,咱们更进一步,看看在机器学习项目中如何写 YAML 配置文件。


YAML & Machine Learning


我们直接改写100天搞定机器学习|Day62 随机森林调参实战中的代码。


640.png

           Project structure


写配置文件rf_config.yaml


#INITIAL SETTINGS
data_directory: ./data/
data_name: creditcard.csv
target_name: Class
test_size: 0.3
model_directory: ./models/
model_name: RF_classifier.pkl
#RF parameters
n_estimators: 50
max_depth: 6
min_samples_split: 5
oob_score: True
random_state: 666
n_jobs: 2


完整代码,可以对比源代码看看区别:


# rf_with_yaml_file.py
import os
import yaml
import joblib
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score
CONFIG_PATH = "./config/"
def load_config(config_name):
    with open(os.path.join(CONFIG_PATH, config_name)) as file:
        config = yaml.safe_load(file)
    return config
config = load_config("rf_config.yaml")
df = pd.read_csv(os.path.join(config["data_directory"], config["data_name"]))
data = df.iloc[:, 1:31]
X = data.loc[:, data.columns != config["target_name"]]
y = data.loc[:, data.columns == config["target_name"]]
number_records_fraud = len(data[data.Class == 1])
fraud_indices = np.array(data[data.Class == 1].index)
normal_indices = data[data.Class == 0].index
random_normal_indices = np.random.choice(
    normal_indices, number_records_fraud, replace=False)
random_normal_indices = np.array(random_normal_indices)
under_sample_indices = np.concatenate(
    [fraud_indices, random_normal_indices])
under_sample_data = data.iloc[under_sample_indices, :]
X_undersample = under_sample_data.loc[:,
                                      under_sample_data.columns != config["target_name"]]
y_undersample = under_sample_data.loc[:,
                                      under_sample_data.columns == config["target_name"]]
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=config["test_size"], random_state=42
)
rf1 = RandomForestClassifier(
    n_estimators=config["n_estimators"],
    max_depth=config["max_depth"],
    min_samples_split=config["min_samples_split"],
    oob_score=config["oob_score"],
    random_state=config["random_state"],
    n_jobs=config["n_jobs"]
)
rf1.fit(X_train, y_train)
print(rf1.oob_score_)
y_predprob1 = rf1.predict_proba(X_test)[:, 1]
print("AUC Score (Train): %f" % roc_auc_score(y_test, y_predprob1))
joblib.dump(rf1, os.path.join(config["model_directory"], config["model_name"]))


相关文章
|
XML JSON Java
SpringBoot入门(三) 之springboot的配置配置文件以及yaml的使用
SpringBoot入门(三) 之springboot的配置配置文件以及yaml的使用
241 0
SpringBoot入门(三) 之springboot的配置配置文件以及yaml的使用
|
3月前
|
关系型数据库 MySQL Go
go抽取mysql配置到yaml配置文件
go抽取mysql配置到yaml配置文件
|
4月前
|
Java Go
go如何读取yaml配置文件?
本文介绍了如何在Go项目中利用YAML文件进行配置管理,以简化变量更改及维护工作。首先,通过`go get gopkg.in/yaml.v3`命令安装YAML处理库。接着,展示了如何创建并解析YAML配置文件,包括定义结构体映射YAML字段、读取文件内容以及错误处理等步骤。此外,还提供了通过Go代码生成YAML文件的方法。使用`gopkg.in/yaml.v3`库能够有效提升项目的可维护性和开发效率。
360 1
go如何读取yaml配置文件?
|
3月前
|
Python
Python 解析 yaml 配置文件
Python 解析 yaml 配置文件
54 0
|
4月前
|
机器学习/深度学习 计算机视觉 Python
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
138 0
|
5月前
|
消息中间件 SQL Kafka
实时计算 Flink版产品使用问题之从检查点重启任务,怎么在YAML配置文件中添加检查点的路径
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
实时计算 Flink版产品使用问题之从检查点重启任务,怎么在YAML配置文件中添加检查点的路径
|
7月前
|
存储 JSON JavaScript
【YAML语法规范指南】从入门到精通,揭秘神秘语法,引领配置文件解析指南(基础结构篇)
"YAML Ain't Markup Language"(简称YAML)是一种专为人类设计的数据序列化语言,适用于多种现代编程语言,可广泛应用于各类日常任务。它是一种以人类可读形式呈现的、适用于多种语言的Unicode数据序列化标准。它基于敏捷编程中常见的本地数据结构,广泛应用于配置文件、互联网消息传递、对象持久化以及数据审计等多个领域。遵循Unicode标准、
702 8
【YAML语法规范指南】从入门到精通,揭秘神秘语法,引领配置文件解析指南(基础结构篇)
|
前端开发 Java 数据库
SpringBoot解析指定Yaml配置文件
最近在看某个开源项目代码并准备参与其中,代码过了一遍后发现多个自定义的配置文件用来装载业务配置代替数据库查询,直接响应给前端,这里简单记录一下实现过程。
439 0
|
JSON Go 数据格式
Go 读取 YAML 配置文件的两种方式
本文介绍了读取 YAML 配置文件的两种方式,第一种是通过 yaml.v3 包,第二种是通过 viper 包。如果是在项目里解析配置文件,推荐使用 viper 包,它支持解析多种格式的配置文件,监听配置文件的更新,修改配置文件等。
1536 1
Go 读取 YAML 配置文件的两种方式
Viper中的yaml配置文件入门,Viper开发环境和生产环境的隔离
Viper中的yaml配置文件入门,Viper开发环境和生产环境的隔离