Ваш персональный курс по Big Data
Если загуглить «How to become a Data Scientist», можно наткнуться на множество картинок вроде этой или этой. В целом, все, что там написано — действительно так. Но, изучив все это, не гарантируется, что вас ждет успех в решении реальных задач на практике. В целом, можно пойти путем, изложенным на изображениях выше — а именно, учиться самостоятельно, после чего пойти и решать реальные задачи. Можно поступить иначе — пойти получить специальное образование. В свое время мне довелось пройти и тот и другой путь — и курсы Coursera, и Школу Анализа Данных и множество других курсов в ВУЗе, в том числе по компьютерному зрению, анализу веб-графов, Large Scale Machine Learning и др. Мне повезло учиться у лучших преподавателей — и пройти лучшие курсы, какие только есть. Но только после того, как я начал применять полученные знания на практике, пришло понимание, что в курсах зачастую не уделяется должное внимание практическим проблемам, либо они не усваиваются до тех пор, пока сам на них не наткнешься. Поэтому, я постараюсь изложить набор минимальных навыков, которых будет достаточно для того, чтобы как можно скорее начать решать задачи на практике.
Станьте отличным математиком
Да, это наверное самое важное — математическое мышление, которое надо развивать в себе постоянно с младших лет. Для тех, кто, возможно это упустил, стоит начать с курсов по Дискретной математике — это полезно вообще для всех людей, которые работают в IT. На этом основаны все доказательства и рассуждения в дальнейших курсах. Рекомендую пройти курс Александра Борисовича Дайняка, который когда-то я слушал очно. Этого должно быть достаточно. Здесь важно набрать навыки работы с дискретными обьектами.
После того, как вы научитесь оперировать дискретными обьектами, рекомендуется познакомиться с построением эффективных алгоритмов — для этого достаточно пройти небольшой курс по алгоритмам, вроде курса ШАДа или прочитав обзор известных алгоритмов на e-maxx.ru — довольно популярный сайт среди участников ACM. Здесь достаточно понимать, как реализовавывать алгоритмы эффективно, а также знать типичные структуры данных и случаи, когда их использовать.
После того, как ваш мозг научился оперировать с дисретными обьектами, а также развилось алгоритмическое мышление вам необходимо научиться мыслить в терминах теории вероятности. Для этого я рекомендую (заодно освежив знания в области дискретной математики) пройти курс моего научного руководителя Андрея Михайловича Райгородского, который умеет обьянять сложные вещи «на пальцах». Здесь важно научиться оперировать в терминах теории вероятности и знать основные понятия математической статистики.
В целом, этого хоть и мало, но на практике достаточно для того, чтобы иметь дело с дискретными обьектами и оперировать вероятностными величинами. Еще неплохо иметь представление о линейной алгебре, но, как правило, в курсах машинного обучения есть введения в необходимые разделы. Добавив к этому хорошие навыки программирования, можно стать неплохим разработчиком.
Научитесь писать код
Для того, чтобы стать хорошим разработчиком, конечно необходимо знать языки программирования и иметь опыт написания хорошего промышленного кода. Для ученого по данным достаточно знания, как правило, скриптовых языков, такие вещи, как шаблоны или классы, обработка исключений, как правило — не нужны, поэтому в них углубляться не стоит. Вместо этого неплохо знать хотя бы один скриптовый язык, ориентированный на научные и статистические вычисления. Наиболее популярные из них — это Python и R. Существует достаточно много хороший онлайн курсов по обоим языкам. Например, вот этот по Python или вот этот по R — в них даются базовые знания, достаточные для специалиста по данным. Здесь в первую очередь важно научиться работать с манипулированием данными — это 80% работы ученого по данным.
Пройдите основные курсы по машинному обучению
После того, как вы обрели хорошую математическую культуру и получили навыки программирования — самое время начать изучать машинное обучение. Я настоятельно рекомендую начать с курса Andrew Ng — т.к. этот курс остается до сих пор наилучшим введением в предмет. Конечно, в курсе проспускаются важные распространенные алгоритмы, вроде деревьев — но на практике, теоретических знаний, полученных в этом курсе вам будет достаточно для решения большинства задач. После этого настоятельно рекомендуется начать как можно скорее решать задачи на Kaggle — а именно, начать с задач из раздела Knowledge — в них есть хорошие Tutorials, в которых разбираются задачи — именно они нацелены на быстрый старт для новичков. Уже после этого можно подробнее познакомиться с оставшимися разделами машинного обучения и пройти полностью курс К.В.Воронцова по машинному обучению. Здесь важно получить целостное представление о задачах, которые могут возникать на практике, методах их решения и научиться реализовывать свои идеи на практике. Важно также добавить, что большинство алгоритмов машинного обучения уже реализовано в библиотеках, таких как scikit-learn для Python. Введение в Scikit-Learn я публиковал ранее.
Практикуйтесь в построении алгоритмов
Участвуйте как можно больше в соревнованиях по машинному обучению — решайте как простые классические задачи, так и задачи в неклассической постановке, когда, например, нет обучающей выборки. Это необходимо для того, чтобы вы набрались различных методик и трюков, которые используются в задачах и помогают значительно увеличить качество полученных алгоритмов. О некоторых практически важных трюках я рассказывал ранее здесь и здесь.
После этого, вы уже, как правило готовы к построению хороших алгоритмов и к участию в денежных соревнованиях Kaggle, однако, пока ваши возможности ограничиваются работой с небольшими данными, которые помещаются в оперативной памяти вашей машины. Для того, чтобы иметь возможность работать с большими данными необходимо познакомиться с моделью вычислений Map-Reduce и инструментами, применяемыми для работы с большими данными
Познакомьтесь с большими данными
После того, как вы научились строить хорошие модели — необходимо научиться работать с большими данными. В первую очередь нужно познакомиться с методами хранения больших данных, а именно с файловой системой HDFS, которая входит в стек Hadoop, а также с моделью вычислений Map-Reduce. После этого необходимо познакомиться с остальными компонентами из стека Hadoop — а именно, как устроена YARN, как работает планировщик Oozie, как устроена NoSQL базы данных, такие как Cassandra и HBase. Как данные импортируются в кластер с помощью Apache Flume и Apache Sqoop. В сети пока еще мало курсов по этим разделам, наиболее полным справочником остается книга Hadoop: The Definitive Guide. Здесь важно понять особенности взаимодействия всех компонент Hadoop, а также способы хранения и вычислений на больших данных.
Познакомьтесь с современными инструментами
После изучения стека технологий Hadoop, вам необходимо познакомиться с фреймворками, которые используются парадигму Map-Reduce и с прочими инструментами, которые использутся для вычислений на больших данных. Часть из этих инструментов я описывал уже ранее. А именно — познакомьтесь с набирающем в последнее время популярность Apache Spark, который мы уже рассматривали здесь, здесь и здесь. Помимо этого рекомендуется познакомиться с альтернативными инструментами, работать с которыми вы можете даже не имея кластера — это инструмент, позволяющий строить линейные модели (обучая их в онлайн-режиме, не помещая обучающую выборку в оперативную память) Vowpal Wabbit, обзор которого мы делали ранее. Также, важно изучить простые инструменты из стека Hadoop — Hive и Pig, которые используются для несложных операций с данными в кластере. Здесь важно научиться реализовывать необходимые вам алгоритмы машинного обучения, как вы это делали ранее с помощью Python. Отличием является то, что теперь вы работаете с большими данными с помощью другой модели вычислений.
Изучите Real-Time инструменты обработки больших данных и вопросы архитектуры
Зачастую хочется строить системы, которые принимают решения в реальном времени. В отличие от работы с накопленными данными, здесь существует своя терминология и модель вычислений. Рекомендуется познакомиться с инструментами Apache Storm, который исходит из предположения, что единица обрабатываемой информации — это транзакция, и Apache Spark Streaming — в котором заложена идея о том, чтобы производить обработку данных мелкими кусками (batch‘ами). После этого у любого читателя возникнет вопрос — как выглядит архитектура кластера, в которой часть поступающих данных обрабатывается в режиме онлайн, а часть — накапливается для последующей обработки, как эти две компоненты взаимодействуют между собой и какие инструменты используются в каждом на каждом этапе хранения и обработки данных. Для этого я рекомендую познакомиться с так называемой лямбда-архитектурой, которая достаточно подробно описана на этом ресурсе. Здесь важно понимать, что на каждом этапе происходит данными, как они преобразуются, как они хранятся и как над ними происходят вычисления.
Итак, мы рассмотрели далеко не все знания и навыки, которые требуются для того, чтобы понимать, как на практике работать с Big Data. Но часто в реальных задачах на практике возникает множество трудностей, с которыми приходится работать. Например, элементарно может отсутствовать обучающая выборка или часть данных может быть известна с некоторой точностью. Когда же дело касается реально огромных массивов данных — то тут зачастую начинаются в том числе и технические трудности и важно знать не только методы машинного обучения, но и их эффективную реализацию. Более того, еще только появляются и развиваются инструменты, которые позволяют обрабатывать данные в оперативной памяти и часто нужно очень постараться, чтобы правильно их закэшировать, либо известная проблема мелких файлов того же Apache Spark — со всем этим приходится иметь дело на практике!
Помимо цели обучения людей, я также хочу показать, что методы обработки «Big Data», про которые так любят рассказывать маркетологи, не являются «волшебной палочкой», с помощью которой можно творить чудеса. Я постараюсь показать, какие задачи сейчас решаются хорошо, какие возможно решить при желании, а какие — пока еще решать тяжело. После Ваших вопросов я напишу большой пост, в котором опубликую развернутые ответы. Давайте вместе развивать Data Science, потому что настоящих специалистов сейчас очень не хватает, а дорогих курсов хоть отбавляй.