Как решить, какие примитивы использовать для DFS?

Как мы определяем список примитивов для глубокого синтеза функций в инструментах функций?


person Harish Rajula    schedule 25.05.2018    source источник


Ответы (1)


Есть два всеобъемлющих способа сделать это

  1. Если вы ограничены в вычислительных возможностях, начните с нескольких примитивов и двигайтесь к окончательному набору примитивов.
  2. Если набор данных невелик (относительно рассматриваемого компьютера), мы можем выбрать множество примитивов для начала, а затем использовать оптимизацию гиперпараметров и выбор функций, чтобы сократить результирующую матрицу признаков.

Создание

Когда наборы данных большие, запуск DFS на персональном компьютере может занять много времени. Для каждого добавляемого примитива этот примитив будет применяться ко всем допустимым столбцам во всех допустимых связях.

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

При наращивании примерно следуем этим шагам

  1. Используйте DFS только для небольшого подмножества вашего набора сущностей, чтобы вы могли быстро увидеть результаты.
  2. Визуально проверьте сгенерированные функции, чтобы убедиться, что они имеют смысл и вычисляют то, что, по вашему мнению, они вычисляют.
  3. Убедитесь, что генерируются любые конкретные функции, которые вы хотели бы
  4. Используйте модель и оцените матрицу функций с большим количеством строк в наборе проверки, чтобы увидеть, какие функции кажутся многообещающими, а какие нет.
  5. Добавляйте и удаляйте примитивы, повторяйте

Вы можете увидеть следы этого в прогнозировать оставшийся срок полезного использования демо. Мы показываем только 3 примитива в каждой записной книжке, которые были найдены после нескольких итераций. Во втором блокноте этой демонстрации мы обмениваем один из наших трех примитивов 'last' на 'complexity' из tsfresh. ) для создания функций 302. Примитив 'complexity' создает 3 из 5 наиболее важных функций для нашей окончательной модели, которая значительно точнее, чем наша оригинальная.

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

Увеличение размера и обрезка

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

  1. Создайте полнофункциональную матрицу с множеством примитивов
  2. Тестировать результаты различных алгоритмов выбора признаков
  3. Визуально проверьте особенно хорошие и особенно плохие функции, чтобы убедиться, что все в порядке.
  4. Добавляйте пользовательские примитивы на основе результатов
  5. Повторение

Вы можете увидеть результаты этого подхода в predict-next- купить демоверсию. Там мы используем набор примитивов по умолчанию для создания 161 функции для фрейма данных с 12 столбцами. Из этих функций мы выбираем 20 наших любимых для использования с полным набором данных.

Это занимает больше времени, но позволяет более программно и воспроизводимо исследовать пространство признаков. Поскольку количество признаков в конечном результате очень велико, больше внимания уделяется методологии выбора признаков, в то время как при выборе примитивов требуется меньше внимания.

Наконец, обратите внимание, что поиск оптимального списка примитивов для передачи в Featuretools — это всего лишь один шаг от очень сложного вопроса «Как лучше выбирать функции?» При глубоком синтезе функций набор примитивов агрегации и преобразования будет детерминировано генерировать набор функций. Если бы вы спросили о лучшем подмножестве этих функций, вы бы получили разные ответы в зависимости от того, кого вы спрашиваете. Ответ будет ограничен (перечислены здесь в произвольном порядке):

  • какие алгоритмы используются для выбора,
  • стремление к интерпретируемости функций и,
  • какую метрику и модель вы пытаетесь оптимизировать.
person Max Kanter    schedule 15.06.2018