Pull to refresh

«Паровозик, который смог!» или «Специализация Машинное обучение и анализ данных», глазами новичка в Data Science

Reading time14 min
Views52K
Ранее в моей прошлой статье, посвящённой обучению Data Science с нуля, я обещал записаться на специализацию «Машинное обучение и анализ данных», на Coursera и поделиться моими впечатлениями о доступности этих знаний для практически абсолютного новичка в области науки о данных. Сказано – сделано! Хотя безусловно, на Хабре уже есть упоминания об этой и аналогичных специализациях, но думаю мои «пять копеек» не помешают.

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



Часть 1. «Вспомнить все…» — немного о навыках


Думаю, в самом начале будет уместно напомнить с чего все начиналось, чтобы читатель мог примерить мой опыт на себя.

Итак, данная статья является завершающей в спонтанно возникшем цикле статей, о том, как я осваивал азы Data Science с нуля (статьи ниже приведены в порядке появления):


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

  • Самые начальные представления о Data Science (зачем нужна, что входит, немного о методах работы)
  • Почти нулевые познания в мат. анализе и статистике (матрицы от руки перемножал с ошибками, принцип доказательства статистических гипотез не воспринимал почти на генетическом уроне)
  • Почти нулевое знание Python, немного минимальных навыков программирования в других языках (например, C#), которые похоже только мешали освоить логику Питона.
  • Шило в «пятой точке» которое заставляло убить целый месяц на сверхинтенсивное прохождение курса

Именно с такой базой я подошел к началу обучения. В описании специализации честно сказано: «Intermediate Specialization. Some related experience required.» и признаться это меня настораживало, но поскольку в разработчиках специализации числится МФТИ и Яндекс я решил рискнуть.

Кстати, доложен отметить, что курс действительно заставил меня вспомнить все, в особо трудные минуты неожиданно начали всплывать в памяти, давно «прошедшие мимо ушей» знания, казалось бы, забытые за ненадобностью. Правда, как мне кажется, эта специализация в части статистики и мат. анализа все равно отложила у меня в голове больше чем предметы из программы специалитета и магистратуры ВУЗа вместе взятые.

Ну не буду вас больше томить, перейдем ближе к делу.

Часть 2 — «Начало» — знакомство с курсом


«Какой самый живучий паразит? Бактерия? Вирус? Кишечный глист? Идея. Она живучая и крайне заразная. Стоит идее завладеть мозгом, избавиться от нее практически невозможно. Я имею в виду сформировавшуюся идею, полностью осознанную, поселившуюся в голове» — Inception

Пока писал эту статью и вспоминал прохождение курсов, задумался, что единственной здравой причиной, по которой я вообще заинтересовался Data Science может быть, только то что мне эту идею внедрили во сне, или даже во сне внутри сна во сне внутри сна…

Причем это была не просто идея — пройти курс по Data Science на Coursera, это была идея пройти курс максимально быстро потому что лишних денег, да и времени растягивать на полгода не было.

Если кто-то не знаком с новой политикой Coursera, то сейчас на данный курс действует система подписки, а именно 7 бесплатных дней пробной подписки, потом каждый месяц платно.
Специализация рассчитана примерно на 6 месяцев. Один месяц мне обошелся в 4 576 руб (сейчас стоит немного больше).

Таким образом система давала 1 месяц + 1 неделю, и я решил, что именно за этот отрезок должен пройти специализацию. Забегая вперед, скажу, что задача вполне посильная.

Перейдем к описанию программы специализации. Она состоит из 6 курсов, пять из них теоретические, а шестой это курсовой проект (Capstone Project), доступ к нему откроется только после прохождения первых пяти. Курсы желательно проходить в прямом порядке, вас конечно никто не заставляет, но очень настоятельно рекомендуют. Если вы решите в сжатый срок пройти специализацию, то иногда будет смысл немного проходить курсы не в прямом порядке (об этом позже), но скорей всего это вам «аукнется» и будет необходимо возвращаться к ранее пройденному.

Пять курсов специализации плавно подводят вас к возможности самостоятельного применения знаний, особенно ценны они во взаимосвязи, но в принципе курсы могут быть полезны и по отдельности. Так некоторые курсы (точнее их части) похоже были сделаны несколько в отрыве от основного контекста, но в любом случае генеральная линия прослеживается и требования к уровню вашего мастерства будут возрастать постепенно от курса к курсу.

Начнете вы с основ Питона, азов мат. анализа и теории вероятностей, потом рассмотрите обучение с учителем и без учителя (от базовых моделей из scikit learn до нейронных сетей), потом статистика, потом практическое применение. В принципе похоже, что это общераспространённый подход к обучению в области Data Science.

Может быть, для кого-то станет критичным, что курс заточен под Python 2, причем я бы от греха не советовал бы даже некоторые вещи импортировать «из будущего», ибо в некоторых задачах «грейдер», очень чуткий и могут возникать проблемы из-за, например, разницы в библиотеках, в том числе и при применении Python 3 (по крайней мере судя по отзывам на форумах).

На мой взгляд удобней всего настроить Anaconda. Если у вас уже установлена анаконда с окружением под Python 3, то не расстраивайтесь настроить второе окружение с Python 2 достаточно просто (я ставил через консоль conda по этой инструкции). Ставится она и под Windows и под Linux, под Mac OSX не пробовал, но думаю тоже ставится без проблем.

Кстати, судя по форумам специализации многие проходили этот курс пользуясь OS Windows, я рекомендую на всякий случай накатить второй системой Linux, но безусловно это не обязательно, хотя может быть полезно.

Я накатил себе Linux Mint второй системой, чисто для этой специализации, и не пожалел. Субъективно мне кажется, что местами расчёты под ним проходят быстрей, также было меньше проблем с установкой некоторых библиотек, которые требовались при прохождении курса.

Первый курс для новичка выглядит вполне дружелюбно: по-своему харизматичные ребята из МФТИ и Яндекс расскажут зачем это нужно и поначалу не будут вас пугать зубодробительными заданиями. А вот потом, уровень фрустрации зависит от вашей подготовки. У меня, и у некоторых людей на форуме бывали случаи, когда целыми днями не удавалось подобрать решении задачи или теста, с другой стороны если у вас есть способности и хорошая «база», то думаю вам все будет просто и понятно.

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

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

Отдельное слово надо сказать о лекторах курса и заданиях. Над курсом работала большая команда и соответственно есть свои плюсы и есть свои минусы, большую часть курса читают 4 ключевые специалиста, у каждого похоже своя специализация. По лекторам видно, что они опытные и толковые люди, но к некоторым по началу привыкнуть трудно. Я не буду раскрывать персоналии, чтобы никого не обидеть. Просто отмечу, что есть лекторы, которым хочется просто поклонится в ноги, за то, что они стараются разжевать материал даже новичкам, некоторые же лекторы могут немного нервировать и вызывать на первых порах жгучее желание совершить насильственные действия агрессивного характера. Это безусловно моя субъективная реакция, вызванная плохими базовыми знаниями и личным восприятием, в любом случае к концу специализации привыкаешь к манере каждого из лекторов и даже как-то жалко становится с ними заочно расставаться.

С лекторами также непосредственно связаны контрольные материалы уроков, вы заметите, что в чьих-то уроках задания (в целом) более зубодробительные, например, где-то тесты простые как «три копейки», а в задачах на статистику и теорию вероятности заставляют изрядно попотеть.
Ну и отдельно задания по программированию (и/или по взаимной проверке), тоже разрабатывали разные люди, поэтому в некоторых случаях формулировки могут вызывать у неподготовленного человека чувства полного непонимания и беспросветной паники.

Что касается приглашённых лекторов, они люди грамотные, ну а если что-то не нравится, то они не успевают сильно надоесть, да и моментов таких не очень много, как правило приглашенные лекторы читают материал, немного оторванный от основного контекста, но безусловно полезный для общего развития.

Я не хочу вдаваться в подробности обучения по каждому из курсов, думаю вы все постигните в процессе обучения перейду к полезным советам. Ну и еще раз повторюсь есть статьи на Хабре про эту специализацию, например, от самого МФТИ).

