Лучший подход к сквозному проекту машинного обучения [2022]
Опубликовано: 2021-01-01Машинное обучение набирает обороты и долгое время было яблоком раздора. Некоторые очень замечательные алгоритмы и архитектуры в этой области сделали возможным применение концепции машинного обучения в практическом и живом мире.
Это уже не просто понятие для исследований, оно широко распространилось в полезных областях применения. И сегодня как никогда необходимо овладеть искусством сквозного конвейера для проектов машинного обучения.
У многих людей растет интерес к машинному обучению, и существует огромное количество доступных ресурсов, которые могут помочь вам понять основы машинного обучения и искусственного интеллекта. Многие курсы ведут вас от изучения некоторых базовых концепций до создания современных моделей.
Но так ли это? Действительно ли мы учимся получать доступ к данным и действительно ли мы видим, как очищать данные, чтобы наша модель машинного обучения могла извлекать из них полезные функции? А как насчет части развертывания? Есть так много вопросов подобного рода, которые остаются без ответа в наших умах после того, как мы закончим такие курсы и учебные программы.
Эта проблема возникает из-за плохого понимания полного сквозного конвейера машинного обучения для любого проекта. В этой статье мы рассмотрим один из таких конвейеров, чтобы понять, что именно нужно сделать, чтобы получить лучшие результаты в реальном сценарии для любого проекта машинного обучения.
Одна из книг, которая лучше всего показывает это, — «Практическое машинное обучение с помощью Scikit-Learn, Keras и TensorFlow» Орельена Герона.

