AutoML: использование TPOT в кино

Обзор

Цель этой статьи - подробно рассказать о моем исследовании TPOT, автоматизированного инструмента машинного обучения. Сначала я кратко представлю концепцию autoML. Затем я дам обзор инструмента TPOT. Поняв основную информацию, мы перейдем к сценарию рекомендаций по фильму. Я расскажу о проблеме, данных, реализации TPOT в нашем сценарии и результатах, полученных из сценария. Наконец, я представлю некоторый анализ TPOT в качестве инструмента и предложу несколько идей о том, как вы можете встроить его в свои операции машинного обучения.

Что такое AutoML?

За последние пару лет индустрия машинного обучения стала очень популярной. Согласно Tractica, ожидается, что к 2025 году мировая индустрия машинного обучения вырастет до 126 миллиардов долларов, а среднегодовой темп роста составит 43%.

Разработка стандартной модели машинного обучения требует глубоких знаний предметной области как в машинном обучении, так и в области приложений. Также требуется значительное время для проведения экспериментов с использованием метода проб и ошибок для поиска решения. Эд Фернандес объясняет в статье Состояние машинного обучения и искусственного интеллекта * Industry.²

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

Многие компании с трудом запускают производство из-за нехватки опытных профессионалов в области машинного обучения и высоких зарплат, которые они требуют. На момент написания этой статьи в LinkedIn в настоящее время насчитывается 38 тысяч вакансий, связанных с машинным обучением³, а сотрудники, занимающиеся машинным обучением, обычно стоят от 100 до 300 тысяч долларов в год.

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

Некоторыми популярными инструментами с открытым исходным кодом для autoML являются MLBox, Auto-Sklearn, H2O.ai и AutoKeras.

Крупные лидеры отрасли также производят инструменты autoML, такие как Cloud AutoML от Google и TransmogrifAI от SaleForce.

Однако сегодня мы собираемся взглянуть на TPOT.

Что такое TPOT?

TPOT расшифровывается как «древовидный инструмент оптимизации трубопроводов». Это инструмент autoML, предназначенный для создания оптимизированного конвейера машинного обучения. Этот конвейер включает выбор лучших шагов препроцессора, алгоритмов машинного обучения и гиперпараметров модели.

TPOT - это инструмент autoML, созданный Рэндалом С. Олсоном и другими из Университета Пенсильвании. Он основан на scikit-learn, популярной библиотеке машинного обучения Python, и использует тот же синтаксис API. В результате разработчикам легко подобрать его.

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

Генетическое программирование TPOT

Не стесняйтесь пропустить этот раздел, если вас больше интересует, как реализовать TPOT, чем его внутренняя работа.

TPOT написан на Python и использует библиотеку DEAP для реализации генетического программирования. На элементарном уровне TPOT использует генетическое программирование следующим образом: ⁵

  1. TPOT инициализирует ряд случайных конвейеров в зависимости от указанной совокупности. В этом примере мы предположим, что 100 конвейеров.
  2. Начальные конвейеры оцениваются с использованием перекрестной проверки и определяемой пользователем функции оценки.
  3. Конвейеры ранжируются на основе оптимизации результата функции скоринга и минимизации количества шагов конвейера. 20 лучших конвейеров, которые были сгенерированы, выбираются для использования в следующем поколении.
  4. В следующем поколении каждый из верхних конвейеров производит 5 дочерних конвейеров, исходя из нашего первоначального предположения о популяции в 100. 5% потомков пересекаются или смешиваются с другими конвейерами, чтобы создать конвейер, который частично напоминает оба конвейера, которые были объединены, чтобы создать его. 90% оставшегося потомства получают случайные мутации. Мутация может добавить шаг в конвейер, удалить шаг из конвейера, изменить функцию, используемую в шаге, или изменить гиперпараметр функции.
  5. Эти новые конвейеры снова ранжируются с использованием перекрестной проверки и определяемой пользователем функции оценки.
  6. TPOT продолжает этот процесс до тех пор, пока не оценит все конвейеры, созданные в каждом поколении. (Количество поколений указывается пользователем)

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

Рекомендация фильма

Область, в которой мы собираемся использовать TPOT, - это постоянно популярный механизм рекомендаций по фильмам. В этом простом сценарии мы создаем систему рекомендаций для фильмов на основе службы потоковой передачи, аналогичную Netflix. Я использовал сервис Kafka, который передавал данные о фильмах, которые смотрят пользователи, и рейтингах фильмов, которые они прислали. Исходные данные имели ~ 1 миллион пользователей и ~ 27 тысяч фильмов. Я транслировал эти данные, проанализировал их и сохранил в базе данных.

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

