Как правильно разделить несбалансированный набор данных, включающий тестовый поезд и набор перекрестной проверки
Согласен - 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
Ответы
Вам нужно добавить еще один параметр в функцию train_test_split ():
x_train1, x_test, y_train1, y_test = train_test_split(x, y, test_size=0.33, stratify = y)
Это даст вам равное распределение всех целевых категорий.