Как правильно разделить несбалансированный набор данных, включающий тестовый поезд и набор перекрестной проверки

Aug 16 2020

Картинка выше - это то, что я пытаюсь воспроизвести. Я просто не знаю, правильно ли я поступаю. Я работаю с набором данных FakeNewsChallenge и его крайне несбалансированным, и я пытаюсь воспроизвести и улучшить метод, используемый в статье.


Согласен - 7,36%

Не согласен - 1,68%

Обсудить - 17.82%

Несвязанные - 73,13%

Я разделяю данные таким образом:

(разделить набор данных на 67/33)

  • тренинг 67%, тест 33%

(дальнейшее разделение обучения 80/20 для проверки)

  • обучение 80%, проверка 20%

(Затем разделите обучение и проверку с использованием трехкратного набора перекрестной проверки)

Кстати, получить 1,68% несогласных и согласных было чрезвычайно сложно.


Вот где у меня проблема, поскольку это не имеет для меня полного смысла. Является ли проверочный набор, созданный в разделении 80/20, стратифицированным также в 5-ти кратном?

Вот где я сейчас нахожусь:


Разделить данные на 67% обучающий набор и 33% тестовый набор

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]

Могу ли я снова запустить skf для набора проверки? Где созданные тестовые наборы из skf используются в последовательной модели?


Цитата для метода, который я использую:

Тота, Ашвини; Тилак, Приянка; Ахлувалия, Симрат; и Лохиа, Нибрат (2018) «Обнаружение фейковых новостей: подход глубокого обучения», SMU Data Science Review: Vol. 1: № 3, статья 10. Доступно по адресу:https://scholar.smu.edu/datasciencereview/vol1/iss3/10

Ответы

2 SuryaLohia. Aug 16 2020 at 06:14

Вам нужно добавить еще один параметр в функцию train_test_split ():

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

Это даст вам равное распределение всех целевых категорий.