Ваш персональный курс по Big Data

Если загуглить «How to become a Data Scientist», можно наткнуться на множество картинок вроде этой или этой. В целом, все, что там написано — действительно так. Но, изучив все это, не гарантируется, что вас ждет успех в решении реальных задач на практике. В целом, можно пойти путем, изложенным на изображениях выше — а именно, учиться самостоятельно, после чего пойти и решать реальные задачи. Можно поступить иначе — пойти получить специальное образование. В свое время мне довелось пройти и тот и другой путь — и курсы Coursera, и Школу Анализа Данных и множество других курсов в ВУЗе, в том числе по компьютерному зрению, анализу веб-графов, Large Scale Machine Learning и др. Мне повезло учиться у лучших преподавателей — и пройти лучшие курсы, какие только есть. Но только после того, как я начал применять полученные знания на практике, пришло понимание, что в курсах зачастую не уделяется должное внимание практическим проблемам, либо они не усваиваются до тех пор, пока сам на них не наткнешься. Поэтому, я постараюсь изложить набор минимальных навыков, которых будет достаточно для того, чтобы как можно скорее начать решать задачи на практике.Ваш персональный курс по Big Data

Станьте отличным математиком

Да, это наверное самое важное — математическое мышление, которое надо развивать в себе постоянно с младших лет. Для тех, кто, возможно это упустил, стоит начать с курсов по Дискретной математике — это полезно вообще для всех людей, которые работают в 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

Итак, мы рассмотрели далеко не все знания и навыки, которые требуются для того, чтобы понимать, как на практике работать с Big Data. Но часто в реальных задачах на практике возникает множество трудностей, с которыми приходится работать. Например, элементарно может отсутствовать обучающая выборка или часть данных может быть известна с некоторой точностью. Когда же дело касается реально огромных массивов данных — то тут зачастую начинаются в том числе и технические трудности и важно знать не только методы машинного обучения, но и их эффективную реализацию. Более того, еще только появляются и развиваются инструменты, которые позволяют обрабатывать данные в оперативной памяти и часто нужно очень постараться, чтобы правильно их закэшировать, либо известная проблема мелких файлов того же Apache Spark — со всем этим приходится иметь дело на практике!

Помимо цели обучения людей, я также хочу показать, что методы обработки «Big Data», про которые так любят рассказывать маркетологи, не являются «волшебной палочкой», с помощью которой можно творить чудеса. Я постараюсь показать, какие задачи сейчас решаются хорошо, какие возможно решить при желании, а какие — пока еще решать тяжело. После Ваших вопросов я напишу большой пост, в котором опубликую развернутые ответы. Давайте вместе развивать Data Science, потому что настоящих специалистов сейчас очень не хватает, а дорогих курсов хоть отбавляй.

Читайте также: