Comment diviser correctement un jeu de données déséquilibré intégrant un test de train et un jeu de validation croisée
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
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.