Я работаю на соревновании по науке о данных, для которого распределение моего тестового набора отличается от учебного набора. Я хочу отобрать наблюдения из учебного набора, который очень похож на тестовый набор.
Как я могу это сделать?
preprocessing
Пуджа
источник
источник
Ответы:
Одним из важнейших предположений, которое можно сделать при построении модели машинного обучения для прогнозирования на будущее, является то, что невидимые данные (тест) поступают из того же распределения, что и данные обучения! Однако в действительности это довольно простое предположение легко нарушается, и предстоящие данные (их распространение) со временем меняются по многим причинам. Для тех, кто может быть не знаком с этой очень важной проблемой, я рекомендую посмотреть здесь или написать !
Для меня ваш вопрос относится к той же категории. Хотя у меня нет идеального решения (реализации, чтобы предложить), но я думаю, вы можете посмотреть:
БЫСТРОЕ обновление (хорошее решение) : я нашел Python-реализацию алгоритма KLIEP этой исследовательской работы (последняя точка), чтобы найти эти веса. Это кажется простым в использовании! По сути, он повторяет выборку обучения путем помещения весов (с помощью алгоритма KLIEP), чтобы предположение о наличии аналогичного распределения обучающих и тестовых данных было максимально справедливым.
источник
Я не уверен, что вы захотите это сделать. Вся цель состоит в том, чтобы обучить ваш алгоритм так, чтобы он хорошо обобщал невидимые данные.
Обычно следует адаптировать свои тестовые данные к данным поезда (например, стандартизировать тестовые данные в соответствии с данными поезда ), а не наоборот. На практике вы не знаете свои тестовые данные.
источник
Подбор проб поездов не может быть лучшим решением!
Различия между тестовым / исполнительным набором и распределением / функциями тренировочного набора очень распространены в контролируемых учебных задачах (это одна из причин, по которой такие соревнования, как Kaggle, являются сложными). Вот почему мы говорим, что прошлые результаты могут (только) использоваться в качестве руководства для оценки будущих результатов, но это не указывает / не гарантирует их . Поэтому обобщаемые модели всегда были предпочтительнее, чем точно настроенные модели, которые могут очень хорошо работать на наборе поездов (под), но плохо работают с невидимыми данными.
Хотя такое различие является нормальным, слишком большой разрыв между прошлой и будущей выборкой можно назвать примерами дрейфа понятий, который сам по себе является активным исследовательским полем. Учитывая ваш вопрос, я не могу судить, что ваш случай - нормальный случай ОД или действительно происходит смещение концепции.
Вот мои предложения:
Обучите несколько моделей с высокой способностью к обобщению. Используя начальную выборку из набора данных поезда, вы можете легко рассчитать смещение и дисперсию компонентов ошибок. Напомним, что вы ищете модель с низкой дисперсией (где изменения в данных будут иметь незначительное влияние на ее производительность), а не модели с низкой степенью смещения, но модели с высокой дисперсией (которые могут соответствовать вашему обучающему (под) набору). Теперь вы можете выбрать лучшие алгоритмы и сравнить их с тестовым набором. Обратите внимание, что во время тренировок мы не должны смотреть на тестовый набор!
Вместо нескольких случайных понижений, ищите стандартизацию / нормализацию и выбор / разработку функций. Эти методы могут быть полезны при изучении более общих моделей. Например, иногда диапазон области признаков может меняться со временем, в то время как форма распределения (независимо от того, что это такое) остается практически неизменной (например, такое же распределение, которое смещено влево или вправо). В таком случае простая стандартизация (т. Е. Отображение поезда и тестовых образцов в заранее определенное пространство, такое как [0,1] с использованием различных функций отображения) может уменьшить симптомы.
Систематическая понижающая выборка может быть подходящим решением, только если вы делаете это, основываясь на некотором знании проблемы (а не только в целях получения большей точности в наборе тестовых данных). Например, вы, возможно, знаете, что некоторые записи в данных поезда отбираются очень давно из дальнего поля или зависят от конкретных факторов, которые ни один из них не произойдет в будущем (при сборе тестовых данных). В таком случае вы можете удалить те образцы, которые могут быть неактуальными, так как вы уверены, что в будущем вы не увидите таких шаблонов (я имею в виду, что вы должны иметь обоснование выбора подмножества обучения, а не изучать тестовый набор, который на самом деле у вас нет к нему доступа). В таком случае, я называю это удаление выброса а не понижающей выборки.
источник
В Python есть хороший пакет (scikit learn)
http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
С помощью этого пакета вы можете отобрать свои наблюдения из учебного набора.
источник