Мы собираемся использовать данные о пользователе и фильме, чтобы предсказать, как пользователь оценит фильм по шкале от 1 до 5. Это можно было бы использовать в службе рекомендаций, если бы мы хотели отсортировать самые высокие прогнозируемые рейтинги и рекомендовать n лучших фильмов. Мы собираемся сделать этот пример как можно более простым, чтобы сосредоточить внимание на аспектах autoML; поэтому мы собираемся оценивать модель только на основании того, насколько точно она предсказывает рейтинги пользователей, а не на том, насколько хорошо она генерирует список из n лучших рекомендаций. Однако на протяжении всего примера мы будем иметь в виду аспект рекомендаций, чтобы рассмотреть последствия этого сценария.

Данные

Давайте посмотрим на наши данные. Вот функции, которые мы используем:

  • age - возраст пользователя, для которого мы прогнозируем рейтинг
  • пол - пол пользователя
  • профессия - род занятий пользователя
  • budget - бюджет фильма
  • жанры - жанры фильмов разделены на бинарные элементы
  • популярность - мера популярности от стороннего API
  • production_companies - компании, участвующие в производстве, разбиты на бинарные функции
  • production_countries - страны, в которых был снят фильм
  • год - год выхода фильма в прокат
  • month - месяц выхода фильма
  • доход - общий доход от фильма
  • runtime - продолжительность фильма
  • Speaken_languages ​​- языки, на которых говорят в фильме
  • vote_average - рейтинг от стороннего API
  • vote_count - количество оценок, выставленных стороннему API

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

Выполнение

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

  • GitHub Repo - это программная реализация оптимизации конвейера TPOT. Он использует модульный код и больше всего похож на то, как вы можете реализовать TPOT.


  • Записная книжка Python - в репозитории GitHub я создал записную книжку на Python, которую можно запускать локально.


  • Google Colab - Если вы хотите поиграть с этим примером в Интернете, просто скопируйте записную книжку Google Colab на свой диск.


Для начала я просто воспользуюсь небольшой выборкой данных, чтобы ускорить обучение. Я использую 10 000 экземпляров для обучения и 10 000 экземпляров для тестирования.

from tpot import TPOTRegressor
pipeline_optimizer=
  TPOTRegressor(generations=100, population_size=100, verbosity=2, random_state=42, template='Selector-Transformer-Regressor', n_jobs=-1, warm_start=True, periodic_checkpoint_folder='/content/tpot-intermediate-save/')
pipeline_optimizer.fit(X_train, y_train)
pipeline_optimizer.score(X_test, y_test)

Вау, это просто. Это запустит TPOT, создаст лучший конвейер и оценит конвейер с использованием среднеквадратичной ошибки. Давайте посмотрим на некоторые из указанных нами параметров TPOT.

  • generations - это количество итераций генерации конвейера, которое будет запускать TPOT. В качестве альтернативы вы можете указать max_time_minutes, чтобы остановить TPOT через определенное время.
  • population_size - это количество конвейеров, обученных в течение каждого поколения.
  • verbosity - Это просто дает нам обратную связь, чтобы сообщить нам, что TPOT выкипает. Поиск может занять много времени, поэтому я нахожу это обнадеживающим, чтобы убедиться, что он не завис.
  • random_state - Это гарантирует, что мы начнем с того же семени, если мы запустим это во второй раз.
  • template - это описывает, как я хочу, чтобы мой конвейер выглядел. Я немного занимался разработкой функций, поэтому хочу начать с селектора, чтобы найти лучшие функции, затем преобразовать эти функции и, наконец, использовать регрессор. Если бы я не указывал шаблон, TPOT выбрал бы любую комбинацию, которая работает лучше всего. В моих испытаниях форма трубопровода была бы Regressor-Regresssor-Regressor.
  • n_jobs - количество параллельных процессов, используемых для оценки
  • warm_start - сообщает TPOT, следует ли повторно использовать популяции из последнего вызова `fit ()`. Это хорошо, если вы хотите остановить и перезапустить процесс подгонки.
  • periodic_checkpoint_folder - Где периодически сохранять пайплайны во время обучения. Это может помочь убедиться, что вы получите результат, даже если TPOT внезапно умирает или вы решите прервать обучение раньше.

На основе параметров generations и population_size TPOT будет обучать 10 100 конвейеров и сравнивать их с использованием 5-кратной (другой вариант конфигурации, но я просто использовал значение по умолчанию) перекрестной проверки и функции оценки отрицательных среднеквадратических ошибок. Он не может сгенерировать 10 100 уникальных конвейеров, потому что он пропустит любые повторяющиеся конвейеры, которые сгенерированы. В этом примере создается около 2500 уникальных конвейеров. Как вы понимаете, создание такого количества конвейеров и их оценка с помощью перекрестной проверки занимает очень много времени. Запуск ноутбука python на моем локальном компьютере занял около 6 часов.

