Machine Learning: Кой език да изберем - R или Python?

Автор: Десислава Христова

Машинното обучение се прилага от широк кръг специалисти (бизнес анализатори, програмисти, изследователи и др.), така че понякога е трудно да преценим от къде да направим първите крачки, за да навлезем в тази така обширна област.

Могат да се използват много различни средства като например езици за програмиране, инструменти с графичен интерфейс или облачни услуги. Повече информация за тези три типични сценария за използване на машинното обучение можете да намерите в статията Machine Learning: Код, продукт или облак? Изберете вашия сценарий!

Много често хората избират език за програмиране, когато започнат да се занимават с машинно обучение, тъй като им предоставя по-големи възможности за контрол върху процеса отколкото други инструменти. За машинно обучение може да се използват доста езици за програмиране, като за тях има изградени голям набор от готови библиотеки, позволяващи лесно създаване на ML решения. На най-високо място в класациите са Python и R и хората често си задават въпроса с кой от двата да
започнат.

В тази статия ще ви разкажа за приликите и разликите между тези 2 езика и ще ви обясня за техните популярни библиотеки и пакети.

Прилики и разлики между Python и R

С единия и другия език можем да анализираме и обработваме данни, да изграждаме моделите, които са ни необходими, при това безплатно.

Какви са приликите между двата езика?

Python и R са open source езици и за тях са създадени множество пакети и библиотеки, допълващи възможностите им. Разнообразието от задачи, които могат да бъдат решени с тях, е изключително голямо и за всеки един статистически метод има създадени решения.

Съществуват среди и за двата езика, които също са open source и улесняват работата с тях. За R най-често това е RStudio, а за Python - Jupyter Notebook или Spyder.

С какво се различават Python и R?

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

Python е обектно-ориентиран език за програмиране с общо предназначение, но при решаване на изследователски задачи се използват предимно процедурните му възможности. По-широко се прилага, дори отвъд анализа на данни и машинното обучение (за разработка на софтуерни решения, автоматизиране на задачи, правене на тестове и т.н.) и е малко по-сложен за хора, които са далеч от програмирането.

Друга разлика е синтаксисът - на R е по-различен от този на стандартните езици за програмиране, направен е доста опростен и е подходящ за хора, които не са програмисти, докато при Python синтаксисът не се различава особено от този на останалите скриптови езици за програмиране (например JavaScript).

Ако искате да научите по-подробно за приложението на Python, можете да прочетете в следната статия: Езикът Python и неговото приложение.

Кои популярни библиотеки и пакети се използват?

В следната таблица можете да видите основните библиотеки и пакети, с които могат да се анализират и обработват данни, да се създават визуализации, както и да се изграждат модели за машинно обучение.

ЦелRPython
Анализ и обработка на данниTidyversePandas
Визуализация на данниggplot2, Plotly, ShinyMatplotlib, Seaborn, Bokeh, HoloViews, hvPlot
Машинно обучениеcaret, mlr3Scikit-learn

В примерите по-надолу в статията ще използваме данни от 2 извадки. Едната е за купувачи на велосипеди, а другата за банкови клиенти. Можете да ги изтеглите от тук.

За анализ и обработка на данни

При R освен вградените в езика възможности, широко приложение намира и Tidyverse колекцията от пакети за анализ и обработка на данни, докато при Python основна е библиотеката Pandas.

Tidyverse съдържа в себе си популярните пакети dplyr и tidyr, с които можем да манипулираме данни. Функциите в dplyr позволяват да селектираме, филтрираме и извършваме изчисления с данните, да сортираме и добавяме нови колони. Пакетът tidyr предоставя съхранение на данните в усъвършенствана структура tibble, разделяне и обединяване на колони, обработка на липсващи стойности и др.

Пример с R:

Pandas позволява използване на 2 структури - Series (едномерен масив) и DataFrame (двумерен масив) за съхранение на данните, като DataFrame е взаимствана от R. Големият набор от функции, които съдържа библиотеката, дават възможност за лесно манипулиране на данни. Можем да разделяме, свързваме и агрегираме, като операциите стават доста бързо и с малко редове код. Това прави Pandas изключително мощно средство за обработка на данни.

Същият пример с Python:

Създадохме една и съща таблица с Python и R. Тя съдържа средния годишен доход на купувачите, разпределен по държавите, в които живеят.

countryavg_income
United States91474
Australia88791.5
Canada84888.5
United Kingdom65476.9
Germany58374.8
France52845.1

