Машинное обучение за 100 дней: основы PyYAML

машинное обучение

Написание конфигурационных файлов в программировании неизбежно, сегодня мы продолжим сетевое программирование на Python и изучим более лаконичный и мощный язык, чем JSON — YAML. В этой статье Лао Ху кратко представляет синтаксис и использование YAML, а также примеры применения YAML в проектах машинного обучения. Все желающие могут учиться вместеСтавьте лайки, делитесь!

Приквел:Я начинаю изучать сетевое программирование на Python

YAML

YAML — это рекурсивная аббревиатура от «YAML — это не язык разметки» (YAML — это не язык разметки). Синтаксис YAML подобен другим языкам высокого уровня, и он может просто выражать формы данных, такие как списки, хэш-таблицы и скаляры. Он использует отступы пробелов и большое количество функций, зависящих от внешнего вида, и особенно подходит для выражения или редактирования структур данных, различных файлов конфигурации, дампа отладочного содержимого и структур документов. Суффикс файла конфигурации YAML — .yaml.

Основные правила синтаксиса YAML следующие:

  • Деликатный случай
  • Используйте отступ для обозначения иерархии
  • Клавиша табуляции не допускается при отступе, допускаются только пробелы.
  • Количество пробелов с отступом не имеет значения, если элементы на одном уровне выровнены по левому краю.
  • знак # указывает на комментарий

YAML поддерживает три структуры данных:

  • Объект: набор пар ключ-значение. Пара ключ-значение объекта использует структуру двоеточия для представления ключ: значение, а после двоеточия следует добавить пробел.
  • Массив: упорядоченный набор значений, также известный как последовательность/список, представленный -.
  • скаляры: одиночные, неделимые значения

Использование 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 на практикекод в .

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"]))

reference

У-у-у. Беги, о, quilt.com/my 3C note/linen…
Вууху. Руан Ифэн.com/blog/2016/0…