Comment diviser correctement un jeu de données déséquilibré intégrant un test de train et un jeu de validation croisée

Aug 16 2020

L'image ci-dessus est ce que j'essaie de reproduire. Je ne sais tout simplement pas si je vais procéder de la bonne manière. Je travaille avec le jeu de données FakeNewsChallenge et son extrêmement déséquilibré, et j'essaie de reproduire et d'améliorer une méthode utilisée dans un article.


D'accord - 7,36%

Pas d'accord - 1,68%

Discuter - 17,82%

Non apparenté - 73,13%

Je divise les données de cette manière:

(ensemble de données divisé en 67/33)

  • train 67%, test 33%

(formation fractionnée 80/20 pour validation)

  • formation 80%, validation 20%

(Puis fractionner la formation et la validation en utilisant un ensemble de validation croisée à 3 volets)

En passant, obtenir ce 1,68% de désaccord et d'accord a été extrêmement difficile.


C'est là que j'ai un problème car cela n'a pas de sens pour moi. L'ensemble de validation créé dans le fractionnement 80/20 est-il également stratifié dans le cinquième?

Voici où j'en suis actuellement:


Diviser les données en 67% de jeu de formation et 33% de jeu de test

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]

Est-ce que j'exécuterais à nouveau skf pour l'ensemble de validation? Où les ensembles de test de test créés par skf sont-ils utilisés dans le modèle séquentiel?


Citation de la méthode que j'utilise:

Thota, Aswini; Tilak, Priyanka; Ahluwalia, Simrat; et Lohia, Nibrat (2018) «Détection des fausses nouvelles: une approche d'apprentissage en profondeur», SMU Data Science Review: Vol. 1: n ° 3, article 10. Disponible à:https://scholar.smu.edu/datasciencereview/vol1/iss3/10

Réponses

2 SuryaLohia. Aug 16 2020 at 06:14

Vous devez ajouter un paramètre supplémentaire dans la fonction 'train_test_split ()':

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

Cela vous donnera une répartition égale de toutes les catégories cibles.