Этот сквозной конвейер можно разделить на несколько шагов для лучшего понимания, а именно:
- Понимание постановки задачи
- Получение необходимых данных
- Понимание данных
- Очистка данных
- Выбор лучшей модели для обучения
- Тонкая настройка гиперпараметров
- Представление результатов
- Развертывание и обслуживание системы
Чтобы лучше понять конвейер любого реального проекта машинного обучения, мы будем использовать популярный пример задачи прогнозирования цен на жилье в Калифорнии. Обсудим все вышеперечисленные моменты применительно к данной постановке задачи. Могут быть небольшие изменения для разных проектов, но в целом цель остается прежней.
Оглавление
Понимание постановки задачи
Чтобы построить хорошее решение, нужно очень четко понимать постановку задачи. Скорее всего, в конечном итоге вы создадите и обучите модель машинного обучения, но для реальных областей применения требуется гораздо больше, чем просто модели. Вывод модели должен соответствовать тому, что именно нужно конечному пользователю.
Для этого конкретного примера нам предоставляется набор данных всех показателей в Калифорнии, таких как население, доход, цены на жилье и другие. Требуемый результат модели заключается в том, что она должна быть в состоянии предсказать цену дома с учетом других его атрибутов, таких как местоположение, население, доход и другие.
Важной причиной для этого шага является точное понимание того, что нужно сделать и какое именно решение необходимо. Именно здесь проводится основная часть мозгового штурма о том, как следует подходить к постановке проблемы.
Читайте: Идеи проекта машинного обучения для начинающих
Получение необходимых данных
После того, как вы четко поняли постановку проблемы и решили двигаться вперед с подходом машинного обучения для решения проблемы, вы должны начать поиск соответствующих данных. Данные являются наиболее важным компонентом любого проекта машинного обучения, поэтому вы должны тщательно находить и выбирать только качественные данные. Окончательная производительность моделей машинного обучения зависит от данных, которые использовались при обучении.
Существуют различные источники для поиска данных, которые также могут помочь понять распределение данных в реальных примерах. Для нашего примера мы можем взять набор данных прогнозирования цен на жилье в Калифорнии от Kaggle. Эти данные в формате CSV, поэтому мы будем использовать библиотеку Pandas для загрузки набора данных.
Понимание данных
Очень важным аспектом решения ML является возможность понимать данные, с которыми вы работаете. Это позволяет нам выбирать, какие алгоритмы или архитектуры моделей лучше подходят для проекта. Прежде чем приступить к подробному рассмотрению данных, рекомендуется сначала разделить набор данных на обучающие и тестовые наборы. Это сохраняет тестовый набор нетронутым и, следовательно, снижает вероятность переобучения тестовому набору. Делая это, вы устраняете предвзятость отслеживания данных из модели.
Существуют различные способы разделения наборов данных на эти обучающие и тестовые наборы. Одним из них является разбиение на жестко заданное процентное значение. 90% обучения и 10% тестирования являются общим значением в большинстве случаев.
После разделения вам нужно будет подробно визуализировать набор поездов, чтобы понять данные. Текущий набор данных включает точки широты и долготы, поэтому очень полезно использовать точечный график для просмотра плотности в зависимости от местоположения.
Обнаружение корреляции между двумя атрибутами в наборе данных помогает понять, какие атрибуты больше связаны с требуемым атрибутом. В этом случае нам нужно выяснить, какой атрибут больше связан с ценами на жилье в наборе данных. Это легко сделать в Scikit-Learn с помощью метода corr(). Он возвращает значение для каждого атрибута по отношению к другому. Итак, если вам нужно увидеть отношения относительно цен на жилье, вы можете сделать это следующим образом:
corr_matrix["median_house_value"].sort_values(по возрастанию=ложь)
median_house_value 1.000000средний_доход 0,687170всего_комнат 0,135231Housing_median_age 0.114220домохозяйства 0,064702total_bedrooms 0,047865население -0,026699долгота -0,047279широта -0,142826
Здесь видно, что median_income напрямую связан со стоимостью дома, а с другой стороны , значение широты связано с ним косвенно.
Наконец, вы также можете попытаться разработать некоторые функции, объединив некоторые атрибуты вместе. Например, значение total room_per_household может быть гораздо более информативным, чем значения total_rooms или домохозяйства по отдельности.
Очистка данных
На этом этапе вы подготавливаете данные для проекта машинного обучения. Это самый трудоемкий и важный шаг во всем конвейере. Производительность модели во многом зависит от того, насколько хорошо вы подготовите данные. Обычно рекомендуется писать функции для этой цели, поскольку это позволит вам использовать эти функции всякий раз, когда это необходимо, и те же функции можно использовать в производственной линии для подготовки новых данных для прогнозов.
Одна из наиболее часто встречающихся проблем с реальными данными — отсутствие значений для нескольких записей в наборе данных. Есть несколько способов справиться с этим. Вы можете напрямую удалить весь атрибут, но это не очень хорошо для модели. Вы можете избавиться от строки, в которой есть одно пропущенное значение. Другой способ, который чаще всего используется, — установить отсутствующее значение в какое-либо другое значение, например ноль или среднее арифметическое всего столбца, если это числовое значение.
Для категориальных значений лучше представлять их числами и кодировать их в горячую кодировку, чтобы модели было проще с ней работать. Scikit-Learn также предоставляет класс OneHotEncoder, так что мы можем легко преобразовывать категориальные значения в горячие векторы.
Еще одна вещь, о которой вам нужно позаботиться, — это масштабирование функций. Могут быть некоторые атрибуты, диапазон значений которых очень велик. Поэтому лучше масштабировать их до стандартного масштаба, чтобы модель могла легко работать с этими значениями и работать лучше.
Также читайте о: Зарплата инженера по машинному обучению в Индии
Выбор лучшей модели для обучения
После завершения всей очистки данных и разработки функций следующий шаг становится довольно простым. Теперь все, что вам нужно сделать, это обучить несколько многообещающих моделей на данных и найти модель, которая дает наилучшие прогнозы. Есть несколько способов, которые помогут нам выбрать лучшую модель.

Наш пример прогнозирования цен на жилье в Калифорнии представляет собой задачу регрессии. Это означает, что мы должны предсказать значение из диапазона чисел, которое в данном случае является ценой дома.
Первым шагом здесь является обучение нескольких моделей и их тестирование на проверочном наборе. Вы не должны использовать тестовый набор здесь, так как это приведет к переобучению тестового набора, и в конечном итоге модель будет иметь очень низкую регуляризацию. Из этих моделей в большинстве случаев следует выбирать модель с хорошей точностью обучения и точностью проверки. Это также может зависеть от варианта использования, поскольку некоторые задачи требуют конфигураций, отличных от других.
Поскольку мы уже очистили данные и готовы функции предварительной обработки, очень легко обучить разные модели в трех-четырех строках кода, используя некоторые фреймворки, такие как Scikit-Learn или Keras. В Scikit-Learn у нас также есть возможность перекрестной проверки, которая очень помогает найти хорошие гиперпараметры для таких моделей, как деревья решений.
Тонкая настройка гиперпараметров
После того, как несколько моделей попали в шорт-лист, возникает необходимость тонкой настройки гиперпараметров, чтобы раскрыть их истинный потенциал. Есть много способов добиться этого. Одним из них является то, что вы можете вручную изменять гиперпараметры и обучать модели снова и снова, пока не получите удовлетворительный результат. Здесь вы можете ясно увидеть проблему, заключающуюся в том, что вы не можете проверить столько комбинаций, сколько это сделала бы автоматизированная задача. Итак, вот некоторые хорошие методы для автоматизации этого материала.
Grid Search — замечательная функция, предоставляемая Scikit-Learn в виде класса GridSearchCV, где он самостоятельно выполняет перекрестную проверку и находит идеальные значения гиперпараметров для получения лучших результатов. Все, что нам нужно сделать, это указать, с какими гиперпараметрами он должен экспериментировать. Это простая, но очень мощная функция.
Рандомизированный поиск — еще один подход, который можно использовать для той же цели. Поиск по сетке хорошо работает, когда есть небольшое пространство гиперпараметров, с которыми можно поэкспериментировать, но когда имеется большое количество гиперпараметров, лучше использовать RandomizedSearchCV. Он пробует случайные гиперпараметры и выдает наилучшие значения, которые он когда-либо видел.
И последнее, но не менее важное: подход ансамблевого обучения . Здесь мы можем использовать несколько моделей, чтобы дать соответствующие прогнозы, и, наконец, мы можем выбрать окончательный прогноз как среднее значение всех. Это очень многообещающий метод, и он выигрывает множество конкурсов на Kaggle.
После точной настройки всех гиперпараметров для окончательной модели вы можете использовать модель для прогнозирования тестового набора. Здесь мы можем оценить, насколько хорошо модель работает на тестовом наборе. Помните, что после этого вам не следует настраивать модель для повышения точности тестового набора, так как это приведет к переоснащению выборок тестового набора.
Представление результатов
После того, как лучшая модель выбрана и проведена оценка, необходимо правильно отобразить результаты. Визуализация — это ключ к улучшению проектов машинного обучения, поскольку речь идет о данных и понимании закономерностей, стоящих за ними. Необработанные числовые результаты могут показаться хорошими для людей, уже знакомых с этой областью, но очень важно визуализировать их на графиках и диаграммах, поскольку это делает проект привлекательным, и каждый может получить четкое представление о том, что на самом деле происходит в нашем решении.
Развертывание и обслуживание системы
Большинство учащихся достигают этого этапа конвейера и сталкиваются с огромными проблемами, пытаясь развернуть проект для приложения в реальном сценарии. Создавать и обучать модели в Jupyter Notebook довольно просто, но важно успешно сохранить модель, а затем использовать ее в реальной среде.
Одна из наиболее распространенных проблем, с которыми сталкиваются инженеры по машинному обучению, заключается в том, что существует разница между данными, полученными в режиме реального времени, и данными, на которых они обучили модель. Здесь мы можем использовать функции предварительной обработки, которые мы создали при создании конвейера для обучения наших моделей.
Существует два типа моделей машинного обучения, которые можно развернуть: онлайн-модель и автономная модель. Онлайн-модель — это та, которая продолжает учиться на данных, которые она получает в режиме реального времени. Автономные модели не учатся на новых образцах и должны обновляться и поддерживаться должным образом, если происходит изменение типа получаемых ими данных. Таким образом, необходимо обеспечить надлежащее обслуживание для обоих типов моделей.
При развертывании моделей машинного обучения их необходимо обернуть платформой, чтобы пользователям было легко с ними взаимодействовать. Вариантов много, мы можем обернуть его в веб-приложение, приложение для Android, Restful API и многое другое. Базовые знания о создании таких приложений или API-интерфейсов являются огромным плюсом. Вы должны уметь развертывать приложения NodeJS или Python в облачных сервисах, таких как Google Cloud Platforms, Amazon Web Services или Microsoft Azure.

Если вам не нравятся некоторые фреймворки, такие как Django или Flask, вы можете попробовать Streamlit, который позволяет вам развернуть код Python в виде веб-приложения, добавив всего несколько строк дополнительного кода. Существуют различные такие библиотеки и фреймворки, которые можно изучить.
Заключение
В заключение всей этой статьи я бы сказал, что проекты машинного обучения сильно отличаются от других традиционных проектов с точки зрения конвейера, и если вам удастся освоить этот конвейер, все остальное становится намного проще.
Одними из наиболее важных шагов этого сквозного конвейера, которыми многие новички склонны пренебрегать, являются очистка данных и развертывание модели. Если об этих шагах позаботятся, остальная часть будет такой же, как и в любом другом проекте.
Следуя этим шагам и настроив конвейер для проектов, вы получите четкое представление о задачах, а отладка проблем станет более управляемой. Поэтому я предлагаю вам выполнить эти шаги и попробовать реализовать собственный сквозной проект машинного обучения, используя этот контрольный список. Возьмите постановку задачи, найдите набор данных и продолжайте получать удовольствие от своего проекта!
Если вам интересно узнать больше о машинном обучении, ознакомьтесь с дипломом PG IIIT-B и upGrad в области машинного обучения и искусственного интеллекта, который предназначен для работающих профессионалов и предлагает более 450 часов тщательного обучения, более 30 тематических исследований и заданий, IIIT- Статус B Alumni, более 5 практических практических проектов и помощь в трудоустройстве в ведущих фирмах.
Что такое машинное обучение или ML?
Способность системы изучать задачу без явного программирования на основе предоставленных данных называется машинным обучением. Эта область фокусируется на разработке компьютерных программ, которые могут получать доступ к данным и обучаться самостоятельно. Это подполе обширной темы искусственного интеллекта (ИИ). Машинное обучение внедряется практически во всех секторах для повышения производительности, маркетинга, продаж, удовлетворенности клиентов и корпоративной прибыли. Многие ИТ-специалисты заинтересовались этим, и они рассматривают возможность смены карьеры.
Что такое сквозные проекты ML?
Сквозные проекты машинного обучения включают в себя такие этапы, как подготовка данных, обучение модели на ней и развертывание этой модели. Он состоит из конвейеров, которые представляют собой способы написания кода и автоматизации рабочего процесса. Эти пайплайны при правильной компиляции приводят к созданию успешного проекта машинного обучения. Понимание постановки задачи, получение соответствующих данных, осмысление данных, очистка данных, выбор оптимальной модели для обучения, точная настройка гиперпараметров и представление результатов — это лишь некоторые из этапов.
Что такое гиперпараметры в машинном обучении?
Гиперпараметр — это параметр машинного обучения, значение которого используется для влияния на процесс обучения. Их можно разделить на две части: гиперпараметры модели и гиперпараметры алгоритма. Гиперпараметры модели не могут быть приняты при подаче машины на обучающий набор, потому что они направляют на задачу выбора модели. Напротив, гиперпараметры алгоритма не влияют на производительность модели, но влияют на скорость и качество процесса обучения. Для разных методов обучения моделей требуются разные гиперпараметры, но есть некоторые базовые алгоритмы, которым не нужны никакие гиперпараметры.