С машинным обучением больше данных часто лучше; Итак, я решил попробовать обучить TPOT на 500 000 экземплярах и протестировать на остальных данных. Я решил уменьшить generations до 10 и population_size до 50, чтобы ускорить эксперимент. Даже при уменьшенных параметрах размер данных значительно замедлял обучение. Работа с локальным блокнотом заняла более 15 часов, и мне так и не удалось успешно завершить ее в Google Colab.

Результаты

Чтобы сравнить результаты, я обучил дерево решений на большом наборе данных, используя параметры по умолчанию в scikit-learn. Эта базовая модель дала мне среднеквадратичную ошибку 1,44. Модель TPOT, обученная на небольшом наборе данных, имела среднеквадратичную ошибку 0,99. Однако, если мы сравним распределение предсказанных оценок с распределением фактических оценок, мы увидим, что модель в основном предсказывает класс большинства (~ 4).

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

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

Вывод

Добро

В целом TPOT кажется чрезвычайно мощным инструментом. Согласно статье Адитьи Баладжи и Александра Аллена, в которой тестировались тесты auto-sklearn, TPOT, auto ml и H2O, TPOT показал лучшие результаты, чем три других, когда дело дошло до проблем регрессии. Инструмент также имеет некоторые преимущества, которые не сразу очевидны из моих описание реализации выше.

  1. Простота использования - как упоминалось ранее, TPOT построен на основе scikit-learn, что позволяет очень легко подобрать и использовать. TPOT даже имеет возможность экспортировать окончательную модель в виде кода Python. Это упрощает использование этого инструмента даже для начинающих разработчиков.
  2. Настраиваемость - TPOT позволяет настраивать многие аспекты процесса оптимизации. Вы можете определить, какие алгоритмы или гиперпараметры вы хотите ввести в случайные мутации. Можно настроить даже функции оценки, используемые для определения лучшей модели.
  3. Большой контроль - TPOT позволяет настраивать все основные аспекты создания модели. Вы можете определить все, от продолжительности поиска конвейера до желаемой формы конечного конвейера.
  4. Экономия времени - TPOT сэкономил массу времени, когда дело дошло до разработки функций. Я очень мало думал о том, какие функции будут наиболее полезными, но TPOT смог использовать все эти данные для создания полезной модели.
  5. Активное развитие - TPOT в настоящее время поддерживается в хорошем состоянии. Похоже, что сопровождающие быстро реагируют на проблемы с GitHub и в настоящее время работают над добавлением новых функций в инструмент. Это важно с инженерной точки зрения, потому что вы хотите убедиться, что используемые вами инструменты хорошо поддерживаются и постоянно улучшаются.

Плохо

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

  1. Отнимает много времени - хотя мы сэкономили кучу времени на разработку функций, мы вернули большую часть его, ожидая обучения модели. В зависимости от количества функций, размера данных и частоты, с которой вам нужно обновлять модель, это может стать чрезмерно дорогостоящим. Помните, время - деньги.
  2. Типы данных - К сожалению, TPOT в настоящее время не интеллектуален с точки зрения входных типов данных. Он обрабатывает только числовые типы данных. Поэтому мне пришлось написать код для преобразования некоторых категориальных функций в двоичные функции. Однако TPOT может работать над добавлением интеллектуальной очистки данных. Эта актуальная проблема очистки данных открыта с 2016 года.
  3. Интерпретируемость - поскольку TPOT генерирует конвейеры случайным образом, может быть очень сложно понять, почему определенная модель может работать лучше всего. Это несколько беспокоит, потому что это может означать, что впоследствии отладка проблем модели может быть затруднена.
  4. Нейронная сеть без регрессии - поскольку TPOT может генерировать нейронные сети для задач классификации, я хотел поиграть с этой функцией в нашем проблемном пространстве. Однако TPOT еще не поддерживает нейронные сети для задач регрессии. В настоящее время существует проблема с отслеживанием GitHub.

Как вы могли использовать TPOT?

