• David Chudán

RapidMiner, část 1. - klasifikace

Aktualizace: kvě 21

Zatímco Weka je typický akademický nástroj, o RapidMineru můžeme prohlásit, že se naopak jedná o typický příklad komerčního software, který se snaží zůstat s dobou a postihnout všechny trendy v oblasti. RapidMiner nabízí "od nepaměti" verzi zdarma s omezením na 10 000 řádků velikosti datasetu a zpracovávání výsledků na 1 procesoru.

Historie nástroje začíná v roce 2001, kdy jej začala vyvíjet skupina vědců na Technické univerzitě v Dortmundu. V roce 2006 potom s vývojem přešli do komerčního prostředí, pod hlavičku firmy Rapid-I, která se v roce 2013 přejmenovala na RapidMiner.

Z hlediska použití se nepochybně jedná o komplexnější nástroj, než je Weka. Základní logika práce je taková, že uživatel vybírá tzv. operátory, kteří obstarávají jednu konkrétní funkcionalitu (např. načtení dat, odstranění chybějících hodnot, aplikace rozdělení dat na trénovací a testovací, aplikaci konkrétního algoritmu). Tyto operátory se spojují do jednoho procesu, který se následně spustí a na výstup dostaneme konkrétní výsledek vyplývající z použitých operátorů.

Obrázek 1 - RapidMiner, hlavní obrazovka

Na Obrázku 1 můžeme vidět hlavní obrazovku nástroje. Část Repository slouží k načtení dat a vytvořených procesů. Jsou zde k dispozici vzorové procesy od tvůrců programu, a také různé procesy vytvořené komunitou kolem programu. Dále se můžeme připojit k celé řadě databází a cloudových úložišť či přidat data do "local repository", čili do počítače, kde právě pracujete. Sekce Operators obsahuje všechny dostupné operátory, které je možné při práci s RapidMinerem použít. Střední, velká část slouží k umisťování operátorů a tedy vlastní tvorbě procesů. Na pravé části je okno obsahující parametry k jednotlivým (aktuálně aktivním) operátorům. Poslední sekce obsahuje rozsáhlý help, který popisuje vlastní operátor a všechny parametry, kterými lze ovlivňovat jeho funkcionalitu.

V horní liště se nachází další funcionalita, kromě výchozího pohledu (Design) tu je zobrazení výsledků, možnost zrychlené přípravy dat (TurboPrep), automatizovaný machine learning (Auto Model) a nasazení modelu (Deployment). Ve spodní liště je potom možné aktivovat funkcionalitu Recommended operators, což jsou nejčastější operátory, které použili ostatní uživatelé, kteří mají tuto funkci zapnutou. Je to tedy v podstatě takový recommender pro to, co použít.

Celá funkcionalita RapidMiner je schovaná v operátorech, kterých je dle dokumentace více než 1500. Jejich celkový přehled je k dispozici zde.

Obrázek 2 - Operátoři v RapidMineru

Obrázek 2 ukazuje jejich strukturu v nástroji. Jsou rozděleny do sedmi základních kategorií. Další operátory je možné stáhnout z Marketplace, online repositáře, který umožňuje stažení dalších operátorů, například pro text mining, scrapování webových stránek, či pokročilejší statistickou analýzu.

Z výukových materiálů je třeba zmínit rozsáhlý YouTube kanál, pomoc je potom možné najít na aktivní community stránce.

Co se týká pricingu, tak RapidMiner je, jak jsem psal výše, možné s omezenou funkcionalitou a rozsahem analyzovaných dat používat zdarma. Omezení funkcionality spočívá v nedostupnosti Auto Model a Deployment. Omezení rozsahu analyzovaných dat spočívá v podpoře maximálně 10 000 řádků, a dále možnosti využití pouze jednoho procesoru pro výpočty. Pro studenty nebo akademické pracovníky je k dispozici RapidMiner Educational program.


Zpracování dat Titanic

Při zpracování dat Titanic ve formátu csv máme dvě možnosti jejich načtení. První možností je data naimportovat do local repository, kde zůstane v neměnné podobě k dispozici pro analýzy. Druhou možností je použít operátor Read csv, který data načítá z aktuálního umístění na disku počítače. Rozdíl v těchto způsobech je zřejmý - naimportovaná data budou v podobě okamžiku importu, zatímco načítaná data se mohou měnit, tedy například zde mohou přibývat nové záznamy (to nám asi u dat Titanic nehrozí, ale asi víte, co tím myslím :-) ).

Já využiji možnost importu dat a nyní můžeme prostým kliknutím na naimportovaná data v části Repository otevřít možnosti EDA (exploratory data analysis), tedy základní seznámení se s daty. Pomocí data vidíme tabulku se záznamy. V záložce Statistics jsou základní statistické údaje o jednotlivých atributech. Visualizations nabízí možnosti vizualizace dat, přičemž možnosti způsobů vizualice jsou poměrně bohaté - máme k dispozici více než 30 různých typů grafů a dalších možností zobrazení. Na Obrázku 3 vidíme počty přeživších podle jednotlivých tříd.

Obrázek 3 - Počty přeživších podle Pclass

Nyní už přejdeme k samotné přípravě dat podle jednotlivých kroků uvedených v článku o datasetu Titanic.

Prvním krokem bude odstranění atributů Ticket a Cabin. To se jednoduše udělá pomocí operátoru Select Attributes, kde tyto dva atributy označím a pomocí volby "invert selection" je odstraním. Následuje krok extrakce titulu pasažéra. Titul se nachází v atributu name, konkrétně tento atribut vypadá následovně: jménopříjmení, titul a jméno. Pro extrakci využiji operátoru Split, který rozděluje konkrétní či skupinu atributů pomocí regulárního výrazu. Pro první dělení využiji pouze regulární výraz ",", hodnoty ve sloupci name rozdělí s využitím čárky na příjmení a zbytek. V druhém dělení rozdělím nově vytvořený sloupec Name 2 na část obsahující vlastní titul a na část obsahují křestní jméno (často jména) a to velmi jednoduše pomocí výrazu "/.", který dělení provede podle znaku tečka nacházející se za každým titulem. Zahodím nerelevantní nově vytvořené sloupce pomocí Select Attributes, vytvořený atribut Name_2_1 s extrahovaným titulem přejmenuji na Title. Atribut Title má aktuálně množství velmi málo četných hodnot, nejrůznější více či méně podivné tituly (např. Lady, Major, Capt, Jonkheer apod :-) ), viz Obrázek 4.

Obrázek 4 - extrahované tituly z atributu Name

Všechny tyto málo četné tituly nahradíme kategorií Other s využitím operátoru Replace a regulárního výrazu Capt|Col|Don|Dr|Jonkheer|Lady|Major|Master|Mlle|Mme|Rev|Sir|the Countess|Ms. Následně provedu nahrazení chybějících hodnot pomocí operátoru Replace Missing Values. V defaultním nastavení tento operátor automaticky nahradí chybějící hodnoty hodnotou průměrnou, či nejčastější hodnotou v případě nominálních atributů. Dalším krokem bude diskretizace numerických hodnot atributů Age a Fare. S využitím operátoru Dicretize (Discretize by frequency) vytvořím 5 stejně velkých kategorií (intervalů), do kterých se stávající hodnoty rozdělí. Nyní se soustředím na atributy SibSp a Parch. Nejdříve tyto atributy, ke kterým ještě přidáme cílový atribut Survived, převedu z numerického typu na typ (poly)nominální s využitím operátoru Numerical to Polynominal. Cílem je vytvořit atribut IsAlone, který určí, zda pasažér cestoval sám, či nikoliv. K tomu je třeba udělat několik kroků. Nejprve poslučovat málo četné hodnoty u atributů SibSp a Parch. Hodnoty jsou od 0 po 6 (resp. po 8). RapidMiner bohužel nabízí pouze velmi pracnou možnost postupného slučování hodnot po dvou pomocí operátoru Merge, kde se vyberou dvě hodnoty, které se mají sloučit. Nová hodnota má potom tvar hodnota1_hodnota2. Takto postupně a velice pracně je možné sloučit 6 hodnot do hodnot dvou, a to "0", pokud cestoval sám, a hodnotu "1_2_3_4_5_6" pro ostatní případy, kdy necestoval sám. Nyní je potřeba oba atributy (Parch a SibSp) sloučit, k tomu využijeme operátor Generate Concatenation. Nový atribut přejmenujeme na IsAlone. Tento nový atribut má aktuálně 4 hodnoty, viz Obrázek 5.

