Не так давно я закончил свой первый курс на Coursera - Введение в машинное обучение от Константина Вячеславовича Воронцова. До этого с машинным обучением я сталкивался очень хаотично и давно хотел получить нормальную базу и как-то систематизировать свои знания. Конечно, за 7 недель нельзя стать специалистом по машинному обучению, но точно можно получить как минимум общее представление о предмете, а как максимум - начать применять базовые знания в работе, поскольку во время выполнения заданий (а их немало) приходится разбираться с реализациями алгоритмов из библиотеки sklearn, а некоторые вещи и реализовывать самостоятельно.

О необходимых знаниях

Хотя на странице курса и написано, что "слушателю нужно знать об основных понятиях математики: функциях, производных, векторах, матрицах. Для выполнения практических заданий потребуются базовые навыки программирования", по факту для полноценного прохождения студенту нужно уже иметь опыт работы с Python (многие студенты на это жаловались в обсуждении) и достаточно хорошо владеть математикой. Из математических дисциплин больше всего пригодятся знания из курса теории вероятностей, математической статистики, математического анализа и линейной алгебры.

О курсе

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

  • Подготовка данных.
  • Задачи регрессии.
  • Задачи классификации.
  • Определение качества алгоритма.

В лекциях материал подается достаточно подробно, с обилием математических выкладок и обоснований принципов работы алгоритмов, что неудивительно, так как материал построен на основе курсов, которые господин Воронцов ведет в МФТИ и ШАД - те, кто не прогуливал математику в университете будут довольны. Но принципы работы всех методов машинного обучения можно понять, даже если слушать всю теорию в пол уха, но внимательно смотреть в презентацию. Если совсем непонятно - многие темы рассмотрены в книге "Программируем коллективный разум" и на замечательном ресурсе MachineLearning.ru.

Главная часть курса - задания, и они действительно интересные. Как я опять же писал ранее, для их выполнения нужно неплохо ориентироваться в Python (или иметь хороший опыт разработки на других языках) и уметь самостоятельно разбираться с англоязычной документацией библиотек. Начинать знакомство с анализом данных предлагают с классики - датасета о пассажирах Титаника, а затем заняться предсказанием зарплаты по описанию вакансии (да, вот прямо по тексту вакансии), находить компании, изменение цены акций которых максимально влияют на рынок, находить похожие по тематике сайты и многое другое, а в конце предлагается выполнить проект по предсказанию победителя в матче Dota 2 по данным за первые 15 минут игрового времени. Финальный проект использует данные с Kaggle и у студентов есть возможность сравнить свой результат с другими.

О достоинствах курса

  • Материал четко структурирован и формализован.
  • Рассмотрены все классические методы машинного обучения: регрессии (линейная и логистическ), метод опорных векторов (SVM), деревья решений, метрические методы (k-means), методы пони *ния размерности и композиции алгоритмов.
  • Разобраны принципы работы нейросетей и алгоритмов обучения без учителя.
  • Задания в курсе интересные, хорошо подобраны и процесс их выполнения понятно описан. И предлагают решать их на Python - а это хороший и годный язык:)
  • По мере прохождения курса учат работать с уже реализованными алгоритмами из библиотек. Для кого-то это минус - но я не представляю, как за 7 недель можно успеть и реализовать все это самому, и попробовать поиграть с реальными данными (в ШАДе только на это отводят год, если мне не изменяет память).
  • Много внимания уделено принципам измерения качества классификации и регрессии - тема далеко не самая простая, а при построении модели неверно выбранные критерии качества могут отправить всю проделанную работу в мусорную корзину.
  • Несколько лекций посвящено проблемам подготовки данных для обучения моделей - на русском языке подобного по качеству обзора этой темы я нигде не встречал.
  • Финальный проект шикарен - на примере одной задачи (используя реальные данные) предлагается провести свое исследование. Конечно, к заданию есть подробная инструкция (необходимый минимум того, что нужно сделать), но никто не мешает применить все полученные знания в полной мере и попробовать посоревноваться на Kaggle.

О недостатках

  • Очень много теории, которая не используется в практических заданиях. Я не сильно люблю голую теорию, а без практики она забывается очень-очень быстро.
  • Мало внимания уделено нейросетям. Как мне показалось - даже меньше, чем той же логистической регрессии.
  • В некоторых заданиях были ошибки, что, конечно, можно списать на первый запуск подобного курса в России, но я все же убил на них очень много времени.
  • В описании некоторых заданий не описаны ключевые моменты - мне приходилось читать расширенную документацию и исходный код sklearn для обретения просветления. Лишним это, конечно, не было, но вряд ли авторы курса на это и рассчитывали.
  • Глупая система приема ответа к заданиям - необходимо прислать файл, и обязательно без перевода строки в конце. Судя по форуму - это обстоятельство загубило кучу нервных клеток у многих студентов. Я же просто генерировал файлы с ответами из Python'а и отсылал их в неизменном виде.
  • Преподаватели иногда долго отвечали на вопросы с форума - могли не отвечать по нескольку дней, что не очень красиво.

Итого

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

Я выше описал много недостатков, но большинство из них уже исправлено - как говорят коллеги, которые сейчас этот курс проходят (я проходил его в первую же открытую сессию): преподаватели стали отвечать быстрее, ошибки и неточности исправлены, а описания заданий стали подробнее. Даже с учетом оставшихся (которые могут быть весьма субъективными) - этот курс на сегодняшний момент один из лучших, а из тех, которые есть на русском языке - самый структурированный, полный и интересный.


Comments

comments powered by Disqus