MLClass
Компания
33,25
рейтинг
16 марта 2015 в 16:13

Разработка → Ваш персональный курс по Big Data

Привет, хабр!

После публикации нескольких статей по Big Data и Машинному обучению, ко мне пришло немало писем от читателей с вопросами. За последние несколько месяцев мне удалось помочь многим людям сделать быстрый старт, некоторые из них — уже решают прикладные задачи и делают успехи. А кто-то уже устроился на работу и занимается решением реальных задач. Моя цель — чтобы вокруг меня были умные люди, с которыми в том числе и я смогу работать в дальнейшем. Поэтому я хочу помочь тем, кто действительно хочет научиться решать настоящие задачи на практике. В сети присутствует большое количество мануалов о том, как стать ученым по данным (Data Scientist). В свое время я прошел все, что там есть. Однако, на практике порой нужны совсем другие знания. О том, какие именно навыки нужны — я расскажу в сегодняшней статье и постараюсь ответить на все Ваши вопросы.

Если загуглить «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, для того, чтобы в последствии с ними работать. За последние несколько месяцев мне удалось помочь многим людям сделать быстрый старт. Поэтому, я очень хочу с Вами познакомиться и ответить на текущие вопросы, помочь начать решать задачи или помочь с решением уже существующих. Дальше я буду наблюдать за вашим прогрессом (если Вы не против) и помогать, если это будет необходимо. Лучших людей я выберу и буду персонально готовить на протяжении ближайших нескольких месяцев, после чего, возможно, у меня к ним будут интересные предложения!

Не знаю, сколько писем придет на почту, сразу лишь скажу — что отвечать буду поздно вечером, либо ночью, т.к. днем я работаю). Постараюсь ответить на столько писем, насколько смогу.

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

Поэтому, все те, кто хотел бы научиться решать задачи, независимо от Вашего уровня подготовки — напишите мне на почту (al.krot.kav@gmail.com) письмо с темой Big Data, указав:

  • Информацию о себе: как вас зовут, чем занимаетесь, где работаете/учитесь
  • Ваш опыт: что пытались учить сами, что получилось/не получилось
  • Цели, которых хотите достичь: самый важный пункт — без этого письмо читать не буду)
  • Ваш непосредственный вопрос, если таковой уже есть


Буду ждать Ваших писем!
Автор: @akrot
MLClass
рейтинг 33,25
Компания прекратила активность на сайте

