Реально ли иметь тренировочный набор <тестовый набор после недостаточной выборки в классе большинства? - PullRequest
1 голос
/ 13 марта 2020

У меня есть набор данных из 1500 записей с двумя несбалансированными классами. Класс 0 - 1300 записей, в то время как Класс 1 - 200 записей, следовательно, отношение ard 6,5: 1.

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

Поэтому я решил провести выборку класса 0. Мои шаги следующие:

  1. Произвольно разделить набор данных на набор обучений и тестов в соотношении 7: 3 (отсюда 1050 для тренировок и 450 для тестов.)

  2. Сейчас набор поездов содержит ~ 900 данных класса 0 ~ 100 для класса 1. Я сгруппировал ~ 900 данных класса 0 и подобрал их (пропорционально) до ~ 100 записей.

Так что теперь поездный набор ~ 100 Класс 0 + ~ 100 Класс 1 = всего ~ 200 записей, в то время как тестовый набор составляет 70 Класс 0 + 380 Класс 1 = всего 450 записей.

Вот мои вопросы:

1) Мои шаги действительны? Сначала я разделил поезд / тест, а затем провел выборку большинства классов поездов.

2) Теперь мой набор поездов (~ 200) <тестовый набор (450). Имеет ли это смысл? </p>

3) Производительность пока не очень хорошая. Точность 0,34, отзыв 0,72, а показатель f1 0,46. Есть ли способ улучшить? Нужно ли использовать CV?

Большое спасибо за помощь!

1 Ответ

0 голосов
/ 13 марта 2020

1) Мои шаги действительны? Сначала я делю поезд / тест, а затем отбираю выборку из класса большинства набора поездов.

Вы должны разделить train и test, чтобы баланс класса сохранялся в обоих . Если в вашем целом наборе данных отношение равно 6.5:1, оно должно быть одинаковым как в train, так и test.

Да, вы должны разбить его перед недостаточной выборкой (не нужно занижать выборку test случаев), просто не забудьте отслеживать несколько метрик (например, f1 score, recall, precision уже упоминались, и вы должны будь в порядке с этим), так как ты тренируешься на распределении, отличном от test.

2) Теперь мой поездный набор (~ 200) <тестовый набор (450). Имеет ли это смысл? </p>

Да, это так. Вы также можете go для oversampling в наборе обучающих данных (например, minority класс повторяется случайным образом, чтобы соответствовать числу примеров из majority). В этом случае вы также должны разделить ранее , иначе вы можете испортить ваш test набор с training семплами, что еще более пагубно.

3) Производительность все еще не очень хорошо. Точность 0,34, отзыв 0,72, а показатель f1 0,46. Есть ли способ улучшить? Должен ли я использовать CV?

В зависимости от конкретной проблемы c, что я буду делать:

  • oversampling вместо undersampling - нейронные сети нуждаются в много данных, у вас сейчас не так много сэмплов
  • попробуйте другие не-DL алгоритмы (может быть SVM, если у вас много функций? RandomForest в противном случае может быть хорошей ставкой)
  • в противном случае выполните тонкую настройку вашей нейронной сети (обратите внимание, особенно на learning rate, используйте CV или связанные методы, если у вас есть время)
  • попробуйте использовать некоторые предварительно обученные нейронные сети, если они доступны для задачи в рука
...