Como dividir corretamente o conjunto de dados desequilibrado incorporando teste de trem e conjunto de validação cruzada

Aug 16 2020

A imagem acima é o que estou tentando replicar. Só não sei se estou fazendo isso da maneira certa. Estou trabalhando com o conjunto de dados FakeNewsChallenge e é extremamente desequilibrado, e estou tentando replicar e melhorar um método usado em um papel.


Concordo - 7,36%

Discordo - 1,68%

Discutir - 17,82%

Não relacionado - 73,13%

Estou dividindo os dados desta forma:

(dividir o conjunto de dados em 67/33)

  • treinar 67%, testar 33%

(dividir o treinamento 80/20 para validação)

  • treinamento 80%, validação 20%

(Em seguida, divida o treinamento e a validação usando o conjunto de validação cruzada 3 vezes)

À parte, obter aquele 1,68% de discordar e concordar tem sido extremamente difícil.


É aqui que estou tendo um problema, pois isso não faz sentido para mim. O conjunto de validação criado na divisão 80/20 está sendo estratificado também em 5x?

Aqui é onde estou atualmente:


Divida os dados em 67% de conjunto de treinamento e 33% de conjunto de teste

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]

Eu também executaria skf novamente para o conjunto de validação? Onde estão os conjuntos de teste de teste de skf criados sendo usados ​​no modelo sequencial?


Citação para o método que estou usando:

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

Respostas

2 SuryaLohia. Aug 16 2020 at 06:14

Você precisa adicionar mais um parâmetro na função 'train_test_split ()':

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

Isso lhe dará distribuição igual de todas as categorias de destino.