Пътна карта: Как да научите машинно обучение за 6 месеца

Тази публикация е написана от Метис старши учен по данни Захария Милър, който е базиран в Чикаго. Можете да видите публикацията в блога на компанията тук.

Преди няколко дни попаднах на въпроса за Quora, който се сведе до: „Как мога да науча машинно обучение след шест месеца?“ Започнах да пиша кратък отговор, но той бързо се превърна в огромна дискусия за педагогическия подход Използвах и как осъществих прехода от физика-нерд към физика-нерд-с-машинно учене-в-негов инструментален ремък към учен с данни. Ето една пътна карта, която подчертава основните точки по пътя.

Донякъде нещастната истина

Машинното обучение наистина голямо и бързо развиващо се поле. Ще бъде преодоляващо само за да започнете. Най-вероятно сте влезли в момента, в който искате да използвате машинно обучение за изграждане на модели - имате някаква представа какво искате да правите; но при сканиране в интернет за възможни алгоритми, има просто твърде много опции. Точно така започнах и плувах доста време. С ползата от заден ход, мисля, че ключът е да тръгнем по-нататък нагоре по течението. Трябва да разберете какво се случва „под капака“ на всички различни алгоритми за машинно обучение, преди да сте готови наистина да ги приложите към „реални“ данни. Така че нека се потопим в това.

Има 3 всеобхватни актуални набора от умения, които съставят науката за данни (е, всъщност много повече, но 3, които са основните теми):

  • "Чиста" математика (смятане, линейна алгебра)
  • Статистика (технически математически, но това е по-приложена версия)
  • Програмиране (обикновено в Python / R)

Реално трябва да сте готови да мислите за математиката, преди машинното обучение да има някакъв смисъл. Например, ако не сте запознати с мисленето във векторни пространства и работите с матрици, тогава мисленето за пространствата с функции, границите на решенията и т.н. ще бъде истинска борба. Тези понятия са цялата идея зад класификационните алгоритми за машинно обучение - така че ако не мислите правилно за тях, тези алгоритми ще изглеждат изключително сложни. Отвъд всичко това в машинното обучение се управлява от код. За да получите данните, ще ви трябва код. За да обработите данните, ще ви трябва код. За да взаимодействате с алгоритмите за машинно обучение, ще ви трябва код (дори ако използвате алгоритми, които е написал друг).

Мястото за начало е да научите за линейна алгебра. MIT има отворен курс по линейна алгебра. Това трябва да ви запознае с всички основни понятия на линейна алгебра и трябва да обърнете особено внимание на векторите, умножението на матрицата, детерминантите и разлагането на Eigenvector - всички те играят доста силно като зъбците, които правят алгоритмите за машинно обучение. Освен това, като се уверите, че разбирате неща като евклидовите разстояния, също ще бъде основен положителен.

След това смятането трябва да бъде следващият ви фокус. Тук сме най-заинтересовани да научим и да разберем значението на производните и как можем да ги използваме за оптимизация. Има много големи ресурси за смятане, но най-малкото, трябва да се уверите, че ще разгледате всички теми в Единично променливо смятане и поне секции 1 и 2 от Многоизменното смятане. Това е чудесно място да разгледаме Gradient Descent - чудесен инструмент за много от алгоритмите, използвани за машинно обучение, което е просто приложение на частични производни.

И накрая, можете да се потопите в аспекта на програмиране. Горещо препоръчвам Python, тъй като той е широко подкрепен с много страхотни, предварително изградени алгоритми за машинно обучение. Има много статии за най-добрия начин да научите Python, така че препоръчвам да направите някои гугъл и да намерите начин, който работи за вас. Не забравяйте да научите и за рисуването на библиотеки (за Python започнете с MatPlotLib и Seaborn). Друг често срещан вариант е езикът R. Той също е широко поддържан и много хора го използват - просто предпочитам Python. Ако използвате Python, започнете с инсталирането на Anaconda, което е наистина приятен сборник от инструменти за научаване на данни Python / машинно обучение, включително scikit-learn, голяма библиотека от оптимизирани / предварително изградени алгоритми за машинно обучение в достъпна обвивка на Python.

