Зачем и как делать проекты обучения науке о данных

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

Я испытал много разных способов добиться этого. Я закончил несколько нано-степеней Udacity, прошел курсы на Coursera и Udemy, посетил веб-семинары и прочитал кучу книг O’Reilly. Чтобы было ясно: все эти ресурсы могут поддержать вас в зависимости от того, где вы находитесь на своем пути к науке о данных. Тем не менее, что лучше всего работает для меня, так это учебные проекты.

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

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

Шаг 1. Найдите идею, которая вам небезразлична

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

Как только вы начнете получать доступ к этому потоку идей, все, что вам нужно, это место для их записи. Для этого я создал доску Trello. Я не думаю, что существует система, которая подходит всем, поэтому вам, возможно, придется провести несколько экспериментов. Однако ваша система должна предоставить две вещи:

  1. Он должен быть доступен постоянно.
  2. Получение обзора должно быть простым.

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

Когда вы будете готовы к следующему проекту, просмотрите свой список. Оценивайте идеи по двум критериям: внутренняя мотивация и профессиональная ценность. Если есть что-то, что вам нужно освоить для вашей текущей работы, то это ваш наивысший приоритет.

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

Один из моих недавних учебных проектов начался, когда я прошел мимо кинотеатра и увидел этот плакат фильма Последние джедаи:

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

Шаг 2. Сделайте быструю технико-экономическую проверку

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

  1. Доступны точные данные. Если это так, скажите спасибо тому, кто сделал это доступным. Наслаждайся моментом.
  2. Вы находите данные, которые напоминают то, что вам нужно, но не совсем соответствуют вашей идее. В этом случае подумайте, можете ли вы адаптировать свой план таким образом, чтобы основная мотивация оставалась неизменной.
  3. Нет полезного источника данных. Как правило, вернитесь к своему списку и выберите другой элемент. Не удаляйте свою идею. Это может вдохновить вас на новые идеи, вы можете найти новый взгляд на это или в какой-то момент могут появиться новые данные.

В моем случае я уже знал о наборах данных фильмов на Kaggle, поэтому я начал свой поиск там. К счастью, существует этот набор данных, который включает ссылки на изображения плакатов тысяч фильмов за длительный период.

Шаг 3. Четко сформулируйте свои цели обучения

Заманчиво начать сразу с import pandas as pd и так далее, но подождите! У вас есть идея и вы знаете, что для ее решения есть данные. Однако уверены ли вы, что хотите от него отнять? Другими словами: сделайте шаг назад и подумайте о своих целях обучения. Вы хотите построить свою первую нейронную сеть в Pytorch? Вы хотите узнать о подводных камнях определенного типа данных? Хотите опробовать разные виды гиперпараметрической оптимизации (бессовестная самореклама)?

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

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

Шаг 4. Сосредоточьтесь исключительно на своей учебной цели

Отныне нет четких указаний. Однако помните о своей цели обучения. Например, если вы хотите сравнить две разные функции активации для своей нейронной сети (еще одна бессовестная самореклама), не тратьте слишком много времени на изучение данных.

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

Пример: классификация постеров с фильмами по десятилетиям

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

Из оставшихся 24 812 фильмов я отобрал 800 фильмов для обучения и 200 фильмов для тестирования за шесть десятилетий, начиная с 1950-х годов. Впоследствии я написал код для загрузки соответствующих постеров фильмов в папки train и test с подпапками для каждого десятилетия. Я понял, что некоторые файлы были пустыми, и написал дополнительный код для удаления файлов размером 0 КБ. После этих шагов для моей модели осталось менее 800/200 файлов:

Images in train-folder:
00s: 788
50s: 768
60s: 754
70s: 771
80s: 760
90s: 779
Images in test-folder:
00s: 198
50s: 194
60s: 187
70s: 192
80s: 199
90s: 197

Чтобы подготовить файлы для построения модели, я использовал ImageDataGenerator и его flow_from_directoryметод из keras.preprocessing.image. Чтобы узнать подробности, посмотрите этот отличный пост в блоге Виджаябхаскара Дж. или пример в блоге Keras здесь.

Затем я построил стандартную архитектуру CNN в Keras с бэкэндом Tensorflow. Единственное изменение заключалось в том, что я использовал SELU в качестве функций активации вместо ReLU, чтобы отразить мои текущие знания.

Затем я трачу достаточно времени на тонкую настройку, чтобы получить точность проверки около 44%:

Epoch 1/7
145/144 [==============================] - 134s - loss: 2.6112 - acc: 0.2073 - val_loss: 2.3751 - val_acc: 0.2202
Epoch 2/7
145/144 [==============================] - 127s - loss: 1.6243 - acc: 0.3422 - val_loss: 1.6827 - val_acc: 0.3393
Epoch 3/7
145/144 [==============================] - 126s - loss: 1.2459 - acc: 0.5397 - val_loss: 1.8159 - val_acc: 0.3102
Epoch 4/7
145/144 [==============================] - 125s - loss: 0.8281 - acc: 0.7190 - val_loss: 1.7473 - val_acc: 0.4087
Epoch 5/7
145/144 [==============================] - 125s - loss: 0.4775 - acc: 0.8527 - val_loss: 2.0787 - val_acc: 0.4233
Epoch 6/7
145/144 [==============================] - 127s - loss: 0.2678 - acc: 0.9153 - val_loss: 2.6315 - val_acc: 0.4105
Epoch 7/7
145/144 [==============================] - 129s - loss: 0.1877 - acc: 0.9412 - val_loss: 2.7076 - val_acc: 0.4430

Эта модель классифицировала плакат выше как 100% из 60-х годов.

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

Вы завершили учебный проект - что теперь?

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

Во-вторых, постарайтесь максимально использовать свою работу:

  1. Запишите что вы могли бы сделать без проблем. Это поможет вам оценить, где вы сейчас как специалист по данным. Он также показывает, как далеко вы уже ушли, когда начали.
  2. Запишите то, что вы узнали, преследуя цель обучения. Сколько вы покрыли? Какие основные концепции и навыки вы применили? Обратите особое внимание на то, какой части вашей учебной цели вы достигли и соответствовали ли она вашим ожиданиям. Скорректируйте свои предстоящие проекты.
  3. Запишите какие слабые места вы заметили во время работы над этим учебным проектом. Это поможет вам решить, какая идея лучше всего подходит для следующего учебного проекта.
  4. Повторить.

Как вы подходите к обучению? Сообщите мне, что работает для вас, в комментариях и в Твиттере или свяжитесь со мной в LinkedIn.

Спасибо за внимание! Если вам понравился этот пост, оставьте 👏🏻 и поделитесь им в LinkedIn или Twitter. Еще раз спасибо, и давайте продолжим учиться!