So teilen Sie einen unausgeglichenen Datensatz mit Zugtest und Kreuzvalidierungssatz korrekt auf

Aug 16 2020

Das Bild oben ist das, was ich zu replizieren versuche. Ich weiß nur nicht, ob ich es richtig mache. Ich arbeite mit dem FakeNewsChallenge-Dataset und seinem extrem unausgeglichenen Datensatz und versuche, eine in einem Papier verwendete Methode zu replizieren und zu verbessern.


Zustimmen - 7,36%

Nicht einverstanden - 1,68%

Diskutieren Sie - 17,82%

Unabhängig - 73,13%

Ich teile die Daten folgendermaßen auf:

(Datensatz in 67/33 Split aufteilen)

  • Zug 67%, Test 33%

(Split Training weitere 80/20 zur Validierung)

  • Training 80%, Validierung 20%

(Teilen Sie dann Training und Validierung mit einem 3-fachen Kreuzvalidierungssatz auf.)

Abgesehen davon war es äußerst schwierig, 1,68% der Befragten nicht zuzustimmen und zuzustimmen.


Hier habe ich ein Problem, da es für mich keinen Sinn ergibt. Wird der im 80/20-Split erstellte Validierungssatz auch im 5-fachen geschichtet?

Hier bin ich gerade:


Teilen Sie die Daten in 67% Trainingsset und 33% Testset auf

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]

Würde ich skf auch für das Validierungsset erneut ausführen? Wo werden die Test-Test-Sets von skf erstellt, die im sequentiellen Modell verwendet werden?


Zitat für die Methode, die ich verwende:

Thota, Aswini; Tilak, Priyanka; Ahluwalia, Simrat; und Lohia, Nibrat (2018) "Fake News Detection: Ein Deep-Learning-Ansatz", SMU Data Science Review: Vol. 1: Nr. 3, Artikel 10. Verfügbar unter:https://scholar.smu.edu/datasciencereview/vol1/iss3/10

Antworten

2 SuryaLohia. Aug 16 2020 at 06:14

Sie müssen der Funktion 'train_test_split ()' einen weiteren Parameter hinzufügen:

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

Dadurch erhalten Sie eine gleichmäßige Verteilung aller Zielkategorien.