Ниже приведены идеи о том, как использовать TPOT в процессе разработки модели. Идеи находятся на разном уровне зрелости. Я хотел бы прояснить, что я еще не реализовал TPOT в производственной системе, поэтому эти идеи основаны исключительно на моих экспериментах и ​​исследованиях.

  1. Изучение новой области - Одна из целей TPOT состоит в том, что вам не нужно иметь много знаний в области проблемной области, чтобы быть эффективным. В совершенно новых доменах TPOT может стать отличным местом для начала. Передайте ему все свои данные и посмотрите, какую модель он выдает. Это может помочь вам лучше понять предметную область, поскольку вы выясните, почему TPOT создал такую ​​модель.
  2. Создание конвейера - очевидно, что TPOT можно было просто использовать для создания конвейера. Если вы можете позволить себе время, необходимое для создания модели, и совместимость не является проблемой, вы можете запустить свои данные через TPOT, чтобы сгенерировать модель и использовать эту модель в производстве.
  3. Решайте сложные для отладки проблемы с помощью оптимальных моделей - в этом сценарии у вас есть модель, которая уже существует, но есть проблема, которую вы не можете понять. Например, некоторая подгруппа вводит модель в заблуждение, и вы не можете найти решения. Вы можете использовать TPOT для создания оптимальных моделей, которые решают вашу проблему. Как указано в документации TPOT, ⁷ «TPOT должен быть помощником, который дает вам идеи о том, как решить конкретную проблему машинного обучения, исследуя конфигурации конвейера, которые вы, возможно, никогда не рассматривали, а затем оставляет точную настройку для более ограниченного параметра. методы настройки, такие как поиск по сетке ». В этом сценарии TPOT выступает в качестве партнера по мозговому штурму, чтобы предложить новые идеи для решения сложной проблемы.
  4. Мониторинг - вы можете использовать TPOT как часть вашего мониторинга (как верхний предел теста). Вы можете потратить много времени на создание оптимального конвейера TPOT и отслеживать производительность этой модели. Затем, когда вы создадите свою фактическую производственную модель (без использования TPOT), вы сможете увидеть, насколько ваша модель близка к оптимальному решению.
  5. Измерение деградации модели - эта идея определенно немного необычна, так что терпите меня. Для сценариев, когда вы не очень часто переобучаете свою модель, вы можете постоянно переобучать эталонную модель с TPOT. По мере поступления новых данных он будет переучиваться и пытаться создать лучшую модель. Затем вы должны отследить эффективность вашей реальной производственной модели по сравнению с моделью TPOT. Это было бы полезно для выявления ситуаций, когда данные фактически становятся более коррелированными с течением времени. Отслеживая только точность вашей производственной модели, вы не заметите, что данные становятся более коррелированными, потому что модель продолжит работать аналогичным образом. Однако, постоянно переобучая модели TPOT, вы увидите, что он может создавать все более и более качественные модели из-за повышенной корреляции в данных. Это заставит вас понять, что ваша производственная модель устарела и требует переобучения.

Это все, что у меня есть на данный момент. Спасибо, что прочитали мою статью. Для получения дополнительной информации о TPOT ознакомьтесь с их документацией.

Ссылки

[1] Рынок программного обеспечения для искусственного интеллекта достигнет 126,0 миллиардов долларов годовой мировой выручки к 2025 году | Омдиа | Tractica , Tractica.omdia.com, 2020. [Online]. Доступно: https://tractica.omdia.com/newsroom/press-releases/artificial-intelligence-software-market-to-reach-126-0-billion-in-annual-worldwide-revenue-by-2025/. [Доступ: 15 июля 2020 г.].

[2] Э. Фернандес, Состояние индустрии машинного обучения и искусственного интеллекта *, Medium, 2020 г. [Online]. Доступно: https://towardsdatascience.com/state-of-the-machine-learning-ai-industry-9bb477f840c8. [Доступ: 15 июля 2020 г.].

[3] 38 000+ вакансий в сфере машинного обучения в США (1734 новых), Linkedin.com, 2020 г. [онлайн]. Доступно: https://www.linkedin.com/jobs/search/?geoId=103644278&keywords=machine%20learning&location=United%20States. [Доступ: 15 июля 2020 г.].

[4] Работа с машинным обучением | Glassdoor , Glassdoor, 2020. [Online]. Доступно: https://www.glassdoor.com/Job/machine-learning-jobs-SRCH_KO0,16.htm?jobType=fulltime&minSalary=113600&maxSalary=318800. [Доступ: 15 июля 2020 г.].

[5] Р. Олсон, «TPOT: инструмент оптимизации конвейеров на основе дерева для автоматизации машинного обучения», в ICML: 2016 AutoML Workshop, Нью-Йорк, 2016.

[6] А. Баладжи и А. Аллен, Бенчмаркинг автоматизированных структур машинного обучения, Arxiv.org, 2018. [Онлайн]. Доступно: https://arxiv.org/pdf/1808.06492v1.pdf. [Доступ: 15 июля 2020 г.].

[7] Р. Олсон, Использование TPOT - TPOT, Epistasislab.github.io, 2020. [Online]. Доступно: https://epistasislab.github.io/tpot/using/#what-to-expect-from-automl-software. [Доступ: 15 июля 2020 г.].