Convalida incrociata di K-Fold | Guida per la convalida incrociata di K-Fold in R

Contenuti

Requisiti precedenti: Linguaggio di programmazione R di base e conoscenza di base della classificazione

Mentre l'approccio del set di convalida funziona dividendo il set di dati una volta, k-Fold lo fa cinque o dieci volte. Immagina di eseguire l'approccio del set di convalida dieci volte utilizzando un set di dati diverso.

Diciamo che abbiamo 100 righe di dati. Li dividiamo casualmente in dieci gruppi di pieghe. Ogni piega sarà composta da circa 10 righe di dati. El primer pliegue se utilizará como conjunto de validación y el resto es para el conjunto de addestramento. Quindi addestriamo il nostro modello utilizzando questo set di dati e calcoliamo la precisione o la perdita. Quindi ripetiamo questo processo ma usando una piega diversa per il set di convalida. Guarda l'immagine qui sotto.

70068k-fold20cv-9297840

Convalida incrociata di K-Fold. Immagine dell'autore

Passiamo al codice

Le librerie che usiamo sono queste due:

biblioteca(ordinatoverso) 
biblioteca(caret)

I dati utilizzati qui sono dati sulle malattie cardiache in terapia intensiva che possono essere scaricati all'indirizzo Kaggle. Puoi anche utilizzare qualsiasi dato di classificazione per questo esperimento.

dati <- leggi.csv("../input/heart-malattia-uci/heart.csv")
testa(dati)

Ecco le prime sei righe dei dati caricati. Tiene trece predictores y la última columna es la variabile de respuesta. Puoi anche controllare le ultime righe usando la funzione tail ().

55736screen20shot202021-03-1120at2018-53-15-6978641

Distribuzione dei dati

Qui vogliamo confermare che la distribuzione tra i dati di due etichette non è molto diversa. Perché set di dati sbilanciati possono portare a una precisione sbilanciata. Ciò significa che il tuo modello predirà sempre verso una singola etichetta., o predice sempre 0 oh 1.

storico(dati$target,col="corallo")
prop.table(tavolo(dati$target))
72182screen20shot202021-03-1420at2014-59-04-5300420

Questo grafico mostra che il nostro set di dati è leggermente sbilanciato ma comunque abbastanza buono. Ha un rapporto di 46:54. Dovresti iniziare a preoccuparti se il tuo set di dati è più di 60% dei dati in una classe. Quindi, puoi usare SMOTE per gestire un set di dati sbilanciato.

Il k-fold

set.seme(100)
trctrl <- trainControl(metodo = "CV", numero = 10, savePrediction=VERO)
nb_fit <- treno(fattore(obbiettivo) ~., dati = dati, metodo = "ingenuo_bayes", trControl=trctrl, tuneLength = 0)
nb_fit

La prima riga è impostare il seme dello pseudo-casuale in modo che lo stesso risultato possa essere riprodotto. Puoi usare qualsiasi numero per il valore iniziale.

Prossimo, possiamo impostare l'impostazione k-Fold nella funzione trainControl (). Impostare il parametro del metodo su "cv" e il parametro numerico su 10. Significa che impostiamo la convalida incrociata con dieci pieghe. Possiamo impostare il numero di piegatura con qualsiasi numero, ma il modo più comune è impostarlo su cinque o dieci.

La funzione del treno () viene utilizzato per determinare il metodo che usiamo. Qui usiamo il metodo Naive Bayes e impostiamo tuneLength a zero perché ci concentriamo sulla valutazione del metodo su ogni piega. También podemos establecer tuneLength si queremos hacer el ajuste de parametri durante la validación cruzada. Ad esempio, se usiamo il metodo K-NN e vogliamo analizzare quanti K sono i migliori per il nostro modello.

Puoi vedere il metodo supportato in Documentazione R.

Tieni presente che la convalida incrociata di k-Fold può richiedere del tempo perché esegui il processo di formazione dieci volte.

96911screen20shot202021-03-1220at2022-04-09-5104282

Stamperà i dettagli sulla console una volta terminato. La precisione mostrata sulla console è la precisione media di tutte le pieghe di allenamento. Possiamo vedere che il nostro modello ha una precisione media di 83%.

Distribuire il k-Fold

Possiamo determinare che il nostro modello funziona bene in ogni piega se osserviamo la precisione di ogni piega.. Per fare questo, Assicurarsi di configurare il comando savePredictions true nella funzione trainControl ().

pred <- nb_fit$pred
pred$equal <- ifelse(pred$pred == pred$obs, 1,0)
ogni volta <- pred %>%                                        
  group_by(Ricampionare) %>%                         
  summarise_at(Vars(uguale),                     
               elenco(Precisione = media))              
ogni volta

Ecco il grafico di precisione in ogni piega.

43261screen20shot202021-03-1220at2022-04-18-3228982

Possiamo anche tracciarlo sul grafico per renderlo più facile da analizzare. In questo caso, usiamo il box plot per rappresentare le nostre precisioni.

ggplot(dati=ogni volta, aes(x=Ricampiona, y=Precisione, gruppo=1)) +
geom_boxplot(colore="marrone") +
geom_point() +
theme_minimal()

84001screen20shot202021-03-1420at2015-27-02-3273577

Possiamo vedere che ciascuna delle pieghe raggiunge una precisione che non differisce molto l'una dall'altra. La precisione più bassa è 72,58%, e anche nel box plot, non vediamo valori anomali. Il che significa che il nostro modello funzionava bene con la convalida incrociata di k volte.

Qual è il prossimo

  • Prova un numero diverso di pieghe
  • Effettuare un'impostazione dei parametri
  • Usa altri set di dati e metodi

Breve biografia dell'autore

Il mio nome è Muhammad Arnold, un appassionato di machine learning e data science. Attualmente studentessa magistrale in informatica in Indonesia.

Il supporto mostrato in questo articolo non è di proprietà di DataPeaker e viene utilizzato a discrezione dell'autore.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.