Часть 3 «Автостопом по галактике» — что делать чтобы не было мучительно больно.


«Галактика суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце» — Автостопом по галактике

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

1. Моя большая ошибка, это отсутствие структурированного подхода к фиксации процесса обучения. В некоторых вопросах я вполне себе «пенсионер» и популярными хорошими практиками не пользуюсь. Ближе к 4-му курсу специализации я понял, что с самого начала надо было завести что-то вроде Mind map (или любой аналог). Основная проблема начинается в тот момент, когда курс перестает вас вести за ручку и требует, чтобы вы вернулись в ранее пройденный материал и откопали реализацию функции или кусок теории, рассмотренный ранее. Не стоит полагаться на память, она скорей всего вас местами подведет. Слава богу есть способы, позволяющие скомпенсировать отсутствие Mind map, но я все же рекомендую вам как-то структурировать то что вы учите.

2. Также не смотря на основной посыл статьи, я не рекомендую проходить специализацию галопом как я. Да может быть 6 месяцев это объективно, много, но думаю месяца три это вполне комфортные условия для размеренного поглощения знаний. Изучение же курса за месяц + одну неделю помимо бессонных ночей и отсутствия нормальных выходных приведет к тому, что возможно ваш мозг просто не переварит то что вы, выучили. Так, например, я обнаружил забавный эффект к моменту, когда я уже проходил 4-й курс, я вдруг, не осознанно просто так занимаясь совсем другими делами начал понимать некоторые моменты из первых курсов. К моменту прохождения финального проекта специализации у меня ни с того ни с сего в голове начало возникать понимание самых основ статистики из 4-го курса, видимо мозгу нужно время. В качестве совета частично компенсирующего недостаток времени на прохождение курса при быстром изучении, рекомендую через пару курсов после начала обучения начать параллельно читать, какой-нибудь самоучитель по теме. Я, например, выбрал книгу: А. Мюллер, С. Гвидо —«Введение в машинное обучение с помощью Python. Руководство для специалистов по работе с данными» — 2017 г. Там мало теории, но зато материал книги наглядно повторяет приемы, освоенные в рамках курса.
Или еще, как вариант «Python и машинное обучение» Себсатьян Рашка (подсказал Metsur )

