Хакатон за машинного навчання: Прийти. Навчити модель. Перемогти

Стандартний план будь-якого хакатона ↓

Microsoft Azure Machine Learning Hackathon

У ці вихідні пройде хакатон за машинного навчання, організатором якого є компанія Microsoft. В учасників хакатона буде 2 дні для того, щоб міцно не виспатися і зробити світ краще.

Розповідь у цій статті буде проходити в такий же максимально стрімкої манері, в якій, як я вважаю, для більшості учасників пройде і хакатон. Ніякої води (якщо ви не знайомі з Azure ML, то «воду» або якийсь ознайомчий матеріал краще все-таки почитати; інакше далі буде незрозуміло), довгих визначень і таких довгих вступів як це — тільки те, що вам потрібно, щоб перемогти на хакатоне.

Keep it simple
1) Захопіть знайдіть кавоварку.
2) У вас всього 2 дні, тому не треба городити город складних моделей: вони легко перенавчаються і їх довго робити. Візьміть саме наївне припущення і ітеративне збільшуйте його. На кожній успішній ітерації збережіть набір даних, що подаються на алгоритм машинного навчання, та отриману в результаті навчання модель. Це робиться з допомогою пунктів меню «Save as Dataset», «Save Model» в контекстному меню Azure ML Studio (це web IDE). Таким чином, у вас будуть пари dataset–trained_model на кожну з ітерацій.

Про структуру статтіЦе більш або менш стандартний workflow навчання з вчителем. Я почну з самого смачного – з серця цього процесу – навчання моделі (model Train), поступово рухаючись до етапу попередньої обробки даних (Pre-data processing).




Collaboration
Створіть вже Workspace! Відкрийте manage.windowsazure.com виберіть Azure ML і створіть швидше Workspace. Один на всю команду, а не кожному свій персональний! Зберіть у всіх учасників email и і розширте Workspace між ними.



Внесіть свій внесок в глобальне потепління

Нижче показано, як виглядає найпростіший граф навчання в Azure ML.

Azure ML model train.png

Але це не те! Так ви будете робити вдома: запускати, пити чай, йти гуляти, приходити, дивитися, що вийшло, думати, чесати плече, знову запускати, пити чай… На хакатоне на це часу немає!

Перевірте відразу всі алгоритми, які можуть підійти. Саме «все» — це ж Azure, а не ваш домашній ноутбук! Датацентри Azure будуть гріти атмосферу західного узбережжя США, але процес навчання моделей виконають! Ось приклад такого, як це має виглядати на 5-ти алгоритмах двохкласовому класифікації.



Порівняння моделей, навчених на алгоритмі логістичної регресії (синя крива) і метод опорних векторів (червона крива):



Cross Validation

Увімкніть вже крос-валідацію! І включіть її правильно: з validation dataset, з fold'ами, c зазначенням метрики, яку хочете максимізувати (тобто так, як показано на ілюстрації з крос-валідацією).

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

Результати для кожного fold'а:



Sweep Parameters

Ключовий вплив на продуктивність (performance) моделі надають параметри алгоритму машинного навчання. Так для нейронної мережі це кількість прихованих шарів нейронів, початкові ваги, для дерева рішень – кількість дерев, кількість листків на дерево.

Перебором вручну декількох параметрів для 4-ох алгоритмів класифікації, в умовах б'є фонтану нових ідей, ви будете займатися до нового року (а може і під час). Займіться новий рік чимось іншим! А на хакатоне використовуйте вбудований модуль Sweep Parameters.



Налаштування модулів:




Fair Data Split

Розділіть тестовий і тренувальні набори (модуль Split). В залежності від обсягу наявних даних data science прийнято залишати в тестовому наборі від 10% до 30% даних. Не займайтеся самообманом вчіть модель на тестовому наборі, не використовуйте його для перевірки результатів крос-валідації. Тестовий dataset вам потрібен тільки для одного – перевірка фінальної моделі.

Прискорте навчання

Чим швидше по часу ваша модель вчитися, тим більше гіпотез ви встигнете перевірити. Використовуйте модулі з розділу Feature Selection, щоб не тільки зменшити час навчання, але отримати найбільш релевантні предиктори та узагальнити модель (зробити її продуктивність на реальних даних краще).

Так, використовуючи модуль filter-based feature selection в задачі визначення тональності твітів, я зменшив кількість предикторів з 160К до 20К.



Результат — див. кількість предикторів (columns) до і після фільтрації:




А модуль fisher linear discriminant допоміг мені зменшити Iris Dataset c матриці 4xN до 2xN, де N – кількість спостережень.



Результат — див. кількість предикторів (columns) до і після фільтрації:




Прискорте навчання. Частина 2

Azure ML може виконувати ваші R/Python-скрипти. Так з коробки є підтримка ~400 R-пакетів, експорт в Python Notebooks і це тільки початок.

