Прогноза за оцеляването на пътниците на Титаник с машинно обучение на Azure
Бихме искали да благодарим на Кирил Малев от Merku за подготовката на статията. Кирил работи върху практическото приложение на машинното обучение за различни обеми от данни повече от 3 години. Компанията решава проблеми в областта на прогнозирането на отлив на клиенти и обработката на естествен език, като обръща голямо внимание на комерсиализацията на резултатите. Завършил магистратура в университета в Болоня и NSTU
Днес ще ви разкажем как да използвате облачната платформа Azure за решаване на проблеми с машинно обучение на практика, за да разрешите проблеми с машинно обучение, използвайки популярния проблем за предсказване на оцелелите пътници на Титаник като пример.
Големите данни и машинното обучение вече се доближават до плато на производителността, според скорошен доклад на Gartner. Това означава, че на пазара има достатъчно разбиране как да се прилагат технологии за обработка на големи данни и хората са свикнали повече с тази тема, отколкото с 3D принтирането на органи или идеята за колонизиране на Марс.
В Habrahabr вече са публикувани статии, които говорят за използването на облачната платформа Azure за машинно обучение. Те говорят за това как работи всичко, как можете да използвате тази платформа и нейните предимства и недостатъци. Допълваме тази колекция с два практически примера.
Ще започнем нашето запознанство с Azure ML с участие в най-известния от тях: Titanic: Machine Learning from Disaster. Ще заредим данните, ще ги анализираме с помощта на R модели и вградени функции на Azure ML, ще получим резултатите и ще ги качим в Kaggle.
Ще преминем от просто към сложно: първо ще получим резултата от анализа на данни с помощта на R код, след това ще използваме инструментите за анализ, вградени в самата платформа. Решението в R е дадено в края на статията под разреза и е специално базиранов официалните уроци на Kaggle, така че начинаещите да могат да научат как могат да получат точно същите резултати от нулата, ако желаят.
Първи стъпки с облака
Имате нужда от акаунт в Microsoft, за да използвате Azure. Регистрацията отнема 5 минути, освен това, ако все още не сте се регистрирали в Azure, тогава трябва да обърнете голямо внимание на Microsoft BizSpark, програма за поддръжка при стартиране, която дава разширени бонуси при регистрация. Ако не попадате под условията на тази програма, тогава при регистрация ще ви бъдат разпределени пробни $ 200, които могат да бъдат изразходвани за всякакви облачни ресурси на Azure. За тестване на Azure ML и повторение на статията те са повече от достатъчни.
Ако имате акаунт, можете да влезете в секцията Azure ML. Когато изберете „Машинно обучение“ от списъка с услуги на Azure вляво, ще бъдете подканени да създадете работно пространство (което ще съдържа модели и файлове на проекти, наречени „експерименти“). Трябва незабавно да свържете акаунт за съхранение към него или да създадете нов. Необходим е за съхраняване на междинни резултати от обработка на данни или за качване на резултати.
След като създадете работно пространство, можете да създадете проект в него. За да направите това, ще трябва да кликнете върху бутона "Създаване":
И тук, за тези, които са свикнали да изучават нова платформа или рамка чрез примери, очаква страхотен подарък - готови примери за проекти, с които можете бързо да разберете как работи услугата. В случай на проблеми, отговорите на повечето въпроси могат да бъдат намерени в удобната онлайн документация. Според практиката на работа с Azure цялата необходима информация наистина може да бъде намерена там.
Библиотеката с готови експерименти има пример за изпълнение на модел в R, който изглежда така:
Тези блокове, свързани със стрелки, са процесът на анализ на данни в този проект (или експеримент, ако използвате терминологията на Azure ML). Използването на тази визуализация прави много по-лесно разбирането на анализа на данните и методологията на CRISP-DM.
Същността на тази методика е следната:
- Данните се зареждат в средата
- От данните се избират/създават полезни функции
- Моделът се обучава по избраните функции
- С помощта на отделен набор от данни се оценява качеството на модела
- Ако качеството е незадоволително, тогава се повтарят стъпки 2-4, ако е задоволително, тогава моделът се използва по предназначение.
В блока „Изпълнение на R скрипт“ поставихме кода, който изтегля данните, извлича нови свойства на обекти, обучава модела и прави прогноза. Единствената алтернатива на стартирането на скрипта на локалната машина беше, че заменихме реда
, за да можете да запазите решението в облака и след това да го изтеглите (повече за това по-долу).
В края на R кода имахме ред, който показва важността на различни параметри. Резултатът от скриптовете е достъпен във втория "изход" (номер "2" на екранната снимка) от блока, като щракнете върху елемента от менюто "Визуализиране":
И така, кодът работи, видяхме кои променливи са били най-важни за оцеляването на пътниците на Титаник, но как да получим резултата и да го заредимКагъл?
За това отговаря първият изход от блока, в който поставяме нашите прогнози с помощта на линията
Позволява ви да пренасочите изхода от R кода към Writer обект, който ще запише нашия набор от данни в хранилището на данни. Като настройки посочихме името на хранилището, което използва нашия експеримент (habrahabrdata1) и пътя до контейнера, в който искахме да запишем нашия резултат: saved-datasets/kaggle-R-titanic-dataset.csv
Нашите моделни прогнози се изтеглят незабавно в csv формат от услугата за съхранение в облак. При изпращането на този модел получихме резултата:0.78469
Използване на машинно обучение на Azure
Сега, след като се запознахме малко с интерфейса на Azure ML и как работи, и се уверихме, че всичко работи, можем да използваме повече от вградените функции в облака за работа с данни:
Като начало ще качим данни в облака за обучение и оценка на резултатите. За да направите това, отидете в секцията „Набори от данни“ и заредете изтеглените преди това .csv файлове:
В резултат нашите набори от данни ще изглеждат така:
Съответно можем да пренапишем нашия скрипт, който вършеше цялата работа: изтегляше данните, извършваше първичната им обработка, разделяше ги на тестов и обучителен набор, обучаваше модела и оценяваше тестовия.
Преминаваме от просто към сложно: сега R кодът ще отговаря само за обработката на данни. Ние ще направим зареждането на данните и разделянето им в набор за обучение и оценка на качеството с помощта на облака. За да направим това, добавяме два реда в началото на скрипта:
и след кода, който обработва функциите, излизаме:
Сега основното оформление на експеримента ще изглежда така:
И условието за разделянекомплектът за обучение и тестовият набор ще изглеждат така:
В същото време на изход 1 ще имаме тестово множество (тъй като за него е изпълнено условието за разделяне), а на изход 2 - за обучение.
Сега сме готови да оценим ефективността на алгоритмите за двоична класификация, вградени в облака, използвайки критерия AUC. Взехме примераСравнение на двоични класификаторикато основа за този експеримент.
Тестът на един алгоритъм изглежда така:
Всеки алгоритъм получава като вход част от извадката kaggle_titanic_train, за да избере най-добрите параметри на алгоритъма. Тези параметри се преминават с помощта на блока Sweep Parameters (можете да прочетете повече за него в статията за преминаването на параметри), който ви позволява да обхождате всички параметри в даден диапазон, по мрежа от всички параметри или да използвате произволно преминаване. В настройките на Sweep Parameters можете да зададете критерия за оценка. Нека зададем AUC като по-подходящ критерий за нас.
След напасване на параметрите най-добрият получен модел се оценява с помощта на отделна част от пробата. Резултатите за модели с най-добри параметри се показват в края на целия експеримент:
Щраквайки върху първия изход от последния блок "Изпълни R скрипт", получаваме резултата:
Най-добрият резултат беше показан от Two-Class SVM. Можем да разгледаме най-добрите параметри, като щракнем върху изхода от блока Sweep Parameters:
В резултат на това, за да определим дали пътниците ще оцелеят или не от тестовите данни, можем да изпълним модела с оптимални параметри:
След като създадете експеримент за определяне на най-добрия модел, новият модел ще изглежда доста прост:
Той използва същите блокове като всичките ни експерименти преди. При входа на Train Model, моделът получава целия набор от данни kaggle_titanic_train,и за оценка (предсказание) се използва блокът Score Model, към който се изпраща наборът от данни kaggle_titanic_test с всички необходими характеристики (които сме изчислили с помощта на R). След това от целия набор остават само колони с ID на пътника и прогноза дали ще оцелее или не, а резултатът се съхранява в Blob хранилище.
Изпращането на резултатите от този модел на Kaggle води до стойност от0.69856, което е по-малко от стойността, която получихме с помощта на дървета на решенията, вършейки цялата работа в R.
Ако обаче обучите подобен алгоритъм от Azure ML (двукласова гора за вземане на решения) с подобни параметри (брой дървета: 100), тогава, когато изпратите резултата до Kaggle, той ще се подобри с 0,00957 и ще бъде равен на0,79426.
По този начин "магическото" изброяване на параметрите не отменя по-задълбочено ръчно търсене и работата на експертен съветник, което може да доведе до по-добри резултати.
Разгледахме възможността за използване на облачната среда Azure ML за участие в състезания за анализ на данни на Kaggle: както като среда за изпълнение на R код, така и с частично използване на вградените облачни инструменти (оставяне на първичната обработка и генерирането на нови функции на R).
Тази среда може да се използва за прилагане на машинно обучение, особено когато резултатите от анализа трябва да бъдат оставени в Hadoop клъстер (Microsoft предоставя своя собствена реализация) или публикувани като уеб услуга.