(Acest articol a fost publicat pentru prima dată pe mlr-orgși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
Vă rugăm să activați JavaScript și să reîncărcați pagina,
Sau descărcați fișierele sursă de la GitHub și rulați codul local.
Aplicați ceea ce ați învățat despre utilizarea conductelor pentru pre-procesare eficientă și pregătire model pe o problemă de regresie.
În acest exercițiu, dorim să modelăm prețurile de vânzare a casei în King County din statul Washington, SUA.
set.seed(124) library(mlr3verse) library(mlr3tuningspaces) data("kc_housing", package = "mlr3data")
Facem mai întâi câteva funcții simple de pre-procesare:
# Transform time to numeric variable: library(anytime) dates = anytime(kc_housing$date) kc_housing$date = as.numeric(difftime(dates, min(dates), units = "days")) # Scale prices: kc_housing$price = kc_housing$price / 1000 # For this task, delete columns containing NAs: yr_renovated = kc_housing$yr_renovated sqft_basement = kc_housing$sqft_basement kc_housing(,c(13, 15)) = NULL # Create factor columns: kc_housing(,c(8, 14)) = lapply(c(8, 14), function(x) {as.factor(kc_housing(,x))}) # Get an overview: str(kc_housing)
'data.frame': 21613 obs. of 18 variables: $ date : num 164 221 299 221 292 ... $ price : num 222 538 180 604 510 ... $ bedrooms : int 3 3 2 4 3 4 3 3 3 3 ... $ bathrooms : num 1 2.25 1 3 2 4.5 2.25 1.5 1 2.5 ... $ sqft_living : int 1180 2570 770 1960 1680 5420 1715 1060 1780 1890 ... $ sqft_lot : int 5650 7242 10000 5000 8080 101930 6819 9711 7470 6560 ... $ floors : num 1 2 1 1 1 1 2 1 1 2 ... $ waterfront : Factor w/ 2 levels "FALSE","TRUE": 1 1 1 1 1 1 1 1 1 1 ... $ view : int 0 0 0 0 0 0 0 0 0 0 ... $ condition : int 3 3 3 5 3 3 3 3 3 3 ... $ grade : int 7 7 6 7 8 11 7 7 7 7 ... $ sqft_above : int 1180 2170 770 1050 1680 3890 1715 1060 1050 1890 ... $ yr_built : int 1955 1951 1933 1965 1987 2001 1995 1963 1960 2003 ... $ zipcode : Factor w/ 70 levels "98001","98002",..: 67 56 17 59 38 30 3 69 61 24 ... $ lat : num 47.5 47.7 47.7 47.5 47.6 ... $ long : num -122 -122 -122 -122 -122 ... $ sqft_living15: int 1340 1690 2720 1360 1800 4760 2238 1650 1780 2390 ... $ sqft_lot15 : int 5650 7639 8062 5000 7503 101930 6819 9711 8113 7570 ... - attr(*, "index")= int(0)
Înainte de a antrena un model, să rezervăm câteva date pentru evaluarea modelului nostru ulterior:
task = as_task_regr(kc_housing, target = "price") split = partition(task, ratio = 0.6) tasktrain = task$clone() tasktrain$filter(split$train) tasktest = task$clone() tasktest$filter(split$test)
În datele din județul King, există două caracteristici categoriale codificate ca factor
:
Evident, waterfront
este o caracteristică scăzută a cardinalității potrivite pentru codificarea cu un singur cald și zipcode
este o caracteristică foarte mare de cardinalitate. Prin urmare, ar avea sens să creăm o conductă care să prelucreze mai întâi fiecare variabilă a factorului cu impact sau codificare cu un singur cald, în funcție de cardinalitatea caracteristicilor.
Filtru Algorithms Selectați caracteristici prin alocarea scorurilor numerice fiecărei caracteristici, de exemplu, corelația între caracteristici și variabila țintă, utilizați acestea pentru a clasifica caracteristicile și selectați un subset de caracteristici bazat pe clasament. Caracteristicile cărora li se atribuie scoruri mai mici sunt apoi omise în etapele ulterioare de modelare. Toate filtrele sunt implementate prin intermediul pachetului mlr3filters
. O abordare de filtru foarte simplă ar putea arăta astfel:
- Calculați coeficientul de corelație între fiecare caracteristică și o variabilă țintă numerică
- Selectați cele 10 caracteristici cu cea mai mare corelație pentru etape de modelare ulterioară.
O strategie diferită ar putea implica selectarea numai a caracteristicilor peste un anumit prag de corelație cu rezultatul. Pentru o listă completă a tuturor metodelor de filtrare implementate, aruncați o privire la https://mlr3filters.mlr-org.com.
Exercițiul 1: Creați o conductă complexă
Creați o conductă cu următoarea secvență de elemente:
- Fiecare variabilă a factorului este pre-procesată cu o codificare unică sau cu impact, în funcție de cardinalitatea caracteristicii.
- Un selector de filtrare este aplicat la caracteristici, sortându -le după coeficientul lor de corelație Pearson și selectând cele 3 caracteristici cu cea mai mare corelație.
- O pădure aleatorie (
regr.ranger
) este instruit.
Conducta trebuie să fie reglată într -un autotuner
cu căutare aleatorie, CV de două ori și MSE ca măsură de performanță și un spațiu de căutare din mlr3tuningspaces
Dar fără a regla hiperparameterul replace
. Antrenează autotuner
pe datele de instruire și evaluați performanța pe datele testului de deținere.
Sugestie 1:
Vezi pagina de ajutor din lts
din mlr3tuningspaces
.
Sugestie 2:
Din moment ce dorim să lucrăm imediat cu spațiul de căutare, este recomandat să introducem Learner
direct. Asigurați -vă că elevul folosește valoarea implicită pentru replace
hiperparameter.
Exercițiul 2: Câștig de informații
O metodă de filtrare alternativă este câștigul informațional (https://mlr3filters.mlr-org.com/reference/mlr_filters_information_gain.html). Recreați conducta din exercițiul 1, dar utilizați câștigul de informații ca filtru. Din nou, selectați cele trei caracteristici cu cel mai mare câștig de informații. Antrenează autotuner
pe datele de instruire și evaluați performanța pe datele testului de deținere.
Exercițiul 3: Corelația Pearson vs. câștigul de informații
Primim următoarele scoruri de performanță pentru cele două metode de filtrare:
score_rf_cor
score_rf_info
După cum puteți vedea, filtrul de corelație Pearson pare să selecteze funcții care au ca rezultat un model mai bun. Pentru a investiga de ce s -ar fi putut întâmpla asta, inspectați autotunerii instruiți. Ce caracteristici au fost selectate? Având în vedere caracteristicile selectate, motivul în ce măsură metodele de filtrare pot fi mai utile decât altele în determinarea funcțiilor de selectat pentru procesul de formare a modelului.
Am aflat despre conducte mai complexe, inclusiv metode de pre-procesare, cum ar fi codificarea variabilă și filtrarea caracteristicilor.