Различный набор тестов и распределение обучающих наборов

15

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

Как я могу это сделать?

Пуджа
источник
Случайная выборочная выборка, случайная избыточная выборка, кластерная избыточная выборка, информированная избыточная выборка: метод избыточной выборки синтетического меньшинства, модифицированная методика синтетической избыточной выборки меньшинств (MSMOTE) и т. Д.
Aditya
Вам лучше пометить один из ответов как «Принятый ответ», если вас устраивает любой из них.
TwinPenguins

Ответы:

17

Большой вопрос, это то, что известно в парадигме машинного обучения как «Сдвиг ковариации», «Дрейф модели» или «Нестационарность» и так далее.

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

Для меня ваш вопрос относится к той же категории. Хотя у меня нет идеального решения (реализации, чтобы предложить), но я думаю, вы можете посмотреть:

  • Этот пост в блоге дает вам простой способ обработать выборку обучающих данных с помощью кода, предоставленного в Python!
  • Проверьте эту исследовательскую работу . Они предлагают , чтобы решить эту проблему путем reweighting обучающих данных , так что распределение обучения ближе к распределению теста с использованием Кульбак-Лейблер Важность процедуры оценки базы на « Кульбак-Лейблера дивергенция » теорема. Я не знаю, предоставляют ли они реализацию или ее можно легко реализовать, но я думаю, что это может стоить копать, поскольку это звучит профессионально, чтобы справиться с несоответствием распределения.

БЫСТРОЕ обновление (хорошее решение) : я нашел Python-реализацию алгоритма KLIEP этой исследовательской работы (последняя точка), чтобы найти эти веса. Это кажется простым в использовании! По сути, он повторяет выборку обучения путем помещения весов (с помощью алгоритма KLIEP), чтобы предположение о наличии аналогичного распределения обучающих и тестовых данных было максимально справедливым.

TwinPenguins
источник
5

Я хочу отобрать наблюдения из учебного набора, который очень похож на тестовый набор.

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

Обычно следует адаптировать свои тестовые данные к данным поезда (например, стандартизировать тестовые данные в соответствии с данными поезда ), а не наоборот. На практике вы не знаете свои тестовые данные.

Arnaud
источник
3

Подбор проб поездов не может быть лучшим решением!

Различия между тестовым / исполнительным набором и распределением / функциями тренировочного набора очень распространены в контролируемых учебных задачах (это одна из причин, по которой такие соревнования, как Kaggle, являются сложными). Вот почему мы говорим, что прошлые результаты могут (только) использоваться в качестве руководства для оценки будущих результатов, но это не указывает / не гарантирует их . Поэтому обобщаемые модели всегда были предпочтительнее, чем точно настроенные модели, которые могут очень хорошо работать на наборе поездов (под), но плохо работают с невидимыми данными.

Хотя такое различие является нормальным, слишком большой разрыв между прошлой и будущей выборкой можно назвать примерами дрейфа понятий, который сам по себе является активным исследовательским полем. Учитывая ваш вопрос, я не могу судить, что ваш случай - нормальный случай ОД или действительно происходит смещение концепции.

Вот мои предложения:

  1. Обучите несколько моделей с высокой способностью к обобщению. Используя начальную выборку из набора данных поезда, вы можете легко рассчитать смещение и дисперсию компонентов ошибок. Напомним, что вы ищете модель с низкой дисперсией (где изменения в данных будут иметь незначительное влияние на ее производительность), а не модели с низкой степенью смещения, но модели с высокой дисперсией (которые могут соответствовать вашему обучающему (под) набору). Теперь вы можете выбрать лучшие алгоритмы и сравнить их с тестовым набором. Обратите внимание, что во время тренировок мы не должны смотреть на тестовый набор!

  2. Вместо нескольких случайных понижений, ищите стандартизацию / нормализацию и выбор / разработку функций. Эти методы могут быть полезны при изучении более общих моделей. Например, иногда диапазон области признаков может меняться со временем, в то время как форма распределения (независимо от того, что это такое) остается практически неизменной (например, такое же распределение, которое смещено влево или вправо). В таком случае простая стандартизация (т. Е. Отображение поезда и тестовых образцов в заранее определенное пространство, такое как [0,1] с использованием различных функций отображения) может уменьшить симптомы.

  3. Систематическая понижающая выборка может быть подходящим решением, только если вы делаете это, основываясь на некотором знании проблемы (а не только в целях получения большей точности в наборе тестовых данных). Например, вы, возможно, знаете, что некоторые записи в данных поезда отбираются очень давно из дальнего поля или зависят от конкретных факторов, которые ни один из них не произойдет в будущем (при сборе тестовых данных). В таком случае вы можете удалить те образцы, которые могут быть неактуальными, так как вы уверены, что в будущем вы не увидите таких шаблонов (я имею в виду, что вы должны иметь обоснование выбора подмножества обучения, а не изучать тестовый набор, который на самом деле у вас нет к нему доступа). В таком случае, я называю это удаление выброса а не понижающей выборки.

Борхан Казимипур
источник
1
p(y|x)
-1

В Python есть хороший пакет (scikit learn)

http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

С помощью этого пакета вы можете отобрать свои наблюдения из учебного набора.

Таймур Ислам
источник
1
Насколько я понимаю вопрос, распределение поездов / тестов отличается, что, если не принимать во внимание, привело бы к тому, что известно как «Сдвиг Ковариата». Простая подвыборка с использованием реализации train_test_split в scikit learn, упомянутой здесь, не будет учитывать распределения во время разделения! Таким образом, ответ не имеет значения.
TwinPenguins