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 fittingadd_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 plotextract_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()iextract_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
- Inżynieria cech za pomocą recipes
- Specyfikacje modeli za pomocą parsnip
- Workflowy: łączenie recipes i modeli
- Próbkowanie i walidacja krzyżowa za pomocą rsample