Спецификация моделей с помощью parsnip
Задавайте типы моделей и вычислительные механизмы независимо от этапа обучения
«Спецификация моделей с помощью parsnip» — бесплатный урок R Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.
Что такое parsnip?
parsnip предоставляет единый интерфейс к сотням движков моделей. Вместо изучения уникального синтаксиса каждого пакета (glm(), randomForest(), e1071::svm()) Вы записываете единую спецификацию и указываете parsnip, какой движок использовать.
Это позволяет заменять движки — например, переходить с glm на stan для байесовской логистической регрессии, изменив всего один аргумент.
library(parsnip)
# The same interface, different engines
logistic_reg() |> set_engine('glm') # base R
logistic_reg() |> set_engine('glmnet') # regularized
logistic_reg() |> set_engine('stan') # Bayesianlogistic_reg() для классификации
logistic_reg() задаёт модель логистической регрессии для бинарной классификации. Добавьте цепочкой set_engine('glm'), чтобы использовать встроенный в R движок GLM, и set_mode('classification'), чтобы явно объявить тип задачи.
Режим ('classification' или 'regression') необходим для типов моделей, поддерживающих оба варианта.
log_spec <- logistic_reg() |>
set_engine('glm') |>
set_mode('classification')
print(log_spec)
# Logistic Regression Model Specification (classification)
# Computational engine: glmrand_forest() с tune()
rand_forest() задаёт случайный лес. Такие параметры, как mtry (число признаков для каждого разбиения) и trees, можно зафиксировать или задать как tune() — заполнители для поиска гиперпараметров.
Если передать tune(), tidymodels выполнит поиск по сетке значений во время настройки с перекрёстной проверкой.
rf_spec <- rand_forest(
mtry = tune(),
trees = 500,
min_n = tune()
) |>
set_engine('ranger', importance = 'impurity') |>
set_mode('classification')
print(rf_spec)linear_reg() для регрессии
linear_reg() задаёт модель линейной регрессии. Использование set_engine('lm') включает метод обычных наименьших квадратов, а set_engine('glmnet') — L1/L2-регуляризацию с помощью параметров штрафа и смешивания.
# OLS linear regression
lm_spec <- linear_reg() |>
set_engine('lm')
# Ridge regression (penalty > 0, mixture = 0)
ridge_spec <- linear_reg(penalty = 0.01, mixture = 0) |>
set_engine('glmnet')
# Lasso (penalty > 0, mixture = 1)
lasso_spec <- linear_reg(penalty = tune(), mixture = 1) |>
set_engine('glmnet')boost_tree() — градиентный бустинг
boost_tree() задаёт модель градиентного бустинга на деревьях. Можно выбрать движок xgboost, lightgbm или C5.0. К настраиваемым параметрам относятся tree_depth, learn_rate и loss_reduction.
xgb_spec <- boost_tree(
trees = 500,
tree_depth = tune(),
learn_rate = tune(),
loss_reduction = tune()
) |>
set_engine('xgboost') |>
set_mode('classification')
print(xgb_spec)fit() — обучение модели
fit(spec, formula, data) обучает спецификацию модели на фактических данных. Внутри parsnip преобразует спецификацию в соответствующий вызов выбранного движка. Результатом является объект обученной модели parsnip.
lm_spec <- linear_reg() |> set_engine('lm')
# Fit the model on training data
lm_fit <- fit(lm_spec, mpg ~ wt + hp + cyl, data = mtcars)
# The fitted object wraps the engine result
print(lm_fit)
# Access the underlying lm object
extract_fit_engine(lm_fit)fit_xy() — матричный интерфейс
fit_xy(spec, x, y) — альтернатива fit(spec, formula, data). Эта функция напрямую принимает матрицу предикторов x и вектор отклика y, что удобно, когда данные уже предварительно обработаны и представлены числовой матрицей (например, при работе с нейронными сетями или XGBoost).
x_train <- train_baked |> select(-price)
y_train <- train_baked$price
lm_spec <- linear_reg() |> set_engine('lm')
# Matrix-style fit
lm_fit_xy <- fit_xy(lm_spec, x = x_train, y = y_train)
print(lm_fit_xy)translate() — просмотр кода движка
translate(spec) показывает, какой именно вызов parsnip выполнит внутри для выбранного движка. Это особенно полезно при отладке и для понимания того, как спецификация parsnip сопоставляется с собственным интерфейсом движка.
rf_spec <- rand_forest(mtry = 3, trees = 500) |>
set_engine('ranger') |>
set_mode('classification')
# See what ranger() call will be generated
translate(rf_spec)
# ranger::ranger(formula = ..., data = ...,
# num.trees = 500, mtry = 3, ...)predict() в parsnip
Все обученные модели parsnip используют единый интерфейс predict(). Для классификации параметр type = 'class' возвращает предсказанный класс, а type = 'prob' — вероятности классов. Такая согласованность — одно из главных преимуществ parsnip.
log_fit <- fit(logistic_reg() |> set_engine('glm') |> set_mode('classification'),
species ~ ., data = train_df)
# Predicted classes
predict(log_fit, new_data = test_df, type = 'class')
# Predicted probabilities
predict(log_fit, new_data = test_df, type = 'prob')augment() — присоединение предсказаний к данным
augment(fitted_model, new_data) добавляет столбцы с предсказаниями непосредственно во входной фрейм данных. Это удобно для оценки: результат содержит рядом и истинные значения, и предсказания, готовые для вычисления метрик.
log_fit <- fit(
logistic_reg() |> set_engine('glm') |> set_mode('classification'),
species ~ ., data = train_df
)
# Get predictions joined to test data
results <- augment(log_fit, new_data = test_df)
head(results[, c('species', '.pred_class', '.pred_setosa')])Сравнение спецификаций моделей
Одно из главных преимуществ parsnip — быстрое сравнение моделей. Вы задаёте несколько спецификаций, обучаете их на одних и тех же данных и сравниваете метрики. Поскольку интерфейс одинаков, для замены модели нужно изменить только определение спецификации.
specs <- list(
lm = linear_reg() |> set_engine('lm'),
ridge = linear_reg(penalty = 0.01, mixture = 0) |> set_engine('glmnet'),
rf = rand_forest(trees = 200) |> set_engine('ranger') |> set_mode('regression')
)
fits <- lapply(specs, fit, mpg ~ ., data = train_mtcars)
preds <- lapply(fits, predict, new_data = test_mtcars)
rmse_vals <- sapply(preds, function(p) {
sqrt(mean((p$.pred - test_mtcars$mpg)^2))
})
print(rmse_vals)Быстрая проверка
Что возвращает translate(spec) в parsnip?
Итоги по parsnip
Основные выводы из раздела «Спецификации моделей с parsnip»:
- parsnip предоставляет единый интерфейс: тип модели, движок и режим задаются отдельно.
set_engine()выбирает базовый пакет, аset_mode()— классификацию или регрессию.- Используйте
tune()как заполнитель для гиперпараметров, которые будут подобраны позже. fit(spec, formula, data)обучает модель, аfit_xy(spec, x, y)принимает матрицы.predict(fit, new_data, type)работает одинаково со всеми движками.translate(spec)показывает вызов движка для отладки.augment(fit, new_data)добавляет предсказания во фрейм данных.
# Parsnip model comparison template
spec <- rand_forest(trees = 500, mtry = tune()) |>
set_engine('ranger', importance = 'impurity') |>
set_mode('classification')
print(translate(spec))
# When mtry is fixed:
spec_fixed <- rand_forest(trees = 500, mtry = 5) |>
set_engine('ranger') |>
set_mode('classification')
fit_fixed <- fit(spec_fixed, label ~ ., data = train_df)Изучай R с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 43
- Уроки
- 159
Часто задаваемые вопросы
Урок «Спецификация моделей с помощью parsnip» бесплатный?
Да — полный текст урока «Спецификация моделей с помощью parsnip» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.
Чему я научусь в уроке «Спецификация моделей с помощью parsnip»?
Задавайте типы моделей и вычислительные механизмы независимо от этапа обучения Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать R Academy?
Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Спецификация моделей с помощью parsnip»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке R Academy?
Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание признаков с помощью recipes
- Спецификация моделей с помощью parsnip
- Рабочие процессы: объединение рецептов и моделей
- Ресэмплинг и перекрёстная проверка с rsample