R Academy · Oppitunti

Uudelleenotanta ja ristiinvalidointi rsample-paketilla

Arvioikaa malleja k-kertaisella ristiinvalidoinnilla, bootstrap-uudelleenotannalla ja sisäkkäisellä uudelleenotannalla.

Oppitunti 4/413 vaihetta

Uudelleenotanta ja ristiinvalidointi rsample-paketilla on ilmainen R Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu R Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. R Academy-kurssilla on yhteensä 4 oppituntia.

Miksi uudelleennäytteistää?

Yksi opetus-/testijako antaa mallin suorituskyvystä epätarkan arvion — testijoukkoon päätyneiden havaintojen suhteen saattoi käydä hyvä tai huono tuuri. Uudelleennäytteistys toistaa prosessin useita kertoja, jotta saadaan vakaa ja luotettava arvio siitä, miten malli yleistyy uuteen dataan.

library(rsample)

# Single split — performance estimate depends heavily
# on which 20% ended up as test data
split <- initial_split(mtcars, prop = 0.8)
train <- training(split)
test  <- testing(split)

cat('Train:', nrow(train), '| Test:', nrow(test))

initial_split()

initial_split(data, prop, strata) luo yhden satunnaisen jaon opetus- ja testijoukkoihin. Käyttäkää strata-argumenttia osittamiseen sarakkeen, kuten vastemuuttujan, perusteella, jotta luokkatasapaino säilyy molemmissa osioissa.

library(rsample)

# Stratified split by outcome variable
split <- initial_split(ames, prop = 0.8, strata = Sale_Price)

train <- training(split)
test  <- testing(split)

cat('Train rows:', nrow(train))
cat('Test rows:', nrow(test))

vfold_cv() — K-osa-ristiinvalidointi

vfold_cv(data, v = 10) luo 10 osaa. Data jaetaan 10 yhtä suureen osaan; yhdeksää käytetään opetukseen ja yhtä validointiin, ja vuorotellen kaikki osat käydään läpi. Näin saadaan 10 suorituskykyarviota, joiden keskiarvo antaa vakaan metriikan.

folds <- vfold_cv(housing_train, v = 10, strata = price)

# Each fold is a split object
print(folds)

# Inspect one fold
fold_1 <- folds$splits[[1]]
train_1 <- analysis(fold_1)
val_1   <- assessment(fold_1)
cat('Fold 1 — Train:', nrow(train_1), '| Val:', nrow(val_1))

fit_resamples()

fit_resamples(workflow, resamples, metrics) sovittaa workflown jokaisessa opetusosassa ja arvioi sen validointiosassa keräten pyydetyt metriikat. Se palauttaa tuloksista tibblen, jonka voitte tiivistää funktiolla collect_metrics().

library(tune)

folds <- vfold_cv(housing_train, v = 10)

res <- fit_resamples(
  wf,       # your workflow
  folds,
  metrics = metric_set(rmse, rsq)
)

# Average metric across all 10 folds
collect_metrics(res)

collect_metrics()

collect_metrics(resample_result) palauttaa siistin tibblen, joka tiivistää mallin suorituskyvyn kaikissa osissa. mean-sarake sisältää metriikan keskiarvon ja std_err keskivirheen, mikä auttaa arvioimaan tuloksen vaihtelua.

metrics_df <- collect_metrics(res)
print(metrics_df)

#   .metric .estimator   mean  n std_err .config
#   rmse    standard    24500  10   1200  Preprocessor1_Model1
#   rsq     standard    0.882  10  0.012  Preprocessor1_Model1

# Pull a single metric
collect_metrics(res) |>
  dplyr::filter(.metric == 'rmse') |>
  dplyr::pull(mean)

bootstraps() — Bootstrap-uudelleennäytteistys

bootstraps(data, times = 25) luo bootstrap-näytteitä: kukin näyte on alkuperäisen datan kokoinen satunnaisotos palauttaen. Havaintojen, joita ei poimittu, muodostama joukko on out-of-bag (OOB) -arviointijoukko. Bootstrapilla on suurempi varianssi kuin k-osa-menetelmällä, mutta se toimii hyvin pienillä aineistoilla.

boot_samples <- bootstraps(housing_train, times = 25, strata = price)

print(boot_samples)

# Average proportion of unique rows in each bootstrap
mean(sapply(boot_samples$splits, function(s) {
  nrow(analysis(s)) / nrow(housing_train)
}))

Monte Carlo -ristiinvalidointi

mc_cv(data, prop, times) luo times satunnaista jakoa, joissa kussakin prop osaa datasta käytetään opetukseen. Toisin kuin k-osa-menetelmässä, sama havainto voi esiintyä validointijoukossa useita kertoja. Tämä on hyödyllistä, kun tarvitsette enemmän uudelleennäytteistyskierroksia kuin k-osa-menetelmä tarjoaa.

mc_splits <- mc_cv(housing_train, prop = 0.8, times = 20)

res_mc <- fit_resamples(
  wf,
  mc_splits,
  metrics = metric_set(rmse, rsq)
)

collect_metrics(res_mc)

tune_grid() — Hyperparametrien haku

Kun workflow sisältää tune()-paikkamerkkejä, käyttäkää tune_grid(wf, resamples, grid)-funktiota hyperparametriarvojen ruudukon hakemiseen. Jokainen yhdistelmä arvioidaan kaikissa osissa, ja paras määritys valitaan funktiolla select_best().

