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

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

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

Якщо загугліть «How to become a Data Scientist», можна натрапити на безліч картинок на зразок цієї або цієї. В цілому, все, що там написано — дійсно так. Але, вивчивши все це, не гарантується, що вас чекає успіх у вирішенні реальних завдань на практиці. В цілому, можна піти шляхом, викладених на зображеннях вище — а саме, вчитися самостійно, після чого піти і вирішувати реальні завдання. Можна вчинити інакше — піти отримати спеціальну освіту. У свій час мені довелося пройти і той, і інший шлях — і курси Coursera, Школу Аналізу Даних і безліч інших курсів у Вузі, у тому числі з комп'ютерного зору, аналізу веб-графів, Large Scale Machine Learning та ін. Мені пощастило навчатися у кращих викладачів — і пройти кращі курси, які тільки є. Але тільки після того, як я почав застосовувати отримані знання на практиці, прийшло розуміння, що в курсах часто не приділяється належна увага практичним проблемам, або вони не засвоюються до тих пір, поки сам на них не натрапиш. Тому, я постараюся викласти набір мінімальних навичок, яких буде достатньо для того, щоб якомога швидше почати розв'язувати задачі на практиці.

Станьте відмінним математиком
Так, це напевно найважливіше — математичне мислення, яке треба розвивати в собі постійно з молодших років. Для тих, хто, можливо це упустив, варто почати з курсів по Дискретній математиці — це корисно взагалі для всіх людей, які працюють в IT. На цьому базуються всі докази і міркування в подальших курсах. Рекомендую пройти курс Олександра Борисовича Дайняка, який коли-то я слухав очно. Цього має бути достатньо. Тут важливо набрати навички роботи з дискретними об'єктами.

Після того, як ви навчитеся оперувати дискретними об'єктами, рекомендується познайомитися з побудовою ефективних алгоритмів — для цього достатньо пройти невеликий курс за алгоритмами, на зразок курсу ШАДа або прочитавши огляд відомих алгоритмів на e-maxx.uk — досить популярний сайт серед учасників 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, вказавши:

  • Інформацію про себе: як вас звати, чим займаєтеся, де працюєте/вчіться
  • Ваш досвід: що намагалися вчити самі, що вийшло не вийшло
  • Цілі, яких ви хочете досягти: найважливіший пункт — без цього листа читати не буду)
  • Ваш безпосередній питання, якщо такий вже є
Буду чекати Ваших листів!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.