Como dividir corretamente o conjunto de dados desequilibrado incorporando teste de trem e conjunto de validação cruzada
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
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.