Але(!) не пишіть R/Python-скрипти просто тому, що вам лінь розбиратися який вбудовані в Azure ML модуль робить теж саме. Вбудовані модулі:

  • оптимізовані під Azure ML (швидше за все, більшість із них написані на С++, що звучить, як «швидко»);
  • робота всередині них потенційно распараллеливается і виконується розподілено (оскільки заздалегідь відомо які модулі виконують паралельні за даними завдання, а які ні);
  • алгоритми машинного навчання, реалізовані у вбудованих модулях, також потенційно можуть бути LSML-історією (виконуватися розподілено на кластері).

Не благаючи ваше програміста таланту, зауважу, що ваш чудово написаний python-скрипт, так виконатися навряд чи зможе, т. к. для Azure ML такий скрипт — чорний ящик.

Feature Engineering

Зрозумійте Ваші дані! Для цього в Azure ML є як інструменти візуалізації, так і можливість використовувати ggplot2. Крім того, не нехтуйте модулем описової статистики «Descriptive Statistics», який на будь-якому етапі роботи з експериментом вам може розповісти багато про даних.

Pre-processing

Розмітьте дані правильно – використовуйте модуль Metadata Editor.

Модуль Clean Missing Data вам допоможе впоратися з пропущеними даними (видалити їх, замінити на значення за замовчуванням, медіану або моду).

Виявити викиди допоможе розділ Anomaly Detection і просто візуалізація.

Нормалізуйте (хоча б спробуйте) всі числові дані, чиє розподіл відрізняється від нормального, з допомогою модуля Normalize. C допомогою того ж модуля шкалируйте (scale) всі числові дані, чиї абсолютні значення великі.

Джедайские техніки

Джедайские техніки: Boosting і Stacking

Відразу до термінології:

Boosting (бустинг) – підхід, в якому результат є зваженою / розрахованої за емпіричною формулою оцінкою декількох різних моделей.

Stacking (стэкинг) – підхід схожий на бустинг: ви також має декілька моделей, навчених на даних, але у вас вже немає ніякої емпіричної формули – ви на основі оцінок початкових моделей будуєте метамодель.

Це дуже круті техніки, які у всю використовують data scientist'и 80-го рівня з kaggle. Вбудованих модулів, що реалізують бустинг або стэкинг (або просто bagging), в Azure ML немає. Їх реалізація не дуже складна, але має свої довгий список тонкощів.

Ось як у мене виглядає застосування стэкинга для створення метамоделі, навченої з допомогою нейромережі на класифікаторах Boosted Decision Tree та логістичної регресії.

Принципова схема, реалізованого стэкинга:



Рівень 1:



Рівень 2:



Реалізація boosting — і stacking-підходів у Azure ML — тема окремої цікавої статті, яку не вийде розкрити в рамках цієї статті. Але(!) на другий день хакатона ви зможете мене знайти (нижній праворуч на сторінці доповідачів хакатона; буду виглядати також погано, як і на фото), і я обов'язково покажу, як додати stacking до вашої моделі і можливо поліпшити її продуктивність на важливі для таких заходів пару-трійку-п'ятірку відсотків.

Джедайские техніки: Hadoop/HBase/Spark-кластер

Я не жартую: вам потрібен кластер! Але не поспішайте купувати залозки і починати розгортати/адмініструвати всю багату на програмні продукти екосистему Hadoop. Це довго, дорого і… добре. А нам потрібно швидко і добре, тобто HDInsight.

Azure HDInsight – хмарний сервіс, що надає кластер Hadoop/HBase/Spark на вимогу. Проходження майстра створення кластера займає 2 хвилини, саме створення кластера йде в Azure 1 кухоль кави ~10 хвилин.



Але найсмачніше те, що HBase (якщо зовсім точно, то Hive-запити) підтримується як один з джерел даних в Microsoft ML. Так що якщо багато і з ним потрібно робити складні запити, то не роздумуючи розгортати HBase-кластер в Azure та завантажуйте дані в Azure ML безпосередньо звідти.

Джедайские техніки: Data Science VM

Скористайтеся одним із образів віртуальної машини, доступних в Microsoft VM – чином «Data Science VM» з передвстановленим Revolution R Open, Anaconda Python, Power BI багатьом іншим.

Не обмежуйте себе коханого: візьміть віртуалку з потрібним об'ємом пам'яті (доступно до 448 Гб RAM), кількістю ядер (доступно до 32-ядрами), і, якщо потрібно, SSD-диском. Загалом створіть собі зручні умови роботи.

Підглядайте через плече. Будуйте змови. Знайдіть нафту!

беріть участь не заради призів

Хакатон, заходи на яке варто ходити заради атмосфери, заради спілкування з однодумцями, знайомств з експертами, халявного кави і, якщо на вулиці холодно, а жити ніде. Спілкуйтеся, обмінюйтеся досвідом! (Все одно переможе самий хитрий.)

До речі про спілкування, завтра пройде Moscow Data Science Meetup – наиотличнейшее захід у наиприятнейшем форматі для data scientist'ів і тих, кому ця область цікава.

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

0 коментарів

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