Машинное обучение с учителем на языке Python, часть 2: ансамблевые методы

План и мотивация

Здравствуйте и добро пожаловать на занятия по теме «Машинное обучение с учителем на языке Python, часть 2: ансамблевые методы».

В последние годы мы наблюдаем возрождение ИИ, или искусственного интеллекта, и машинного обучения.

Машинное обучение привело к ряду удивительных результатов, таких как возможность анализа медицинских изображений или диагностика заболеваний наравне с экспертами-людьми. Программа Google AlphaGo смогла победить чемпиона мира в этой интеллектуальной игре благодаря использованию глубокого обучения с подкреплением. Машинное обучение применяется даже в программировании машин с автопилотом, что навсегда изменит автомобильную индустрию. Представьте себе мир с резко сократившимся количеством автокатастроф благодаря простому удалению «человеческого фактора». В Google громко заявили, что для них «машинное обучение – прежде всего», и такие компании, как NVIDIA и Amazon, последовали этому примеру, что будет стимулировать инновации в ближайшие годы. Машинное обучение используется во многих отраслях, таких как финансы, интернет-реклама, медицина и робототехника. Это широко используемый инструмент, который принесёт вам пользу независимо от того, в какой отрасли вы работаете, а также откроет массу возможностей для карьерного роста и успеха.

Машинноеобучение также поднимает ряд философских вопросов. Мы создаём машины, способныедумать? Что значит «иметь сознание»? Не захватят ли компьютеры когда-нибудьмир?

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

Почемуансамблевые методы так важны? Вы могли заметить, что в почти любом состязаниипо машинному обучению победители сообщают, что использовали огромные ансамбли.Это касается как состязания на приз Netflix, так и многихсостязаний на Kaggle.

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

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

Затеммы рассмотрим статистический метод, называющийся бутстреппингом (bootstrapping). Бутстреппинг – это мощный метод,позволяющий не только оценить доверительные интервалы, но и получить болееточную оценку тех же самых исходных данных. Это почти что волшебство.

Далеемы применим метод бутстреппинга к моделям машинного обучения – это называетсябэггингом (bagging). Бэггинг также волшебным образомпозволяет нам уменьшить ошибку проверки путём лишь комбинирования различныхмоделей машинного обучения.

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

Послеизучения метода случайного леса мы возьмёмся за AdaBoost.Это весьма необычная вещь, поскольку работает совершенно иначе, нежели методслучайного леса. Вы увидите, что несмотря на то, что некоторые вещи,выполняемые в AdaBoost, могут подводить к мысли онеработоспособности модели, в конечном итоге она будет работать даже лучше, чемв случае случайного леса. Чтобы удостовериться, что вы понимаете и можетеиспользовать на практике данный метод, мы выведем алгоритм AdaBoost с нуля и реализуем его в коде.

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

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

Где взять код и данные

Весь код из моих курсов по машинному обучению находится в репозитарии Github по адресу https://github.com/lazyprogrammer/machine_learning_examples. Папка для данного курса называется supervised_class2. Команда, позволяющая загрузить весь код, следующая:

git clone<адрес_github>

Ясоветую использовать протокол SSH, чтобы избежатьнеобходимости каждый раз вводить пароль. Убедитесь также в периодическойпроверке обновлений или запустите команду

git pull

чтобы всегда иметь последнюю версию кода.

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

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

Иногдау меня спрашивают, на чём можно попрактиковаться в этом курсе. Практиказаключается в реализации изученных алгоритмов. Дело в том, что одно дело –смотреть теоретические лекции и понимать идеи в целом, а совсем другое –настолько хорошо их понимать, чтобы быть способным реализовать их в коде безчьей-либо помощи. Это то, чем занимаются компьютерщики, и именно этот подход выдолжны взять на вооружение. Позвольте подчеркнуть, что вы не должны простопросматривать видео, так как в итоге вы ничего не запомните.

И последнее. Если вы не знаете, как пользоваться Github или как настроить среду разработки с нужными библиотеками Python, вам следует посмотреть лекцию по настройке окружения в приложении.

