(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.
Veți învăța cum să estimați performanța modelului cu mlr3 Utilizarea tehnicilor de eșantionare, cum ar fi validarea încrucișată de 5 ori. În plus, veți compara modelul K-NN cu un model de regresie logistică.
Lucrăm cu datele de credit germane. Puteți crea manual corespunzător mlr3 sarcină așa cum am făcut înainte sau folosim o sarcină predefinită, care este deja inclusă în mlr3 pachet (puteți să vă uitați la ieșirea din as.data.table(mlr_tasks) Pentru a vedea ce alte sarcini predefinite care pot fi utilizate pentru a juca în jur sunt incluse în mlr3 pachet).
library(mlr3verse)
Lade nötiges Paket: mlr3
task = tsk("german_credit")
task
(1000 x 21): German Credit * Target: credit_risk * Properties: twoclass * Features (20): - fct (14): credit_history, employment_duration, foreign_worker, housing, job, other_debtors, other_installment_plans, people_liable, personal_status_sex, property, purpose, savings, status, telephone - int (3): age, amount, duration - ord (3): installment_rate, number_credits, present_residence
task$positive # (check the positive class)
Mai întâi creăm două mlr3 studenți, o regresie logistică și un elev KNN. Apoi comparăm performanța lor prin reeșantionare.
Creați cursanții
Creați un elev de regresie logistică (stocați -l ca un obiect R numit log_reg) și Knn Learner cu
(stocați -l ca un obiect R numit knn)
Afișați Sugestia 1:
Verifica as.data.table(mlr_learners) pentru a găsi elevul corespunzător.
Afișați Sugestia 2:
Asigurați -vă că aveți kknn pachet instalat.
log_reg = lrn("classif.log_reg")
knn = lrn("classif.kknn", k = 5)
Configurați o instanță de eșantionare
Folosiți mlr3 Pentru a configura o instanță de eșantionare și a o stoca ca un obiect R numit cv5. Aici, ne propunem să validare încrucișată de 5 ori. Un tabel cu posibile tehnici de eșantionare implementate în mlr3 poate fi arătat privind as.data.table(mlr_resamplings).
Afișați Sugestia 1:
Uită -te la masa returnată as.data.table(mlr_resamplings) și folosiți rsmp Funcție pentru a configura o instanță de validare încrucișată de 5 ori. Stocați rezultatul rsmp Funcție într -un obiect R numit cv5.
Afișați Sugestia 2:
rsmp("cv") În mod implicit, stabilește o instanță de validare încrucișată de 10 ori. Numărul de pliuri poate fi setat folosind un argument suplimentar (consultați params coloană din as.data.table(mlr_resamplings))
cv5 = rsmp("cv", folds = 5)
cv5
: Cross-Validation * Iterations: 5 * Instantiated: FALSE * Parameters: folds=5
Nota: Instantiated: FALSE înseamnă că am creat doar instanța de eșantionare și nu am aplicat încă tehnica de eșantionare la o sarcină.
Rulați reeșantionarea
După ce a creat o instanță de eșantionare, folosiți -o pentru a aplica tehnica de eșantionare aleasă pentru ambii studenți create anterior.
Afișați Sugestia 1:
Trebuie să furnizați sarcina, elevul și instanța de eșantionare creată anterior ca argumente pentru resample funcţie. Vedea ?resample Pentru detalii și exemple suplimentare.
Afișați Sugestia 2:
Ingredientele cheie pentru resample() sunt o sarcină (creată de tsk()), un elev (creat de lrn()) și o strategie de eșantionare (creată de rsmp()), de exemplu,
resample(task = task, learner = log_reg, resampling = cv5)
res_log_reg = resample(task, log_reg, cv5)
INFO (14:51:01.363) (mlr3) Applying learner 'classif.log_reg' on task 'german_credit' (iter 1/5) INFO (14:51:04.850) (mlr3) Applying learner 'classif.log_reg' on task 'german_credit' (iter 2/5) INFO (14:51:07.933) (mlr3) Applying learner 'classif.log_reg' on task 'german_credit' (iter 3/5) INFO (14:51:10.935) (mlr3) Applying learner 'classif.log_reg' on task 'german_credit' (iter 4/5) INFO (14:51:13.888) (mlr3) Applying learner 'classif.log_reg' on task 'german_credit' (iter 5/5)
res_knn = resample(task, knn, cv5)
INFO (14:51:15.267) (mlr3) Applying learner 'classif.kknn' on task 'german_credit' (iter 1/5)
Warning in model.matrix.default(mt2, test, contrasts.arg = contrasts.arg): Variable 'credit_risk' fehlt, ihre Kontraste werden ignoriert
INFO (14:51:16.672) (mlr3) Applying learner 'classif.kknn' on task 'german_credit' (iter 2/5)
Warning in model.matrix.default(mt2, test, contrasts.arg = contrasts.arg): Variable 'credit_risk' fehlt, ihre Kontraste werden ignoriert
INFO (14:51:17.940) (mlr3) Applying learner 'classif.kknn' on task 'german_credit' (iter 3/5)
Warning in model.matrix.default(mt2, test, contrasts.arg = contrasts.arg): Variable 'credit_risk' fehlt, ihre Kontraste werden ignoriert
INFO (14:51:19.053) (mlr3) Applying learner 'classif.kknn' on task 'german_credit' (iter 4/5)
Warning in model.matrix.default(mt2, test, contrasts.arg = contrasts.arg): Variable 'credit_risk' fehlt, ihre Kontraste werden ignoriert
INFO (14:51:20.158) (mlr3) Applying learner 'classif.kknn' on task 'german_credit' (iter 5/5)
Warning in model.matrix.default(mt2, test, contrasts.arg = contrasts.arg): Variable 'credit_risk' fehlt, ihre Kontraste werden ignoriert
res_log_reg
with 5 resampling iterations task_id learner_id resampling_id iteration prediction_test warnings errors german_credit classif.log_reg cv 1 0 0 german_credit classif.log_reg cv 2 0 0 german_credit classif.log_reg cv 3 0 0 german_credit classif.log_reg cv 4 0 0 german_credit classif.log_reg cv 5 0 0
res_knn
with 5 resampling iterations task_id learner_id resampling_id iteration prediction_test warnings errors german_credit classif.kknn cv 1 0 0 german_credit classif.kknn cv 2 0 0 german_credit classif.kknn cv 3 0 0 german_credit classif.kknn cv 4 0 0 german_credit classif.kknn cv 5 0 0
Evaluare
Calculați precizia clasificării încrucișate a ambelor modele. Care elev a avut performanțe mai bune?
Afișați Sugestia 1:
Utilizare msr("classif.acc") și aggregate Metoda obiectului de eșantionare.
Afișați Sugestia 2:
res_knn$aggregate(msr(...)) Pentru a obține precizia clasificării medie pe toate pliurile.
res_knn$aggregate(msr("classif.acc"))
res_log_reg$aggregate(msr("classif.acc"))
NOTĂ: Utilizați de exemplu res_knn$score(msr(...)) Pentru a privi rezultatele fiecărui pliu individual.
Acum putem aplica diferite metode de eșantionare pentru a estima performanța diferitelor cursanți și pentru a le compara în mod corect. Acum am învățat cum să obținem o estimare mai bună (în ceea ce privește variația) a performanței modelului nostru, în loc să facem o simplă despărțire de tren și test. Acest lucru ne permite să comparăm în mod corect diferiți cursanți.