В крайна сметка, как всъщност използвам машинно обучение?

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

  1. Вземете данни (уеб дизайн, обаждания по API, библиотеки с изображения): фон за кодиране.
  2. Почистете / обединете данните. Това отнема всякакви форми. Може би имате непълни данни, как можете да се справите с това? Може би имате дата, но тя е в странна форма и трябва да я преобразувате в ден, месец, година. Това просто отнема малко игра с фон на кодиране.
  3. Избор на алгоритъм (и). След като разполагате с данните на добро място за работа с тях, можете да започнете да опитвате различни алгоритми. Изображението по-долу е грубо ръководство. Но по-важното тук е, че това ви дава много информация за четене. Можете да разгледате имената на всички възможни алгоритми (напр. Ласо) и да кажете: „човече, изглежда, че отговаря на това, което искам да правя въз основа на схемата на потока… но не съм сигурен какво е“ и след това прескочи до Google и научете за него: математически фон.
  4. Настройте алгоритъма си. Ето къде вашата работа по математика се отплаща най-много - всички тези алгоритми имат много бутони и копчета, с които да играете. Пример: Ако използвам градиентно спускане, какъв искам да е степента на обучение? Тогава можете да се върнете към изчислението си и да осъзнаете, че степента на обучение е само размера на стъпката, толкова гореща, по дяволите, знам, че ще трябва да настроя това въз основа на разбирането ми за функцията на загуба. Така че след това коригирате всичките си звънци на вашия модел, за да се опитате да получите добър цялостен модел (измерен с точност, извикване, прецизност, f1 резултат и т.н. - трябва да ги погледнете). След това проверете за прекалено подходящ / недостатъчен и т.н. с методи на кръстосано потвърждаване (отново погледнете този нагоре): математически фон.
  5. Визуализирайте! Ето къде фонът ви за кодиране се отплаща още, защото вече знаете как да правите графики и кои функции на сюжета могат да правят какво.

От документацията на SciKit Learn

За този етап от вашето пътуване горещо препоръчвам книгата „Data Science from Scratch“ на Джоел Грус. Ако се опитвате да го направите самостоятелно (не използвайте MOOC или bootcamps), това осигурява приятно, четено въведение към повечето алгоритми и също така ви учи как да ги кодирате. Той наистина не се занимава с математическата страна на нещата прекалено много ... просто малки самородки, които изстъргват повърхността на темите, така че силно препоръчвам да научите математиката и да се потопите в книгата. Той също така трябва да ви даде хубав преглед на всички различни видове алгоритми. Например класификация срещу регресия. Какъв тип класификатор? Книгата му се докосва до всичко това и всичко ви показва нуждите на алгоритмите в Python.

Обща пътна карта

Ключът е да го разчупите на усвояващи се битове и да очертаете график за постигане на целта си. Признавам, че това не е най-забавният начин да го видите, защото не е толкова секси да седнете и да научите линейна алгебра, колкото да правите компютърно зрение ... но това наистина може да ви изведе на правилния път.

  • Започнете с изучаването на математиката (2–3 месеца)
  • Преминете към уроци за програмиране чисто на езика, който използвате ... не се хващайте на машинното обучение за кодиране, докато не почувствате увереност да пишете „редовен“ код (1 месец)
  • Започнете да скачате в кодове за машинно обучение, следвайки уроци. Kaggle е отличен ресурс за някои страхотни уроци (вижте набора от данни на Titanic). Изберете алгоритъм, който виждате в уроци и потърсете как да го напишете от нулата. Наистина се рови в него. Следвайте заедно с уроци, като използвате предварително направени набори от данни като този: Урок за изпълнение на k-Най-близките съседи в Python From Scratch (1–2 месеца)
  • Наистина скочете в един (или няколко) краткосрочни проекти, които сте страстен, но това не е супер сложно. Не се опитвайте да излекувате рака с данни (все още) ... може би се опитайте да предскажете колко успешен филм ще се основава на актьорите, които са наели, и бюджета. Може би се опитайте да предскажете всички звезди в любимия си спорт въз основа на статистиката им (и статистиката на всички предишни всички звезди). (1+ месец)

Sidenote: Не се страхувайте да се провалите. По-голямата част от времето ви в машинното обучение ще бъде прекарано в опит да разберете защо алгоритъмът не разбра как сте очаквали или защо получих грешката XYZ ... това е нормално. Упоритостта е ключова. Просто продължете. Ако смятате, че логистичната регресия може да работи ... опитайте я с малък набор от данни и вижте как става. Тези ранни проекти са пясъчник за научаване на методите, като се провалят - така че използвайте го и опитайте всичко, което има смисъл.

Тогава, ако желаете да си осигурите прехраната с машинно обучение - BLOG. Направете уебсайт, който да откроява всички проекти, по които сте работили. Покажете как сте ги направили. Покажете крайните резултати. Направете го хубав. Приятни визуализации. Направете го способен за усвояване. Направете продукт, от който може да се научи някой друг, а след това се надявайте, че работодателят може да види цялата работа, която влагате.

Metis преподава курсове за професионално развитие на непълно работно време, които обхващат теми като машинно обучение и много други. Вижте всички курсове и локации тук: https://www.thisismetis.com/professional-development-courses