Обработка данных: машинное обучение с учителем на языке Python

Введение и план курса

Приветствую и добро пожаловать на занятия по теме «Обработка данных: машинное обучение с учителем на языке Python».

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

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

Программа Google AlphaGo смогла победить чемпиона мира в этой интеллектуальной игре благодаря использованию глубокого обучения с подкреплением.

Машинное обучение применяется даже в программировании машин с автопилотом, что навсегда изменит автомобильную индустрию. Представьте себе мир с резко сократившимся количеством автокатастроф благодаря простому удалению «человеческого фактора».

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

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

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

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

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

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

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

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

Мы обсудим библиотеку Sci-Kit Learn, поскольку даже несмотря на то, что разработка собственных алгоритмов – это интересно и познавательно, вы должны уметь использовать оптимизированный и тщательно проверенный код в вашей настоящей работе.

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

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

Обзор важнейших понятий

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

Прежде всего предполагается, что если вы изучаете этот курс и в нём есть название «машинное обучение с учителем», то вы знаете, что это такое. Напомню, что обучение с учителем – это когда в учебных данных у нас есть и X, и Y, или, другими словами, входные данные и соответствующие им целевые переменные (метки). Что касается задач обучения с учителем, то тут у нас есть две главные функции, которые должны быть реализованы в любой данной модели: обучение и прогнозирование.

В обучении без учителя у нас есть только X, но нет целевых переменных. Поэтому тут мы можем провести только оценку плотности, кластеризацию, в более общем смысле – изучить структуру данных.

Когда речь идёт об обучении без учителя, то мы можем разделить его на две части: классификацию и регрессию. Классификация – это когда метки дискретны. Например, мы хотим спрогнозировать, будет ли завтра дождь. Ответ может быть «да» или «нет» – значит, это классификация. Другой пример – будут ли завтра расти котировки акций компании? Вновь-таки, ответ либо «да», либо «нет».

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

В машинном обучении мы принимаем ряд соглашений, которые, вообще говоря, поддерживаются большинством API. Во-первых, входные данные X, как правило, представлены в виде матрицы размерности NxD, где N – количество примеров, а D – количество признаков. Входные целевые переменные Y обычно представляются в виде вектора размерности N, поскольку каждый входной вектор должен иметь соответствующую целевую переменную. В случае регрессии это вектор будет содержать числа с вещественными значениями; в случае же классификации это будет вектор с целыми числами от 0 до K-1, где K равно количеству возможных классов.

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

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

Здесь я покажу, где взять код и данные для этого курса.

Весь код для моих курсов хранится в репозитарии Github по адресу https://github.com/lazyprogrammer/machine_learning_examples. Папка, содержащая код для этого курса, называется supervised_class. Github – это система контроля версий, позволяющая постепенно вносить изменения. Вы можете ознакомиться с последними версиями благодаря команде git pull. На этом этапе я ожидаю, что все мои слушатели или уже знакомы с Github, или могут быстро его освоить.

Основным набором данным, которым мы будем пользоваться в этом курсе, является база данных MNIST. Это известная база данных для проверочных тестов машинного обучения, состоящая из рукописных цифр от 0 до 9. Её можно получить по адресу https://www.kaggle.com/c/digit-recognizer.

Если вы никогда прежде не сталкивались с базой данных MNIST, то она состоит из изображений размером 28х28. Они сглажены в векторы, поскольку машинное обучение работает с векторами; 28х28 даёт нам 784-размерный вектор. Обратите внимание, что это не цветные изображения, а потому нет никаких RGB-каналов. Каждый пиксель содержит лишь информацию об интенсивности свечения, являющейся числом от 0 до 255. Мы отмасштабируем данные, чтобы они были в диапазоне от 0 до 1, поскольку машинное обучение, вообще говоря, лучше работает с малыми значениями, хотя алгоритмы, с которыми мы будем работать, к этому не особо чувствительны.

Все данные хранятся в формате CSV, представляющий собой значения, разделённые запятыми. CSV-файл содержит строку заголовка, первый столбец представляет собой метки – значения от 0 до 9. В файле train.csv находится 42 тысячи примеров. Файлом test.csv мы пользоваться не будем, поскольку он используется для оценок Kaggle и не содержит меток.

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

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