DevGang
Авторизоваться

Улучшите свои навыки Python: пакеты машинного обучения

Откройте для себя пакеты и инструменты, которые сыграли ключевую роль в моем путешествии по программированию в качестве инженера машинного обучения. Они не только повышают эффективность, но и предлагают инновационные решения, изменяя способ решения проблем с помощью Python.

Этот выпуск посвящен пакетам машинного обучения. К каждому пакету прилагается краткое описание, его основные преимущества и пример использования, иллюстрирующий дизайн кода. Там, где это уместно, я также предоставлю альтернативные или дополнительные пакеты, давая вам целостное представление о доступных инструментах.

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

1. Scikit-learn

Описание: обширная библиотека алгоритмов машинного обучения.

Преимущество: Удобный для пользователя с согласованным API и подробной документацией.

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

from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_models import LogisticRegression


numeric_features = ['Salary']
numeric_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler())])


text_feature = 'ProductDescription'
text_transformer = Pipeline(steps=[
    ('vectorizer', TfidfVectorizer(stop_words="english"))
])

categorical_features = ['Age','Country']
categorical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
    ('onehot', OneHotEncoder(handle_unknown='ignore'))])

preprocessor = ColumnTransformer(
    transformers=[
        ('num', numeric_transformer, numeric_features),
        ('txt', text_transformer, text_feature),
        ('cat', categorical_transformer, categorical_features),
        ])

predictor = Pipeline(steps=[('preprocessor', preprocessor),
                  ('classifier', LogisticRegression(solver='lbfgs'))])


# train
predictor.fit(X_train, y_train)

#evaluate and predict

Бесплатно: river и skorch

River дополняет scikit-learn, предлагая инструменты, специально разработанные для онлайн-обучения, идеально подходящие для сценариев, в которых данные передаются в режиме реального времени. В то время как scikit-learn оптимизирован для пакетного обучения, River предоставляет решение для постепенного обновления моделей новыми точками данных по мере их поступления.

Skorch легко интегрирует возможности глубокого обучения PyTorch в экосистему scikit-learn. Это позволяет разработчикам использовать нейронные сети на основе PyTorch, как если бы они были оценщиками scikit-learn, упрощая внедрение моделей глубокого обучения в рабочие процессы, которые уже используют инструменты scikit-learn, такие как поиск по сетке и конвейеры.

2. PyMc

Описание: Специализируется на байесовском моделировании и вероятностном машинном обучении.

Преимущество: Предоставляет вам инструменты для определения вероятностных моделей в коде.

Когда использовать: идеально подходит для машинного обучения белого ящика с использованием вероятностного программирования.

import pymc as pm
import xarray as xr


with pm.Model() as model:

    # Priors
    alpha = pm.Normal('alpha', mu=0, sd=10)
    beta = pm.Normal('beta', mu=0, sd=10, shape=X_train.shape[1])

    # Linear combination
    mu = alpha + xr.dot(X_train, beta)

    # Logistic link function
    p = pm.invlogit(mu)

    # Likelihood
    y_obs = pm.Bernoulli('y_obs', p=p, observed=y_train)

    # Sample/train
    trace = pm.sample(3000)

# Evaluation with posterior predictive checks
# Prediction by drawing samples from the posterior predictive distribution

Альтернативы: stan и edward

В то время как stan предлагает свой собственный язык моделирования и обеспечивает выборку MCMC, а edward интегрируется с TensorFlow/Keras, предлагая вариационный вывод, PyMC отличается простотой использования в среде Python, удобным API и активным сообществом.

3. darts

Описание: Мой любимый пакет для прогнозирования временных рядов и обнаружения аномалий.

Преимущество: он предлагает комплексные инструменты для анализа временных рядов и единый интерфейс для различных моделей прогнозирования.

Когда использовать: важно при работе с данными временных рядов, когда вам необходимо прогнозирование, обнаружение аномалий или другие виды анализа с использованием классических моделей, моделей глубокого обучения, пророческих моделей и т. д.

from darts.models import RNNModel

model_config = {
    "model_name": "Sales_LSTM",
    "hidden_dim": 20,
    "dropout": 0,
    "batch_size": 16,
    "n_epochs": 200,
    "random_state": 42,
    "training_length": 20,
    "input_chunk_length": 14,
    "force_reset": True,
    "save_checkpoints": True,
}

model = RNNModel(
    model="LSTM",
    optimizer_kwargs={"lr": 1e-3},
    **model_config
)

# train
model.fit(TimeSeriesData)

# forecast next 3
forecast = model.predict(3)

Альтернативы: Merlion и kats

