Jak poprawnie podzielić niezrównoważony zbiór danych, obejmujący test pociągu i zestaw do weryfikacji krzyżowej

Aug 16 2020

Powyższe zdjęcie jest tym, co próbuję odtworzyć. Po prostu nie wiem, czy podchodzę do tego we właściwy sposób. Pracuję ze zbiorem danych FakeNewsChallenge i jest bardzo niezrównoważony, a także próbuję odtworzyć i ulepszyć metodę zastosowaną w artykule.


Zgadzam się - 7,36%

Nie zgadzam się - 1,68%

Dyskusja - 17,82%

Niepowiązane - 73,13%

Dzielę dane w ten sposób:

(podziel zbiór danych na podział 67/33)

  • pociąg 67%, test 33%

(podzielone szkolenie dalej 80/20 do walidacji)

  • szkolenie 80%, walidacja 20%

(Następnie podziel szkolenie i walidację za pomocą 3-krotnego zestawu do walidacji krzyżowej)

Nawiasem mówiąc, uzyskanie tego 1,68% nie zgadzających się i zgadzających się było niezwykle trudne.


Tutaj mam problem, ponieważ nie ma to dla mnie całkowitego sensu. Czy zestaw walidacyjny utworzony w podziale 80/20 jest również stratyfikowany w przypadku pięciokrotności?

Tutaj jestem obecnie:


Podziel dane na 67% zestaw treningowy i 33% zestaw testowy

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]

Czy uruchomiłbym ponownie skf również dla zestawu walidacyjnego? Gdzie zestawy testowe utworzone przez SKF są używane w modelu sekwencyjnym?


Odniesienie do metody, której używam:

Thota, Aswini; Tilak, Priyanka; Ahluwalia, Simrat; i Lohia, Nibrat (2018) „Fake News Detection: A Deep Learning Approach”, SMU Data Science Review: Vol. 1: Nr 3, Artykuł 10. Dostępne pod adresem:https://scholar.smu.edu/datasciencereview/vol1/iss3/10

Odpowiedzi

2 SuryaLohia. Aug 16 2020 at 06:14

Musisz dodać jeszcze jeden parametr w funkcji „train_test_split ()”:

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

Zapewni to równy rozkład wszystkich kategorii docelowych.