Как решить, какие примитивы использовать для DFS? - PullRequest
0 голосов
/ 25 мая 2018

Как мы решаем, что список примитивов перейдет к глубокому синтезу признаков в featuretools?

1 Ответ

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

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

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

Создание

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

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

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

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

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

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

Идти большими и сокращать

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

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

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

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

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

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