Улучшите свои навыки 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
дополняет 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
предлагает свой собственный язык моделирования и обеспечивает выборку 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
предлагают свои собственные наборы возможностей для анализа временных рядов, 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
.
А пока сохраняйте любопытство и продолжайте кодить.