Базовые алгоритмы для бэггинга должны обладать склонностью к переобучению – например, глубокие деревья решений с большим числом ветвей. Затем на каждом тренировочном датасете обучается базовый алгоритм. Для получения результата всего ансамбля результаты обучения на всех датасетах усредняются. Самый известный алгоритм – Random Forest, его несложно написать самому, но можно воспользоваться готовыми реализациями [56].
Бустинг строится совсем по иным принципам. В качестве базовых используются очень простые алгоритмы, точность которых чуть выше подбрасывания монетки. Это могут быть деревья решений с очень низкой глубиной ветвления. Принцип работы следующий: обучается первое дерево, затем на его ошибках обучается второе – и так далее, пока мы не достигнем требуемой точности. Все обученные деревья приобретают свой вес, пропорциональный их собственной точности. А когда нужно получить ответ от голосующей модели, используются эти веса: чем вес больше, тем выше влияние на результат (например, AdaBoost).
Самые известные алгоритмы на основе бустинга деревьев (Gradient Boosting Decision Tree) – XGBoost [57], LightGBM [58] от Microsoft и CatBoost [59] от Яндекса. Они являются топовыми алгоритмами, с помощью которых побеждают на Kaggle. Сравним деревья на бустинге и бэггинге. Первый последовательный, второй параллельный, поэтому бэггинг быстрее считается. Его можно распараллелить по нодам кластера или по ядрам процессора. Это бывает важно, например, когда вы хотите быстро получить результат, Random Forest будет быстрее. По точности решения лидирует бустинг, но для этого его нужно долго учить (дни и даже недели), подбирать множество параметров модели (гиперпараметров). Random Forest из коробки учится проще.
Одной из вторичных функций этих ансамблей является список фич, отсортированных в порядке их влияния (Feature Importance). Это может быть полезно, если вы хотите использовать какую-либо другую модель, но в датасете слишком много столбцов (фич).
Глава 9
Машинное обучение на практике
Как изучать машинное обучение
Когда я учился в Твери, в самой обычной школе, и целый год самостоятельно готовился к поступлению в МФТИ, то обкладывался учебниками и решал олимпиадные задачи по четыре часа в день. Два часа уходило на математику, два часа на физику. Я привык так учиться, по-настоящему хорошие книги – мои лучшие друзья.
Я считаю, что получить фундаментальные знания о предмете можно только из книги. Но сейчас время идет быстрее, чем 20 лет назад, и его часто не хватает, чтобы прочитать весь учебник от корки до корки. Приходится часть информации хватать по верхам – и вот тут пригодятся хорошие онлайн-курсы. Я лично пользуюсь Coursera – они первыми сделали хороший коммерческий продукт, за которым стояли профессора Стэнфорда. Я прошел там дюжину различных предметов и именно на Coursera нашел самый лучший курс по машинному обучению. Это курс Machine Learning [61], автором которого является Эндрю Ын. Сам Эндрю – сооснователь Coursera. Я думаю, что его курс сделал очень многое для популярности этой платформы. Цифра зарегистрировавшихся на Machine Learning на сегодняшний момент перевалила за 3 миллиона. Также у Эндрю есть книга по практике машинного обучения [60], она доступна бесплатно.
Отличие этого курса от остальных заключается в том, что в нем выдержан очень хороший баланс между практикой и теорией. У меня фундаментальное образование МФТИ по физике и математике, но я не люблю, когда практический курс изобилует формулами и выкладками. Курс должен давать минимальную теоретическую информацию, чтобы сделать первые практические шаги как можно быстрее. После курса слушатель должен не просто понимать, как ему что-то сделать, но и почему. А глубоко изучать теорию нужно по книгам, а не по курсам.
Еще один большой плюс курса Эндрю Ына – вы будете сами программировать алгоритмы и поймете, как они устроены внутри. Это знания лишат вас страха перед машинным обучением – оно перестанет быть для вас магией и станет ремеслом. Я уверен, тот, кто усвоил школьный курс математики и знает технический английский, сможет без больших усилий пройти этот курс [61]. В нем не хватает только пары вещей – деревьев решений и ансамблей. Кстати, Machine Learning Эндрю Ына рекомендует и Шавье Аматриан на своей странице Quora.com.
Как еще можно освоить машинное обучение? Самостоятельно писать алгоритмы. Шавье рекомендует [62] следующую последовательность действий: взять хорошую книгу по машинному обучению, прочитать вводные главы, затем выбрать в книге алгоритм, который вам интересен, и написать его на том языке программирования, которым вы владеете. Если какие-то вещи непонятны, то можно подсмотреть готовую реализацию этого алгоритма в коде каких-либо библиотек (но лучше делать это по минимуму). Я давно заметил: чем сложнее даются знания, тем лучше они усваиваются. Не нужно бояться изобретать велосипед, эти знания пригодятся в дальнейшем. Я лично воспользовался советом Шавье несколько лет назад и написал свою небольшую библиотеку для машинного обучения на Scala [63]. В то время я читал книгу по дизайну программ на Scala и решил объединить эти знания и курс на Coursera. Для библиотеки использовал векторизованные вычисления так же, как это делал Эндрю Ын.
Читать дальше
Конец ознакомительного отрывка
Купить книгу