0Pricing
R Academy · Lekcja

Workflowy: łączenie recipes i modeli

Połącz wstępne przetwarzanie i model w pojedynczy obiekt workflow.

Workflowy: łączenie recipes i modeli to bezpłatna lekcja R Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej R Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs R Academy zawiera 4 lekcji w sumie.

Czym jest workflow?

workflow łączy recepturę i specyfikację modelu w jeden obiekt. Rozwiązuje to istotny problem: kroki wstępnego przetwarzania i modelowania muszą być traktowane jako jedna całość podczas walidacji krzyżowej i końcowego dopasowywania. W przeciwnym razie parametry, takie jak średnie używane do normalizacji, mogą wyciec ze zbiorów testowych.

library(workflows)

# Start an empty workflow
wf <- workflow()
print(wf)

# Workflows have two slots: preprocessor and model
# Both must be filled before fitting

add_recipe() i add_model()

Użyj add_recipe(rec), aby dołączyć preprocesor w postaci receptury, oraz add_model(spec), aby dołączyć specyfikację modelu parsnip. Operator potoku sprawia, że taki zapis jest bardzo czytelny.

library(recipes)
library(parsnip)
library(workflows)

rec <- recipe(price ~ ., data = train) |>
  step_impute_median(all_numeric_predictors()) |>
  step_dummy(all_nominal_predictors()) |>
  step_normalize(all_numeric_predictors())

spec <- linear_reg() |> set_engine('lm')

wf <- workflow() |>
  add_recipe(rec) |>
  add_model(spec)

print(wf)

fit() dla workflow

Wywołanie fit(wf, data = train) dla workflow automatycznie wywołuje prep() na recepturze z użyciem danych treningowych, a następnie trenuje model na wstępnie przetworzonych cechach. Nie trzeba ręcznie wywoływać prep() ani bake().

fitted_wf <- fit(wf, data = housing_train)

# The fitted workflow stores both the prepped recipe
# and the trained model
print(fitted_wf)

predict() dla dopasowanego workflow

Po wywołaniu predict(fitted_wf, new_data = test) workflow automatycznie stosuje bake() do nowych danych, korzystając z wytrenowanej receptury, a następnie generuje predykcje. Eliminuje to ryzyko zapomnienia o wstępnym przetworzeniu danych testowych.

# Predictions automatically preprocess the test data
preds <- predict(fitted_wf, new_data = housing_test)
head(preds)

# For classification
preds_prob <- predict(fitted_wf, new_data = test_df, type = 'prob')
preds_class <- predict(fitted_wf, new_data = test_df, type = 'class')

last_fit() — trenowanie na całości i ocena na teście

last_fit(wf, split) przyjmuje końcowy workflow oraz początkowy obiekt podziału na zbiór treningowy i testowy. Dopasowuje workflow do części treningowej i ocenia go na części testowej — jest to standardowy etap końcowej oceny modelu po zakończeniu dostrajania.

library(rsample)

split <- initial_split(housing_data, prop = 0.8, strata = price)

# Fit on training, evaluate on test
final_res <- last_fit(wf, split)

# View performance on the held-out test set
collect_metrics(final_res)

extract_fit_parsnip()

extract_fit_parsnip(fitted_wf) wyodrębnia wytrenowany obiekt modelu parsnip z dopasowanego workflow. Można go następnie użyć do sprawdzenia współczynników, ważności zmiennych lub przekazania go do narzędzi wyjaśniających modele.

fitted_wf <- fit(wf, data = housing_train)

# Extract the parsnip model
parsnip_fit <- extract_fit_parsnip(fitted_wf)

# Now access the underlying model
tidy(parsnip_fit)      # coefficients for lm
vip::vip(parsnip_fit)  # variable importance plot

extract_recipe()

extract_recipe(fitted_wf) zwraca przygotowaną recepturę z dopasowanego workflow. Jest to przydatne do sprawdzenia zastosowanych transformacji lub pobrania wytrenowanego wstępnego przetwarzania w celu niezależnego zastosowania go do danych zewnętrznych.

fitted_wf <- fit(wf, data = housing_train)

# Get the prepped recipe
prepped_rec <- extract_recipe(fitted_wf)

# Inspect normalization stats
tidy(prepped_rec, number = 3)  # step_normalize details

# Apply recipe to completely new external data
new_baked <- bake(prepped_rec, new_data = brand_new_df)

augment() dla workflow

augment(fitted_wf, new_data) zwraca wejściową ramkę danych z dołączonymi kolumnami predykcji. W regresji dodaje .pred, a w klasyfikacji — .pred_class oraz kolumny prawdopodobieństw dla każdej klasy.

fitted_wf <- fit(wf, data = housing_train)

