Machine Learning: Интерактивни визуализации с Python

Интерактивните визуализации в машинното обучение позволяват да постигнем по-добра динамика във визуалния анализ на данни. Този тип графики дават възможност за разучаване, манипулиране и взаимодействие с данните по интересен и полезен начин. Те притежават динамични аспекти като селектиране, hover, zoom in/zoom out възможности и др., които дават контрол и позволяват бързо и лесно извличане на полезна информация.

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

Какво повече ни дават интерактивните визуализации от статичните?

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

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

Инструменти за интерактивни визуализации с Python

Има създадени множество библиотеки за интерактивни визуализации с Python. Те позволяват бързо изграждане на графики и по-лесен начин за разучаване на данните. Някои от по-популярните, които ще разгледаме в тази статия, са Bokeh, HoloViews, hvPlot, bqplot и plotly. За примерите, които ще видите по-надолу в статията, са използвани 5 извадки:

  • Тelecom churn – данни за отлива на клиенти на телекомуникационна фирма
  • Bike sharing – данни за наемане на велосипеди при различни метеорологични условия
  • Bike buyers – данни за клиенти на магазин за велосипеди
  • Wine quality red – съдържа информация за съставните части и качество на червеното вино
  • Salary data – данни за заплатите на служители и трудовия им стаж

Bokeh, HoloViews и hvPlot

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

Ключови особености:

  • Важен момент е използването на структурата от данни ColumnDataSource, която наподобява речник (има ключ и стойности). Може да се използва стандартния DataFrame на библиотеката Pandas, но предимството на ColumnDataSource пред него е, че създава връзка между данните при отделните визуализации, т.е. промени при едната графика се отразяват веднага върху останалите, които използват същите данни.
  • Bokeh съдържа стандартна лента с инструменти, от която са достъпни интерактивните възможности. По подразбиране позволява pan и zoom in/zoom out фунционалности, запазване на графиката в определен формат и нулиране на състоянието ѝ. Има и помощен бутон, който води към документацията на Bokeh. Можем и ако искаме сами да конфигурираме кои инструменти да бъдат включени в менюто при създаване на фигурата чрез промяна на параметъра tools.
  • Предоставя голям набор от компоненти като бутони, падащ списък и т.н., които допринасят още повече възможности за интерактивност при изграждане на визуализации.

Примери:

Извадка: Telecom churn

На тази визуализация можем да видим диаграма на разсейването, изобразяваща връзката между общия брой разговори, проведени през деня, и общата сума, която клиентът е бил таксуван. Различните цветове показват дали съответният потребител има активирана гласова поща в плана си или няма. Благодарение на интерактивните елементи на Bokeh, с отметка може да се регулира какво да бъде изобразено на диаграмата.

Извадка: Telecom churn

На тези 2 визуализации са представени стълбовидни диаграми, като едната е стандартна, а другата групирана. В първия случай сравняваме точността на различните класификатори, а във втория прецизност, пълнота и f1 оценка. Веднага става ясно, че Random Forest и Decision Tree са с най-високи резултати.

Във всичките примери можем да видим по-конкретна информация благодарение на hover функционалността. Има и възможност за zoom in и zoom out чрез използването на box zoom и wheel zoom.

Holoviews е с отворен код, което улеснява много създаването на интерактивни визуализации. Тази библиотека може да се комбинира с Matplotlib, Bokeh или Plotly, като изисква много по-малко редове код за изграждане на графиките.

Ключови особености:

  • При Holoviews е много лесно да се комбинират или подреждат визуализации чрез Overlay (със знак – например line1 line2) и Layout (със знак + – например line1 + line2).
  • Параметрите kdims и vdims позволяват да избираме кои характеристики да бъдат по оста х и кои по y.
  • Данните във визуализациите могат да се свързват чрез различните методи, които предоставя библиотеката, в модула links – DataLink, RangeToolLink и др. Също така има и много възможности за персонализиране на графиките (промяна на цветове, размери и др.)
  • Holoviews може да се използва заедно и с ipywidgets за придаване на допълнителни възможности за интерактивност (например бутони, плъзгач, отметка, избор на цвят и др.), както и с библиотеките Seaborn за визуализация и Pandas за анализ на данни, така че възможностите при работа са много.

Примери:

Извадка: Telecom churn

Този пример показва learning curve диаграми на различни класификатори, като е използван падащ списък. Това е полезно, защото не създаваме отделна графика за всеки случай, а динамично се променят резултатите в зависимост от избора на класификатор. От визуализацията става ясно, че Decision Tree се справя най-добре с нови данни и резултатите са по-добри при по-голям обем на извадката.

Извадка: Bike sharing

На тази графика можем да видим комбинация от диаграма на разсейването и хистограми за всяка от характеристиките – температура и влажност на въздуха. Инструментите, които са достъпни в менюто позволяват zoom in/zoom out функционалност и селектиране на части от визуализацията. В примера се вижда, че между двете характеристики не съществува линейна зависимост.