Все данные одинаковы

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

Ноесли больше практики не значит опробование материала на разных наборах данных,то что является хорошей практикой? На данном этапе хорошей практикой являетсяреализация. Во многих университетских курсах по машинному обучению, вероятно,изучают теорию и отвечают на ряд экзаменационных вопросов или запускаютсоответствующий алгоритм  библиотеки Scikit-Learn, чтобы понять поведениеконкретной модели. Я считают такую практику лишь удовлетворительной: ведь вы всё-такиполучаете какие-то знания. Но лучшая практика – это изучить алгоритм, а затем самомуреализовать его; нет лучшего способа убедиться в том, что вы понимаете теорию,а также как и почему работает алгоритм. Поэтому увидев, что я начал писать кодалгоритма, следовало бы остановить видео и вначале попытаться самостоятельнонаписать код, пользуясь лишь полученными теоретическими понятиями – это лучшийспособ отточить свои навыки в машинном обучении.

Нельзясказать, что использование готовых алгоритмов машинного обучения на реальныхданных бесполезно; нет, это не так. Однако предполагается, что на данном этапевы уже и так это делаете. Предполагается, что вы изучаете данный курс, потомучто он может быть полезен для применения раскрываемых понятий в вашей работеили ваших исследованиях, так что вы уже знаете, что и зачем использовать, – этосчитается само собой разумеющимся.

Еслиу вас нет задачи для непосредственного применения изучаемого материала, вамследует найти что-либо интересное, собрать данные и использоватьрассматриваемые алгоритмы. Но это – второстепенная задача, посколькупредполагается, что вы уже знаете, что делать с данными моделями и что вседанные – одинаковы в математическом смысле.

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

Включи и работай

Множество людей, сталкиваясь с машинным обучением, сразу же начинают недоумевать: почему так много математики? К сожалению, они просто не понимают, что машинное обучение – это и есть математика, а не просто подстановка данных в какой-то API вроде Scikit-Learn. Это я и называю подходом «включи и работай».

Такойподход в особенности плох для таких областей, как глубокое обучение, хотя и нестоль уж плох для классических и ансамблевых методов машинного обучения.Ансамблевые методы, вероятно, являются лучшим выбором, если вы ищете решение встиле «включи и работай». Из моего предыдущего курса по машинному обучению сучителем вы уже знаете, как пользоваться библиотекой Scikit-Learn, так что если вы ищете лишь API, вам не нужен этот курс, ведь вы уже научилисьпользоваться рассматриваемыми методами в моём предыдущем курсе по машинномуобучению, где показано, как «включать и работать» с помощью Scikit-Learn. Если так иесть и вы хотите лишь «включить и работать» с помощью Scikit-Learn, то вряд ли вам будет нужно более 15 минут, чтобыво всём разобраться, – для этого вовсе не нужен полноценный курс. Этот же курспредназначен для тех, кому интересно машинное обучение само по себе и кто хочетзнать, чем отличается дерево решений от метода случайного леса. API для них почти в точности совпадают, различие – лишьв теории. Именно этому посвящён данный курс, и именно для такого рода людей –тех, кто хочет понимать различия и понимать настолько хорошо, чтобы можно былореализовать алгоритмы без какой-либо помощи.

Вто же время если вы – специалист по обработке данных, то, вероятнее всего, вконце концов в своей работе будете пользоваться подходом «включи и работай». Япользуюсь им постоянно, но это – лишь дополнение к знанию этих алгоритмов. Есливы хотите «включать и работать», то ансамблевые методы – лучший выбор. Но чтобыуяснить, почему так, нужно понимать теорию. Именно этому и посвящён данныйкурс.

Андрей Никитенко
Андрей Никитенко
Задать вопрос эксперту
Понравилась статья? Поделить с друзьями:
Комментариев: 1
  1. Rust

    На гитхабе нет такого репозитория
    https://github.com/lazyprogrammer/machine_learning_examples.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Share via
Copy link