Комментарии (22)

  • +4
    Спасибо за статью

    Увы, не хватает в рунете мест, в которых можно было бы пообсуждать анализ данных, статистику или машинное обучение. После не очень успешных поисков я решил попробовать организовать такой ресурс самостоятельно — в результате получился форум datatalks.ru/

    Приглашаются все желающие задать вопросы. Предложения и комментарии приветствуются.
    • 0
      А вы не могли-бы добавить поддержку RSS на свой сайт? А то, скорей всего о нем многие забудут уже через неделю, а в RSS рассылке он не затеряется.
      • 0
        Да, поддержка RSS планируется.
    • 0
      Да, ресурсов нет почти, но и людей, пытающихся этим заниматься не так много)
    • 0
      Ничего против вашего сайта не имею, конечно, но, может стоит посмотреть в сторону Slack для коммуникаций?
      Вот тут положительный опыт, удобно.
  • 0
    Спасибо за пост.
    Он действительно может стать хорошей первой ступенькой для всех, кто интересуется ML и Big Data.
    • 0
      Спасибо за отзыв! Еще бы ответить на пару сотен писем мне теперь в почте))
      • +2
        Это ведь и есть big data. И как это вы не подготовились :)
  • 0
    Data Scientist нельзя перевести как «аналитик»?
    • 0
      Вроде бы смысл подходящий, но в русском языке «аналитик» скорее ассоциируется с бизнес-аналитиками и системными аналитиками.
      Можно конечно по аналогии придумать термин «аналитик данных», но зачем? Термин неустоявшийся, для понимания смысла термина все равно придется вспоминать оригинальный термин: «Аааа, это Data Scientist что ли?»
      • 0
        Точно также прочитав «ученый по данным», я могу подумать «Аааа, это Data Scientist что ли?» Data Scientist занимается анализом данных, т.е. это аналитик.
    • +1
      по-моему, неплохо вариант — «исследователь данных».
    • 0
      Наверное, можно, смотря кого называть аналитиком) Но, это уже кому как нравится, не хотелось бы разводить холивар
    • 0
      Аналитик, он же Data Analyst — в принятой иерархии (условно назовём это так) предыдущая ступень. То есть это человек, который отвечает на конкретные вопросы на основе конкретных наборов данных. А data scientist это ступень следующая, в широком смысле это уже больше исследователь, как правильно написали ниже, т.е. в частности тот, кто как раз добывает новые знания из данных.
  • 0
    Отдельное спасибо за упоминание лямбда архитектуры. очень интересны цифры/производительность. Не подскажите где с этим можно ознакомиться?
    • 0
      Так вот же я вроде вставлял ссылку в самой статье, на всякий случай продублирую:

      lambda-architecture.net/

  • 0
    Я пока c реально большими данными не работал, но кажется, серьезная сложность при переходе от подготовленных Kaggle датасетов к реальным данным с пропусками, ошибками, несоответствием форматов и прочим безобразием — это парсинг данных. На курсере в специализации «Data Science» говорится о некоторых приемах data munging, и что на это дело в работе исследователя данных уходит 90% времени.
    Есть какие-то рекомендации, где научиться экономить время на подготовку данных, или это уже только с опытом приходит?
    • 0
      сегодня стартовал курс на coursera: «Text Retrieval and Search Engines». думаю он может быть полезен как раз этой точки зрения.
    • +1
      Да, это как раз и есть одна из самых больших сложностей в реальных задачах. А если еще учесть зачастую размытую постановку задачи — это добавляет еще больше трудностей.

      Наверное, общих рекомендаций нет, скорее да, это приходит с опытом
  • +3
    Дело правильное, помойму на сайте ШАД выложенны лекции по большим данным.

    Могу поделиться лекциями и лабами, может помогут: yadi.sk/d/bw2Z2we4ecGmL/Hadoop.
  • 0
    Друзья, я не ожидал, что мне придет столько писем — сейчас их несколько сотен! Обещаю всем обязательно ответить, как только доберусь до почты!
    • 0
      Надо было на гугл формах сделать. Всё бы красиво в табличку сложилось) А от туда уже спамить)
  • 0
    Александр, приглашаю Вас выступить на нашем митапе по Data Science (http://www.meetup.com/Moscow-Data-Science/). Судя по Вашему профилю LinkedIn, нашим слушателям будет интересно в Вами пообщаться. Следующая встреча состоится в конце мая.
  • –1
    Александр, большое спасибо за обстоятельную и интересную статью. Я долго созревал написать свои мысли на эту тему и наконец собрал их все вместе :)

    Как только я прошлом году начал плотно изучать тему больших данных и машинного обучения, то обнаружил два довольно разных подхода к тому, как вырастить в себе data scientist. В какой-то момент я изучил практически все материалы сайта datasciencecentral.com и с большим интересом прочитал книгу его основателя Vincent Granville «Developing Analytic Talent: becoming a data scientist», после чего мне просто хотелось застрелиться :) поскольку data scientist по версии Винсента как раз и есть пресловутый unicorn, единорог, эдакий «универсальный солдат», который на высшем уровне разбирается во всех перечисленных областях одновременно. Я далеко не слабак, но тут даже у меня самооценка и вера в себя как-то немного упали :)

    С другой же стороны, есть замечательный ресурс по машинному обучению machinelearningmastery.com, и его автор-исполнитель Jason Brownlee придерживается примерно противоположной точки зрения, просто пара цитат:

    You do not need to learn linear algebra before you get started in machine learning, but at some time you may wish to dive deeper.

    You do not need to get a degree in machine learning to get started or make progress in the field of machine learning

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

    Про ШАД я уже писал свои мысли на одном из форумов на Coursera, поэтому позволю себе просто процитировать себя же (можно соглашаться, можно нет):

    Это отличные материалы, но они к сожалению далеко не для начинающих. ШАД предъявляет довольно высокие входные требования и это ни для кого не секрет; я когда-то сам очень хотел пойти учиться в ШАД (тем более что сам работаю в Яндексе), но потом понял, что без интенсивной теоретической подготовки я просто не сдам входной экзамен (и то, что я закончил Бауманку 17 лет назад, в этом деле мне сейчас мало поможет, к сожалению). У меня есть ощущение, что в ШАД приходят в основном учиться вчерашние студенты мехматов и бауманок, у кого ещё головы светлые и есть желание продолжать учёбу и научную работу. Для них это хорошая перспектива. И мои друзья, которые там работают, это в целом подтверждают.

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

    И второй важный момент, который хотелось бы отметить. Мне кажется, все перечисленные вами умения и знания, безусловно полезные сами по себе, мало что означают без того, чтобы их обладатель был экспертом в какой-то конкретной предметной области. Опять же возвращаемся к нашим единорогам: я могу быть экспертом в области атифрода, мой товарищ — специалист в области предиктивной аналитики оттока клиентов, а ещё кто-то — гуру анализа тональности текстов и майнинга соцсетей. Как мне кажется, мы не должны быть взаимозаменяемыми! Каждый специалист представляет ценность как эксперт и гуру именно в своей области, зато уж в ней ему нет равных. Резюмируя: важно не только изучить теорию, технологии, инструменты и алгоритмы, но и чётко понимать для себя, для решения каких именно задач ты будешь всё это применять и какая область для тебя ближе, где ты являешься экспертом и специалистом.

    Вот только вчера я наткнулся на статью «Do You Really Need a Unicorn?», которая практически слово в слово созвучна мои мыслям. Один из тезисов в ней на мой взгляд очень простой и очень правильный:

    The field of data science has just become too big and too diverse for any one individual to master all its disciplines. This is like trying to find a single medical doctor who can cure cancer, deliver babies, diagnose tropical diseases, and perform open heart surgery. The era of specialization is upon us.

    То есть, проходит время «универсальных солдат» и единорогов в области Data Science, область стала слишком большой для того, чтобы один человек мог быть совершенным во всех её составляющих, data scientists становятся более узко-специализированными в своих экспертных областях и занимаются тем, что умеют и знают лучше всего.

    И чуть-чуть конкретики напоследок. В дополнение к перечисленным вами курсам я бы хотел всем порекомендовать онлайн-курс Statistical Learning от Stanford. Я как раз сейчас его заканчиваю и могу сказать, что он прекрасно сочетается с Machine Learning от Andrew Ng. Он упорядочивает именно теоретические знания и закрепляет некий начальный математический базис для понимания алгоритмов машинного обучения, в то время как курс Andrew Ng направлен больше на практическое применение алгоритмов в реальных задачах. До конца сессии правда осталось всего две недели, но материалы курса (видео-лекции и слайды) всегда доступны здесь.

    Спасибо что дочитали до конца! :)
    • –1
      Добрый день! Не могли бы Вы тоже самое прислать мне на почту?) У меня там четкий порядок, который я стараюсь соблюдать, чтобы всем ответить — было бы здорово, если бы это письмо упало на почту)
      • 0
        Бегло ознакомился с Вашим текстом. С вот этим очень согласен:

        И второй важный момент, который хотелось бы отметить. Мне кажется, все перечисленные вами умения и знания, безусловно полезные сами по себе, мало что означают без того, чтобы их обладатель был экспертом в какой-то конкретной предметной области. Опять же возвращаемся к нашим единорогам: я могу быть экспертом в области атифрода, мой товарищ — специалист в области предиктивной аналитики оттока клиентов, а ещё кто-то — гуру анализа тональности текстов и майнинга соцсетей. Как мне кажется, мы не должны быть взаимозаменяемыми! Каждый специалист представляет ценность как эксперт и гуру именно в своей области, зато уж в ней ему нет равных. Резюмируя: важно не только изучить теорию, технологии, инструменты и алгоритмы, но и чётко понимать для себя, для решения каких именно задач ты будешь всё это применять и какая область для тебя ближе, где ты являешься экспертом и специалистом.

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

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разработка