Come suddividere correttamente i set di dati non bilanciati che includono il test del treno e il set di convalida incrociata

Aug 16 2020

L'immagine sopra è ciò che sto cercando di replicare. Non so se lo sto facendo nel modo giusto. Sto lavorando con il set di dati FakeNewsChallenge ed è estremamente sbilanciato, e sto cercando di replicare e migliorare un metodo utilizzato in un documento.


D'accordo - 7,36%

Non sono d'accordo - 1,68%

Discuti - 17,82%

Non collegati - 73,13%

Sto suddividendo i dati in questo modo:

(dividere il set di dati in una divisione 67/33)

  • treno 67%, test 33%

(dividere la formazione oltre 80/20 per la convalida)

  • formazione 80%, convalida 20%

(Quindi suddividere l'addestramento e la convalida utilizzando il set di convalida incrociata 3 volte)

Per inciso, ottenere quell'1,68% di disaccordo e d'accordo è stato estremamente difficile.


È qui che ho un problema perché non ha assolutamente senso per me. Il set di convalida creato nella divisione 80/20 viene stratificato anche nella 5 volte?

Ecco dove mi trovo attualmente:


Dividi i dati in 67% Training Set e 33% Test Set

x_train1, x_test, y_train1, y_test = train_test_split(x, y, test_size=0.33)

x_train2, x_val, y_train2, y_val = train_test_split(x_train1, y_train1, test_size=0.20)

skf = StratifiedKFold(n_splits=3, shuffle = True)
skf.getn_splits(x_train2, y_train2)

for train_index, test_index in skf.split(x_train2, y_train2):
  x_train_cros, x_test_cros = x_train2[train_index], x_train2[test_index]
  y_train_cros, y_test_cros = y_train2[train_index], y_train[test_index]

Eseguirò di nuovo skf anche per il set di convalida? Dove sono i test set di test creati da skf utilizzati nel modello sequenziale?


Citazione per il metodo che sto usando:

Thota, Aswini; Tilak, Priyanka; Ahluwalia, Simrat; e Lohia, Nibrat (2018) "Fake News Detection: A Deep Learning Approach", SMU Data Science Review: Vol. 1: n. 3, articolo 10. Disponibile su:https://scholar.smu.edu/datasciencereview/vol1/iss3/10

Risposte

2 SuryaLohia. Aug 16 2020 at 06:14

Devi aggiungere un altro parametro nella funzione 'train_test_split ()':

x_train1, x_test, y_train1, y_test = train_test_split(x, y, test_size=0.33, stratify = y)

Questo ti darà una distribuzione equa di tutte le categorie di destinazione.