Cómo dividir correctamente un conjunto de datos no balanceado incorporando pruebas de trenes y un conjunto de validación cruzada

Aug 16 2020

La imagen de arriba es lo que estoy tratando de replicar. No sé si lo voy a hacer de la manera correcta. Estoy trabajando con el conjunto de datos de FakeNewsChallenge y está extremadamente desequilibrado, y estoy tratando de replicar y mejorar un método utilizado en un artículo.


De acuerdo - 7.36%

En desacuerdo - 1,68%

Discutir - 17,82%

No relacionado - 73,13%

Estoy dividiendo los datos de esta manera:

(dividir el conjunto de datos en una división 67/33)

  • entrenar 67%, probar 33%

(entrenamiento dividido más 80/20 para validación)

  • formación 80%, validación 20%

(Luego, divida el entrenamiento y la validación utilizando un conjunto de validación cruzada de 3 veces)

Aparte, conseguir ese 1,68% de desacuerdo y acuerdo ha sido extremadamente difícil.


Aquí es donde tengo un problema, ya que no tiene mucho sentido para mí. ¿El conjunto de validación creado en la división 80/20 se estratifica también en la quinta parte?

Aquí es donde estoy actualmente:


Divida los datos en 67% de conjunto de entrenamiento y 33% de conjunto de prueba

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]

¿Volvería a ejecutar skf para el conjunto de validación también? ¿Dónde se utilizan los conjuntos de prueba de prueba de skf en el modelo secuencial?


Cita del método que estoy usando:

Thota, Aswini; Tilak, Priyanka; Ahluwalia, Simrat; y Lohia, Nibrat (2018) "Detección de noticias falsas: un enfoque de aprendizaje profundo", SMU Data Science Review: vol. 1: No. 3, artículo 10. Disponible en:https://scholar.smu.edu/datasciencereview/vol1/iss3/10

Respuestas

2 SuryaLohia. Aug 16 2020 at 06:14

Necesita agregar un parámetro más en la función 'train_test_split ()':

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

Esto le dará una distribución equitativa de todas las categorías objetivo.