rf_spec <- rand_forest(mtry = tune(), trees = tune()) |>
  set_engine('ranger') |>
  set_mode('regression')

wf_tune <- workflow() |> add_recipe(rec) |> add_model(rf_spec)

grid <- grid_regular(mtry(range = c(2, 10)), trees(range = c(100, 500)), levels = 3)

tune_res <- tune_grid(wf_tune, resamples = folds, grid = grid)
collect_metrics(tune_res) |> head()

select_best() ja finalize_workflow()

Virityksen jälkeen select_best(tune_res, metric) valitsee hyperparametriyhdistelmän, jolla on paras metriikan keskiarvo. finalize_workflow(wf, best_params) luo uuden workflown, jossa kyseiset arvot korvaavat tune()-paikkamerkit.

best_params <- select_best(tune_res, metric = 'rmse')
print(best_params)

# Substitute best values into the workflow
final_wf <- finalize_workflow(wf_tune, best_params)

# Fit on all training data, evaluate on test
final_fit <- last_fit(final_wf, split)
collect_metrics(final_fit)

Sisäkkäinen ristiinvalidointi

Kun virität myös hyperparametreja ja tarvitset aidosti harhattoman arvion, käyttäkää sisäkkäistä ristiinvalidointia: ulompi silmukka suorituskyvyn arviointiin ja sisempi silmukka viritykseen. Luokaa rsamplessa ulompi vfold_cv ja virittäkää malli kussakin ulommassa osassa sisempien osien avulla.

# Outer folds for unbiased evaluation
outer_folds <- vfold_cv(housing_train, v = 5)

# For each outer fold, tune on the inner training data
res_nested <- tune_grid(
  wf_tune,
  resamples = outer_folds,
  grid = 10,  # 10 random configurations
  metrics = metric_set(rmse)
)

collect_metrics(res_nested)

Uudelleennäytteistysmenetelmien vertailu

Jokaiseen uudelleennäytteistysmenetelmään liittyy kompromisseja. Valitkaa menetelmä aineiston koon ja käytettävissä olevan laskentabudjetin perusteella:

  • k-osa (v=10): pieni harha, kohtalainen varianssi. Useimpien ongelmien oletusvalinta.
  • Bootstrap: toimii erittäin pienillä aineistoilla; varianssi on suurempi kuin k-osa-menetelmässä.
  • Monte Carlo CV: joustavampi; sopii hyvin aikarajoitettuun viritykseen.
  • Toistettu k-osa: pienempi varianssi; käyttäkää, kun voitte käyttää enemmän laskentaresursseja.
# Repeated k-fold: 5-fold repeated 3 times = 15 models fitted
repeated_folds <- vfold_cv(housing_train, v = 5, repeats = 3)

res_rep <- fit_resamples(
  wf,
  repeated_folds,
  metrics = metric_set(rmse, rsq)
)

collect_metrics(res_rep)

Pikatarkistus

Mitä collect_metrics() palauttaa, kun sitä käytetään fit_resamples()-tulokseen?

Uudelleennäytteistyksen yhteenveto

Resampling and Cross Validation with rsample -osion tärkeimmät opit:

  • initial_split(data, prop, strata) luo ositetun opetus-/testijaon.
  • vfold_cv(data, v = 10) luo k-osa-ristiinvalidoinnin osat.
  • bootstraps(data, times) luo bootstrap-näytteitä pienille aineistoille.
  • fit_resamples(wf, folds, metrics) arvioi workflown kaikissa osissa.
  • collect_metrics() tiivistää tulokset keskiarvon ja keskivirheen avulla.
  • tune_grid() hakee hyperparametreja ja select_best() valitsee parhaan.
  • finalize_workflow() + last_fit() vievät virityksestä käyttöönottoon.
# Full rsample pipeline
split  <- initial_split(data, prop = 0.8, strata = y)
train  <- training(split)
folds  <- vfold_cv(train, v = 10)

res    <- fit_resamples(wf, folds, metrics = metric_set(rmse, rsq))
collect_metrics(res)

# After tuning
best   <- select_best(tune_res, metric = 'rmse')
fin_wf <- finalize_workflow(wf_tune, best)
last_fit(fin_wf, split) |> collect_metrics()
Aloita maksutta

Opi R tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
43
Oppitunnit
159

Usein kysytyt kysymykset

Onko oppitunti ”Uudelleenotanta ja ristiinvalidointi rsample-paketilla” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa R Academy-oppimispolun 3 oppituntia, myös oppitunnin “Uudelleenotanta ja ristiinvalidointi rsample-paketilla”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. R Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Uudelleenotanta ja ristiinvalidointi rsample-paketilla”?

Arvioikaa malleja k-kertaisella ristiinvalidoinnilla, bootstrap-uudelleenotannalla ja sisäkkäisellä uudelleenotannalla. Harjoittelet R Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni R Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin R Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Uudelleenotanta ja ristiinvalidointi rsample-paketilla”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä R Academy-oppitunnilla?

Kyllä. Jokainen R Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Ominaisuuksien suunnittelu recipes-paketilla
  2. Mallimääritykset parsnip-paketilla
  3. Workflow-työnkulut: reseptien ja mallien yhdistäminen
  4. Uudelleenotanta ja ristiinvalidointi rsample-paketilla
← Takaisin: R Academy