# Append predictions to the test data frame
results <- augment(fitted_wf, new_data = housing_test)

# Now compute metrics directly
library(yardstick)
results |>
  metrics(truth = price, estimate = .pred)

Aktualizowanie workflow

Poszczególne elementy workflow można aktualizować za pomocą update_recipe() lub update_model(), bez tworzenia go od początku. Jest to przydatne podczas eksperymentowania, gdy chce Pan/Pani zmienić silnik modelu, zachowując tę samą recepturę.

# Original workflow with lm
wf_lm <- workflow() |>
  add_recipe(rec) |>
  add_model(linear_reg() |> set_engine('lm'))

# Swap model to random forest, keep same recipe
wf_rf <- update_model(
  wf_lm,
  rand_forest(trees = 300) |>
    set_engine('ranger') |>
    set_mode('regression')
)

fit_rf <- fit(wf_rf, data = housing_train)

add_formula() a add_recipe()

Jeśli receptura nie jest potrzebna, można użyć add_formula(outcome ~ .) jako preprocesora. Stosuje on minimalne transformacje (wyłącznie specyfikację formuły). Należy używać add_recipe(), gdy potrzebna jest inżynieria cech, a add_formula() — w przypadku szybkich modeli bazowych.

# Simple baseline — no recipe needed
baseline_wf <- workflow() |>
  add_formula(price ~ sqft + bedrooms + bathrooms) |>
  add_model(linear_reg() |> set_engine('lm'))

baseline_fit <- fit(baseline_wf, data = housing_train)
baseline_preds <- predict(baseline_fit, new_data = housing_test)

# Compare RMSE to recipe-based model
yardstick::rmse_vec(housing_test$price, baseline_preds$.pred)

Zestawy workflow do porównywania

workflow_set() z pakietu workflowsets tworzy kolekcję workflow łączących wiele receptur i specyfikacji modeli. Następnie można jednocześnie dostrajać i oceniać wszystkie kombinacje za pomocą workflow_map().

library(workflowsets)

all_workflows <- workflow_set(
  preproc = list(basic = basic_rec, full = full_rec),
  models  = list(
    lm  = linear_reg() |> set_engine('lm'),
    rf  = rand_forest(trees = 200) |> set_engine('ranger') |> set_mode('regression')
  )
)

# Fit all 4 combinations on resamples
results <- workflow_map(all_workflows, 'fit_resamples', resamples = cv_folds)
autoplot(results)

Szybkie sprawdzenie

Jaka jest główna zaleta użycia last_fit(workflow, split) zamiast ręcznego dopasowywania i wykonywania predykcji?

Podsumowanie workflow

Najważniejsze informacje z lekcji Workflow: łączenie receptur i modeli:

  • workflow() |> add_recipe(rec) |> add_model(spec) łączy wstępne przetwarzanie i modelowanie.
  • fit(wf, data = train) przygotowuje recepturę i trenuje model w jednym wywołaniu.
  • predict(fitted_wf, new_data) automatycznie wykonuje bake na nowych danych przed predykcją.
  • last_fit(wf, split) trenuje na zbiorze treningowym i ocenia na testowym — należy go używać do końcowej oceny modelu.
  • extract_fit_parsnip() i extract_recipe() pobierają elementy do analizy.
  • augment() dołącza predykcje do ramki danych, ułatwiając obliczanie metryk.
  • workflow_set() jednocześnie porównuje wiele kombinacji receptur i modeli.
# Canonical tidymodels workflow pattern
split    <- initial_split(data, prop = 0.8)
train    <- training(split)
test     <- testing(split)

rec  <- recipe(y ~ ., data = train) |> step_normalize(all_numeric_predictors())
spec <- rand_forest(trees = 300) |> set_engine('ranger') |> set_mode('regression')

wf   <- workflow() |> add_recipe(rec) |> add_model(spec)

final_res <- last_fit(wf, split)
collect_metrics(final_res)

Często zadawane pytania

Czy lekcja „Workflowy: łączenie recipes i modeli” jest bezpłatna?

Tak — pełny tekst „Workflowy: łączenie recipes i modeli” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu R Academy, przejdź na CoddyKit PRO. Kurs R Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Workflowy: łączenie recipes i modeli”?

Połącz wstępne przetwarzanie i model w pojedynczy obiekt workflow. Ćwiczysz R Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć R Academy?

Nie wymagamy żadnego doświadczenia. R Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Workflowy: łączenie recipes i modeli”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji R Academy?

Tak. Każda lekcja R Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Inżynieria cech za pomocą recipes
  2. Specyfikacje modeli za pomocą parsnip
  3. Workflowy: łączenie recipes i modeli
  4. Próbkowanie i walidacja krzyżowa za pomocą rsample
← Powrót do R Academy