Таблицата е сортирана в низходящ ред по средния размер на дохода.

Визуализация на данни

Основният пакет за R, който е предназначен за визуализация на данни, е ggplot2. Той е базиран на концепциите от книгата "Граматика на Графиките" от Л. Уилкинсън ("The Grammar of Graphics" by L. Wilkinson) и благодарение на множеството функции, които съдържа, можем по елегантен начин да визуализираме числови и категорийни данни.

Част е от tidyverse колекцията и предоставя практически неограничени възможности при визуализация, тъй като има много видове диаграми за представяне на данните.

Пример с R:

Scatterplot in R
Извадка: Bike buyers

При Python най-често се използва библиотеката Matplotlib за създаване на визуализации. Тя е изключително мощно средство, което позволява изграждане на висококачествени визуализации. В практиката се използва заедно със Seaborn, която разширява нейните възможности и позволява с по-малко редове код да се изграждат естетически красиви визуализации.

Същият пример с Python:

Scatterplot in Python
Извадка: Bike buyers

С двата езика създадохме една и съща диаграма на разсейването, показваща връзката между 2 променливи - възрастта и годишния доход на купувачите.

Python също има библиотека с наименование ggplot, която е базирана на тази на R. Тя дава възможност на хора, работели предимно с R, да визуализират данни и с Python.

Двата езика имат и различни библиотеки за изграждане на интерактивни визуализации. При Python такива са Bokeh, HoloViews, hvPlot и др., а при R се използват предимно
Plotly и Shiny.

Ако искате да научите повече за интерактивните визуализации с Python, можете да прочетете в статията Machine Learning: Интерактивни визуализации с Python.

Машинно обучение

В R има универсални интерфейси към множество методи за машинно обучение (caret, mlr3), както и директни модели (lm(), knn()) под формата на функции. Универсалните интерфейси улесняват прототипирането на задачите и избора на конкретен модел, а директните дават по-голяма гъвкавост и контрол върху процеса на решаване на задачата.

Caret и mlr3 предоставят възможности за:

  • разделяне на данните на обучаваща и тестова извадка
  • предварителна обработка на данните (справяне с липсващи стойности, мащабиране
    на данни, кодиране на категорийни променливи)
  • избор на най-важните за модела променливи
  • създаване, оценка и оптимизация на модели

С двата пакета могат да се решават задачи с контролна извадка (supervised learning) - класификация и регресия. За такива без контролна извадка (unsupervised learning) - клъстеризация, метод на главните компоненти (PCA) и др., е необходимо да се използват други пакети като stats или factoextra например.

Пример с R:

R Confusion Matrix
Извадка: Bank data

Общата точност на модела е 73%.

При Python за машинно обучение най-популярна и често използвана е библиотеката Scikit-learn. При нея е удобно това, че всичко е събрано на едно място. Тя предоставя голям набор от възможности по време на всеки етап от изграждането на ML решения. Scikit-learn съдържа много алгоритми за статистическо обучение с или без контролна извадка, откриване на оптимални параметри и оценка на моделите.

Същият пример с Python:

Python Confusion Matrix
Извадка: Bank data

Общата точност на модела е 0.72%.

С двата езика изградихме модел за машинно обучение, който използва алгоритъма k най-близки съседи. Има съвсем минимална разлика в получената обща точност и в резултатите при матриците на неточностите на двата модела.

Кой език да изберем?

Двата езика имат еднакви възможности и с тях могат да се постигнат едни и същи резултати. Изборът на конкретен език не зависи от задачите, които ще решаваме с него, а това до колко е естествено за нас да програмираме. Дали ще се спрем на Python или R опира до това до каква степен се занимаваме с програмиране.

За хора, които са специалисти в конкретна област и не им се е налагало да програмират, R e по-удачното решение. Обаче ако човек е насочен към ИТ сферата и иска например в приложение да вгради аналитична част, Python ще бъде по-подходящото решение. Той позволява в една олекотена форма да се прототипират задачи. Това, което се прави на Python, после по-лесно може да се пренапише на друг език, отколкото ако е първоначално написано на R.

Искате да научите повече за Python?

Включете се в курса по програмиране с Python.

Искате да научите повече за R?

Включете се в курса по анализ на данни с R

© Copyright 2019 DeviseExpert Всички права запазени
envelopephone-handsetmap-marker linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram