Процесс передискретизации данных для несбалансированной двоичной классификации - PullRequest
0 голосов
/ 27 июня 2018

У меня около 30% и 70% для класса 0 (класс меньшинства) и класса 1 (класс большинства). Поскольку у меня нет большого количества данных, я планирую пересмотреть класс меньшинства, чтобы сбалансировать классы, чтобы получить 50-50. Мне было интересно, следует ли проводить передискретизацию до или после разделения моих данных на наборы поездов и тестов. Обычно я видел, как это делалось до того, как разбить онлайн-примеры, например:

df_class0 = train[train.predict_var == 0]
df_class1 = train[train.predict_var == 1]
df_class1_over = df_class1.sample(len(df_class0), replace=True)
df_over = pd.concat([df_class0, df_class1_over], axis=0)

Однако, не означает ли это, что данные испытаний, скорее всего, будут иметь дублированные выборки из тренировочного набора (потому что мы излишне опробовали тренировочный набор)? Это означает, что производительность тестирования не обязательно будет на новых, невидимых данных. У меня все хорошо, но я хотел бы знать, что считается хорошей практикой. Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Мне было интересно, следует ли проводить передискретизацию до или после разделения моих данных на наборы поездов и тестов.

Это, безусловно, должно быть сделано после разбиения, т. Е. Оно должно применяться только к вашему обучающему набору, а не к проверочным и тестовым наборам; см. также мой соответствующий ответ здесь .

Обычно я видел, как это делалось до того, как разбить примеры в сети, как это

Из фрагмента кода, который вы показываете, совсем не очевидно, что это делается до разделения, как вы утверждаете. Это зависит от того, что именно здесь есть переменная train: если она является продуктом разбиения теста поезда, то избыточная выборка имеет место после действительно разбиения, как и должно быть.

Однако, не означает ли это, что данные испытаний, скорее всего, будут иметь дублированные выборки из тренировочного набора (потому что мы увеличили выборку учебного набора)? Это означает, что производительность тестирования не обязательно должна быть на новых, невидимых данных.

Собственно, это причина, по которой передискретизация должна выполняться после расщепления на поезд-тест, а не до.

(Однажды я был свидетелем случая, когда модельер изо всех сил пытался понять, почему он получил точность теста ~ 100%, намного выше, чем у обучающего; оказалось, что его начальный набор данных был полон дубликатов - никакого дисбаланса класса здесь, но идея похожа - и некоторые из этих дубликатов закончились в его тестовом наборе после разделения, конечно, не будучи новыми или невидимыми данными ...).

Я в порядке,

Вы не должны:)

0 голосов
/ 27 июня 2018

Из моего опыта это плохая практика. Как вы упомянули, тестовые данные должны содержать невидимые образцы, чтобы они не подходили и лучше оценивали процесс обучения. Если вам нужно увеличить размеры выборки - подумайте о возможностях преобразования данных. Например. классификация изображений человека / кошки, так как они симметричны, вы можете удвоить размер выборки, отразив изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...