В то время как Merlion и Kats предлагают свои собственные наборы возможностей для анализа временных рядов, Darts предлагает комплексный выбор для прогнозирования и обработки временных рядов, удовлетворяя широкий спектр требований благодаря обширному набору инструментов. И Merlion, и Kats могут служить потенциальными альтернативами, но целостные предложения Darts делают его выдающимся выбором для меня.

4. FLAML

Описание: быстрая и эффективная библиотека автоматизированного машинного обучения.

Преимущество: достижение оптимальных результатов машинного обучения с минимальными затратами времени и времени на программирование.

Когда использовать: идеально подходит, когда вы хотите получить быстрые результаты без тонкостей тонкой настройки модели.

from flaml import AutoML

automl = AutoML()

automl_config = {
    "time_budget": 120,  # time in seconds
    "metric": 'accuracy',
    "task": 'classification',
     "estimator_list": ['lgbm', 'xgboost', 'catboost', 'extra_tree',],
    "seed": 42,
    "log_file_name": "churn.log",
    "log_training_metric": True,
}


# train
automl.fit(X_train, y_train, **automl_config)

# evaluate and predict

Бесплатно: AutoGluon и mljar-supervised

FLAML специализируется на автоматизации задач машинного обучения для табличных данных. Напротив, AutoGluon расширяет возможности автоматизации, предоставляя более широкий спектр, включая текст, изображения и мультимодальные данные, что делает его более универсальным набором инструментов. Между тем, mljar-supervised отражает FLAML в своей ориентации на табличные данные, представляя себя жизнеспособной альтернативой с сопоставимыми.

5. CVXPY

Описание: Полезная библиотека для выпуклой оптимизации.

Преимущество: он предоставляет интуитивно понятный метод определения и решения задач выпуклой оптимизации.

Когда использовать: необходим для решения задач оптимизации в таких областях, как финансы, управление, обработка сигналов и т. д.

'''
Task: Operations Research
PYIKEA wants to maximize its profit of selling armchair, wingchair, and Lovet-table. The profit of selling armchair is 150 DKK, wingchair 100 DKK, and Lovet-table 250 DKK. 
It takes:
    15 planks of wood and 5 hours of labour to make one armchair
    12 planks of wood and 2 hours of labour to make one wingchair
    18 planks of wood and 8 hours of labour to make one Lovet-table
The store needs at least 4 of each chair, and a table. The total amount of woods pieces in storage is 450 and labour budget is of 120 hours only.
What combination of chairs and table(s) yield maximum profit?
'''

import cvxpy as cp


# Variables
A = cp.Variable(integer=True, name="Armchair")
W = cp.Variable(integer=True, name="Wingchair") 
L = cp.Variable(integer=True, name="Lovet-table")

# Objective
profit = 150*A + 100*W + 250*L
objective = cp.Maximize(profit)

# Constraints
constraints = [15*A + 12*W + 18*L <= 450, 
                5*A +  2*W +  8*L <= 120,
                  A >= 4,
                  W >= 4,
                  L >= 1
              ]

# Problem to Solve
problem = cp.Problem(objective, constraints=constraints)
result = problem.solve()

Альтернатива: pyomo

Pyomo и cvxpy — мой лучший выбор для оптимизации в Python, каждый со своим набором сильных сторон. В то время как cvxpy выделяется своим интуитивно понятным подходом к выпуклым задачам, Pyomo демонстрирует универсальность в решении различных задач оптимизации, будь то линейная, нелинейная или смешанная целочисленная. По сути, выбор между ними сводится к настроению, в котором я нахожусь в течение дня!

Заключение

Мы прошлись по моим любимым пакетам Python, которые переопределяют рабочие процессы машинного обучения. Я выбрал scikit-learn для общих задач машинного обучения, дополненный такими инструментами, как river и skorch. PyMC помог нам разобраться в тонкостях байесовского моделирования с такими альтернативами, как stan и edward. Darts стал всесторонним выбором для анализа временных рядов, хотя Merlion и kats предлагают свои уникальные возможности.

Для получения быстрых результатов FLAML оптимизирует автоматизированное машинное обучение с расширением AutoGluon и mljar-supervised на аналогичных территориях. Наконец, CVXPY продемонстрировал свое мастерство в оптимизации с pyomo в качестве еще одного претендента. Эти пакеты в совокупности освещают обширный и развивающийся ландшафт машинного обучения на основе Python, который может повысить ваши навыки, как они сделали мои.

Следите за новостями о Data Engineering Pipelines, в которых будут представлены Dagster, Apache Airflow, Prefect и Argo.

А пока сохраняйте любопытство и продолжайте кодить.

Источник:

#Python #Data Science #Подборка #Machine Learning
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу