Uudelleenotanta ja ristiinvalidointi rsample-paketilla
Arvioikaa malleja k-kertaisella ristiinvalidoinnilla, bootstrap-uudelleenotannalla ja sisäkkäisellä uudelleenotannalla.
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 jaselect_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()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
- Ominaisuuksien suunnittelu recipes-paketilla
- Mallimääritykset parsnip-paketilla
- Workflow-työnkulut: reseptien ja mallien yhdistäminen
- Uudelleenotanta ja ristiinvalidointi rsample-paketilla