Obrázek 5 - tvorba atributu IsAlone

Tyto kategorie potřebujeme sloučit a to tak, že hodnota Yes_Yes bude odpovídat hodnotě Yes, všechny ostatní kategorie budou potom odpovídat kategorie No. Atribut přejměnuji na IsAlone a pomocí Select Attribute odstraním původní atributy SibSp a Parch. Poslední úkon z hlediska přípravy dat je nastavení atributu Survived jakožto cílového atributu pro klasifikaci, k tomu použiji operátor Set Role a nastavím roli Label pro atribut Survived.

Výsledný proces obsahuje 17 operátorů, přičemž 3 z nich jsou tzv. Subprocess, meta operátor, do kterého je možné vnořit jiné operátory. Ty jsem využil pro vícenásobné použití operátoru Merge a Replace. Celkový proces je zobrazen na obrázku 6.

Obrázek 6 - Proces pro preprocessing datasetu Titanic

Přejdeme k vlastní klasifikaci, pro kterou vyberu následující algoritmy: proprietární algoritmus rozhodovacích stromů, který je v RapidMineru implementovaný, dále deep learning, naivní bayesovský klasifikátor, metaklasifikátor Adaboost (využívající opět rozhodovací stromy) a poměrně nový klasifátor gradient boosted trees. Pro všechny tyto operátory využiji testování pomocí cross validace. Obrázek 7 ukazuje subproces, ve kterém jsou všechny zmíněné klasifikátory umístěné.


Obrázek 7 - subproces s cross validacemi jednotlivých klasifikátorů

Nyní můžeme celý výsledný proces (viz Obr. 8) spustit.


Obrázek 8 - výsledný proces Titanic

Výpočet díky více algoritmů, které musí proběhnout, již nějakou chvilku trvá, na mé konfiguraci (Intel Core i7, 4GHz, 16 GB RAM) cca 5 vteřin. Výsledkem je 5 matic záměn pro jednotlivé klasifikátory, viz Obrázek 9.

Obrázek 9 - pořadí klasifikátorů

Je zřejmé, že výsledky minimálně prvních 4 jsou velice vyrovnané. Pro zajímavost úlohu ještě spustím bez celého zdlouhavého preprocessingu, pouze s takovými úpravami, které jsou pro spuštění klasifikační úlohy nezbytné. To vyžadovalo pouze označit atribut Survived za cílový atribut a tento atribut převést z numerického na nominální. Tento jednoduchý proces je znázorněn na Obrázku 10.

Obrázek 10 - Spuštění úlohy bez přípravy dat

Výsledky pro jednotlivé klasifikátory jsou následující:

  • Nejlépe zde dopadl deep learning s výsledkem 80,36 % +/- 3.4 %.

  • Na druhém místě se umístil adaboost s výsledkem 79,12 % +/- 3,95 %.

  • Na třetím místě rozhodovací strom s výsledkem 78,9 % a rozptylem +/- 4,67 %.

  • Na čtvrtém místě naive bayes s výsledkem 76,76 % +/- 3,74 %.

  • A na posledním místě s dramatickým propadem potom gradient boosted tree s 59,28 % +/- 7,56 %.


Z výsledků je zřejmé, že poměrně důkladný a pracný preprocessing má podstatně různý vliv na úspěšnost jednotlivých klasifikátorů. U naive bayes se rozdíl téměř neprojevil. U rozhodovacích stromů, hlubokých neuronových sítí a adaboostu s rozhodovacími stromy byl byly výsledky lepší o zhruba 2 %, u klasifikátoru gradient boosted tree byl potom rozdíl dramatických 22 %. Je na zvážení každého, zda se realizované úpravy pro zvýšená přesnosti klasifikace vyplatily, nebo nikoliv.


Z důvodu délky tohoto článku se budu dalším metodám, tedy shlukování a asociačním pravidlům věnovat v dalším příspěvku. Rovněž se ještě v některém z dalších článků podíváme na možnosti automatického strojového učení (AutoML), které RapidMiner nabízí a porovnáme výsledky těchto automatizovaných metod s tím, co jsem ukázal v tomto článku.

9 zobrazení
  • Twitter Clean Grey
  • LinkedIn Clean Grey