3. Используйте форумы курсов и slack, вы удивитесь, сколько людей столкнулись с теми же проблемами, что и вы. Поскольку я очень спешил, то практически каждое задание я начинал сразу с изучения тем на форуме связанных с трудностями, которые возникают во время его решения. Не редко на форуме можно встретить, прям куски кода, или формат ответов, которые ждет «грейдер», а в особо сложных случаях прям целые инструкции от пользователей, в которых разжевано, что же хотел от вас автор задачи (у которого видимо есть трудности в общении с неспециалистами). Slack меня выручил на самом последнем этапе, когда было необходимо скооперироваться с людьми для взаимной проверки заданий, народу на шестом курсе мало и чтобы не ждать долго, полезно искать людей которые уже прошли этот этап и просить их об оценке или наоборот помогать советом (в рамках правил) людям которые вас догоняют, чтобы они быстрее вас догнали и смогли оценить работу. Также маленький «лайф хак», если вы не наберёте достаточно заданий для того чтобы оценить сокурсников и не хотите ждать, то всегда можете поискать ссылки от людей на форуме, где люди просят их проверить (пусть и пару месяцев назад), правда из чувства солидарности я все же советую не останавливаться на трех минимально необходимых оцененных работах, а помочь с проверкой большему числу людей. Кроме форума на первых курсах помогает просто поиск в Интернет, там вы вполне можете найти подсказки для решения ваших задач (например, одна из задачек в первых курсах базируется на научной статье, которую можно найти и подглядеть куски кода), а вот дальше Интернет уже менее полезен.

4. Рассмотрим следующий момент, который для некоторых может стать «камнем преткновения». На всякий случай рекомендую в заданиях для проверки «грейдером» формировать ответы через функции записи файла в Питон, а не вручную через блокнот, это убережет вас от «невидимых» символов которые система признает ошибочным ответом.