Извадка: Telecom churn

Представена е диаграма на разсейването, която показва връзката между общия брой минути и общия брой обаждания за деня, които са правили клиенти на телекомуникационната фирма. Графиката е изградена така, че когато се селектират част от данните на нея, се визуализират веднага върху съседната диаграма. Има също и zoom in/zoom out възможности, което придава по-голяма яснота точно за кои точки става въпрос.

hvPlot е създадена на базата на HoloViews и Bokeh, като са необходими дори още по-малко редове код, за да се постигат същите резултати както с другите библиотеки. Тя притежава всички стандартни типове графики и дава много възможности за тяхното персонализиране.

Ключови особености:

  • hvPlot притежава особеностите на HoloViews за подреждане и комбиниране на визуализации. Може също така да се използва параметърът subplots или hvPlot да се комбинира с библиотеката Panel за разширяване на възможностите при създаване на интерактивни графики.
  • Автоматично се създават подходящи компоненти (падащ списък, плъзгач и т.н.), когато се използва параметърът groupby в зависимост от типа на посочената променлива. В комбинация с Panel или ipywidgets стават неограничени възможностите за персонализиране както на позиционирането на визуализациите, така и на функционалностите на самите компоненти.

Примери:

Извадка: Bike sharing

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

Извадка: Bike sharing

На тази визуализация са изобразени 3 графики на плътността на разпределението на параметрите температура, влажност на въздуха и скорост на вятъра. Библиотеката hvPlot дава възможност чрез избор на стойност от легендата, да се селектират графиките, които искаме да бъдат по-ясно показани, за да може фокусът да е върху тях.

Извадка: Bike sharing

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

Други библиотеки

Plotly + Cufflinks

Plotly e изградена на базата на d3.js и благодарение на друга библиотека – Cufflinks, може да се използва директно с DataFrame структурата на Pandas. С тази библиотека много бързо и лесно се създават красиви интерактивни визуализации. Има всички основни типове графики на разположение, но възможностите ѝ са ограничени откъм интерактивни компоненти. Това се компенсира обаче от друг инструмент на компанията – Dash, с който може да се правят много по-сложни визуализации. Plotly също предлагат и Chart Studio, където с помощта на графичен интерфейс могат да се създават красиви интерактивни графики.

Примери:

Извадка: Salary data

Графично е представена линейна регресия за предсказване на заплати на служители в зависимост от трудовия им стаж. Plotly има меню с инструменти, от което са достъпни zoom in/zoom out, pan, hover функционалности и др. Позволява също така тази визуализация да се експортира онлайн, след което да се обработи чрез Plotly Chart Studio.

Извадка: Wine quality red

Представените диаграми тип кутия показват разпределението на променливите летлива киселинност и лимонена киселина в червеното вино чрез основни статистически показатели. От легендата може да се скрива конкретна графика. Чрез hover възможността можем да видим стойностите на минимума, максимума, медианата и квартилите. В двата случая стойностите са разположени предимно около минималната.

bqplot

Това е специална библиотека на Python, предназначена за изграждането на 2D интерактивни графики. Тя е създадена за проекта на Jupyter и при нея всяка част от фигурата е интерактивен компонент, който може да се манипулира. Тя позволява само с няколко реда код да се изградят страхотни визуализации, които имат възможност да притежават и графичен интерфейс.

Примери:

Извадка: Bike buyers

На тази визуализация са изобразени хистограми, показващи честотното разпределение на купувачи на велосипеди в зависимост от тяхната възраст и пол. Тук имаме възможност чрез използването на един от интерактивните селектори на bqplot – BrushIntervalSelector, да маркираме само определени интервали, като под графиката са изведени индексите на избраните данни от променливата.

Извадка: Telecom churn

На кръговата диаграма са представени резултати от матрица на неточностите при оценка на Decision Tree класификатор за предсказване на отлива на клиенти. Показано е отношението на метриките True Positive, True Negative, False Positive и False Negative спрямо общия брой стойности. В 85.60% от случаите, класификаторът е предсказал правилно тези клиенти, които не са се отказали от услугите, а в 8.40% е предсказал правилно тези, които са се отказали. Останалите 6%, включващи False Positive и False Negative, са грешно предсказаните стойности на класификатора.

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

Примерите с визуализациите можете да свалите от тук.

Можете да използвате Jupyter Notebook или друг подобен инструмент, за да ги изпълните.

Каква е ползата от използването на интерактивни визуализации?

Интерактивните визуализации дават на анализатора повече начини за манипулиране на данните без да е необходимо при всяка промяна да се създава нова графика. Използването им значително улеснява предварителния анализ на данните и графичното представяне на резултатите от моделите за машинно обучение.

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

Включете се в курса по машинно обучение и анализ на данни с Python.

Научете повече

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