5. Запись на сессии. Тщательно прикиньте ваш прогресс. Если вы хотите закончить в сжатые сроки, то не имеете права ждать впустую. Некоторые задания невозможно сдать, пока не начнется сессия, ну, например, вы закончили 2й курс 14 числа, а сессия не третий курс начнется только 21 числа, это значит, что вы 7 дней не сможете сдавать некоторую часть заданий (как правило связанную со взаимной оценкой). Поэтому есть смысл записываться на сессии чуть раньше, чем вы закончили прошлый курс.

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

6. Не все знают и явно это похоже не прописано, так что на всякий случай напишу — Coursera по крайней мере на текущий момент на Capstone проект дает полгода, то есть срок моей подписки (месяц + бесплатная неделя ) истекали 08.08.17, но как сказала поддержка доступ к Capstone проекту сохранится полгода с момента начала 6 курса в моем случае до конца января, ибо начал я в конце июля. Так что зная это, вы можете сберечь себе нервы.

7. Capstone проект делится на 4 ветки, для завершения специализации достаточно пройти одну из них, при этом местами системы оценок не очень справедливые. Ну, например, в 5-м задании 1-го проекта (идентификация интернет пользователей) будет очень тяжело достигнуть высокой оценки в связи с необходимостью попасть в топ соревнования на kagle, с другой стороны в 5-м задании проекта по сантимент анализу, предлагают написать примитивный парсер сайта, задание можно сделать за пол часа даже не вдаваясь в предыдущие задачи курса, а оценку хорошую получить проще (учтут в итоге лучший бал). Таким образом вы можете в каких-то моментах где владеете навыками лучше, кроме основной ветки выполнить еще здания и в других, совместите приятное с полезным.

8. Не ленитесь писать нормальный код и хорошо оформлять блокнот, я спешил (ну и знаний не хватало) и мой код был жуткий, я с трудом могу его сам разобрать, другим людям это тоже тяжело (это иногда влияет на оценки пользователей). Я думаю не зазорно посмотреть, как делают другие и чуть-чуть себя поправить, безусловно не переходя границу с плагиатом. Так же рекомендую включать в блокнот текст из описания заданий, я вот сейчас уже не вспомню, что именно я делал в каждой ячейке, а доступ к зданиям закрыт по истечению подписки, так что и не посмотришь. Хотя на самом деле многие задачи есть на GitHub, так что это не очень критично.

9. Ну и пусть это банально, но рассчитайте свои силы, серьезно, за прошедший месяц мне порой приходилось спать за ночь по 2 часа, не видеть друзей и близких, забывать поесть, все выходные гробить на решение задач, да и много еще чего. Поэтому если вы действительно хотите, не имея спецподготовки осилить курс за месяц подумайте готовы ли вы на это.

Кстати, фраза из Автостопом по галактике вспомнилась по тому что в курсе периодически предлагают выставить random seed в значение = 42

Ну думаю есть смысл подводить итоги.

Часть 4 «I' ll be back» — заключение.


Давайте по порядку ответим на вопросы:

1. Пригодились ли мне навыки, которые я получил из обучения до этого (см. первые три статьи цикла)?

— Да, но не сильно, с одной стороны хорошо, когда имеешь представление о том что примерно тебя ждет (Курсы от Cognitive Class), также местами пригодился и самоучитель про «Data Science с нуля» там я перечитывал теорию вероятности (там немного материала, но то что есть написано понятней), ну и опыт с kagle вам тоже пригодится, когда будете делать Capstone проект, Однако суммарно все три прошлые статьи по навыкам с точки зрения практики и близко не лежат с прохождением специализации, так что если вы уже твердо решили что хотите, можете начинать «без прелюдий».

2. Страдал ли я от недостатка базовых знаний?

— Да, местами очень, особенно когда 2.5 дня не мог написать простейшую функцию, или тупо не мог воспринять какие-то моменты статистики и теории вероятности. К счастью есть форум и slack там много таких же людей, и можно найти помощь, ну и менторы курса, а иногда и сами разработчики стараются помочь. Если все совсем плохо, можете взять персонального тьютора, но думаю, что любой человек в состоянии справится сам.

3. Узнал ли я что-то новое?

— Да, во-первых, я первый раз в жизни написал программу, которая работала 9.5 часов подряд, потом накрылась выдав memory error (потом я конечно это все поправил), у меня несильный компьютер, но даже игрушки с нормальной графикой не могли конкурировать с моим творением в части пожирания ресурсов. Это очень хороший опыт, я навсегда теперь запомнил о важности и пользе разряженных матриц. Ну и во-вторых другие моменты полезные тоже есть: это курс все же немного учит Python(у), я по прежнему его знаю очень плохо и не освоил «Pythonic way», но это намного лучше чем вообще никак, курс неплохо объясняет базовые принципы высшей математики и статистики (не вдаваясь в подробности), фактически я их для себя открыл заново. Курс действительно показывает многие интересные фишки, часть из которых при желании можно перенести в свою повседневную жизнь. Да, есть проблемы с усвоением информации думаю 3/4 материала прошли мимо моего осознания, но даже оставшегося хватит, чтобы догадываться в каком направлении копать, если где-то понадобится анализ данных.

4. Может ли этот курс освоить каждый?

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

Еще в качестве бонуса, авторы на на сайте специализации пишут о возможности содействия в трудоустройстве после её прохождения, я пока еще не пробовал, но сама возможность радует.

Подводя итог, специализацию однозначно рекомендую, там многие моменты еще шероховаты, но думаю по соотношению цена качество — это более чем приемлемый вариант.

Что же дальше? Ну может применю полученные навыки для своего хобби и потом скину материал на Хабр, может быть посмотрю, как обстоят дела с машинным обучением на .net и тоже отпишусь. Но это всё будет сильно позже.

Так что желаю всем удачи в освоение данной интересной области знаний!

Ну а, чтобы статья не казалось совсем уж серьезной ловите «бонус»:

В качестве бонуса


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

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

Если так задуматься, то можно найти некоторую взаимосвязь между тем насколько легко давалось обучение по материалам в каждой из статей всего цикла и количеством условных «шуток» в статье.

Давайте посмотрим, а есть ли какая-то КОРРЕЛЯЦИЯ?!

Давайте посчитаем соотношение числа слов в статье и числа «шуток» в ней, а также сложность освоения (затраченные на обучение дни).

Статьи нумеруются в том порядке как я их указал в начале статьи, эта соответственно будет четвертой, при расчёте количества шуток и слов, бонусный раздел в выборку не включался.

Под шутками понимаются хоть какие-то намеки на юмор (с учетом картинок вначале статьи), цитаты в заголовках за шутки не считались. Итак:

1. Статья №1: слов = 2575, шуток =5, дней обучения — 2
2. Статья №2: слов = 2098, шуток =3, дней обучения — 3
3. Статья №3: слов = 2667, шуток =4, дней обучения — 2
4. Статья №4: слов = 3051, шуток =2, дней обучения — 37

Далее код на Python 3, для Python 2 уберите скобки перед print и убедитесь, что делите на float, также можно убрать list () перед zip()

import pandas as pd
humor_rate=[(5/2575),(3/2098), (4/2667),(2/3051)]
days=[2,3,2,37]
df=pd.DataFrame(list(zip(humor_rate, days)), index=None, columns=['Humor rate', 'Days of study'])
print ('Таблица данных: \n', df)
print ('Корреляция между humor rate и days of study = ', df.corrwith(df['days of study'])[0])

вывод:

Таблица данных:
.....Humor rate.....Days of study
0....0.001942............2
1....0.001430............3
2....0.001500............2
3....0.000656............37

Корреляция между humor rate и days of study = -0.912343823382


Ну что в итоге? А в итоге мы имеем ярко выраженную отрицательную КОРРЕЛЯЦИЮ (коэф. КОРРЕЛЯЦИИ Пирсона), которая говорит нам что, как правило, чем меньше число дней, потраченных на обучение тем больше юмора в статье.

Конечно это шуточный пример КОРРЕЛЯЦИИ. Данных безусловно мало, да и у меня возникли сложности с определением однозначного количества шуток в статье, но будем считать это маленьким примером того, как вы сможете применить полученные после специализации навыки на практике, в том числе и для расчёта КОРРЕЛЯЦИИ.

P.S. сколько раз я упомянул это слово в бонусном фрагменте статьи? Правильно — восемь с учетом, вывода print ().

Tags:
Hubs:
Total votes 13: ↑12 and ↓1+11
Comments14

Articles