• David Chudán

Weka, jednoduchý nástroj pro data mining

Aktualizace: bře 31

Nástroj Weka můžeme označit za základní software pro data mining. Jak píšou i na oficiálních stránkách, využívá se hojně pro výuku, tedy pro seznámení s problematiku data miningu, kromě toho pro výzkumné účely a rovněž pro průmyslové aplikace. Je to software velmi jednoduchý na ovládání (což v určitých případech snižuje jeho použitelnost) s jednoduchým grafickým prostředím (které se za ty roky, které už je nástroj k dispozici, příliš nezměnilo), zároveň ale nabízí základní techniky supervised i unsupervised machine learningu a mnoho implementovaných algoritmů. Celý software je napsaný v Javě a je volně šiřitelný pod licencí GNU. Zajímavostí potom je, že je vyvinutý na University of Waikato, na Novém Zélandu, jaký jiný software z Nového Zélandu znáte?

Po spuštění programu se nabídne rozhraní pro výběr konkrétní aplikace (GUI Chooser).

Výběr rozhraní Weky

Pro vlastní data mining slouží volby Explorer, nebo KnowledgeFlow. Explorer je možnost ovládání prostřednictvím několika záložek, kde se provádí jak úkony přípravy dat, tak následně výběr konkrétní techniky a algoritmu. U jednotlivých spuštěných úloh (tedy machine learning algoritmů) je k dispozici seznam jednotlivých běhů, ke kterým se můžeme libovolně vracet. Druhou možností je použití KnowledgeFlow, přístupu, který je u DM nástrojů častý, tedy vkládání modulů s nejrůznější funkcionalitou, které se propojují do procesu, jenž se následně spouští. Experimenter slouží pro porovnávání klasifikátorů na jednom nebo více datasetů. Workbench je zjednodušeně řečeno pokročilejší Explorer a SimpleCLI je možnost ovládání nástroje pomocí příkazové řádky. Kromě toho GUI Chooser nabízí zajímavé vizualizační / interpretační moduly, především Boundary Visualiser, ke kterému se vrátím později v části Zpracování datasetu Titanic.


Konkrétně Explorer, se kterým budu dále pracovat, obsahuje pás karet (viz obrázek): Proprocess pro předzpracování dat, Classify pro klasifikační metody, Cluster pro shlukovou analýzu, Associate pro asociační pravidla, Select attribute pro techniky výběru atributů a Visualize pro vizualizační možnosti.

Weka Explorer

Předzpracování dat se dělá pomocí filtrů, které se dělí na supervised a unsupervised, každá z těchto dvou skupin potom na attribute a instance, zda se týká celého atributu, nebo hodnot daného atributu. Supervised jsou přitom různé pokročilejší metody, jako například vzorkování, výběr atributů, nebo diskretizace pomocí MDL metody. Filtry se přitom aplikují postupně, vždy je možné přejít o krok zpět a vrátit se k datům z předchozího kroku - klasické undo (seznam kroků ale není k dispozici, není možné se vracet o více kroků zpět). Zároveň je možné upravený dataset v libovolném kroku uložit se všemi aplikovanými změnami.

Co se týká klasifikace, shlukování a asociačních pravidel, zde se vždy vybere příslušná technika a algoritmus, nastaví se parametry a spustí se úloha. Výstupem je textová zpráva o běhu s výsledky, v některých případech potom vizualizace (například rozhodovací strom je možné vizualizovat).


Weka má velmi dobře zpracovaná výuková videa, která je možné najít na YouTube kanále https://www.youtube.com/user/WekaMOOC. Videa jsou rozdělena na části Basic data mining with Weka, které pokrývá předzpracování dat a základní klasifikační úlohy + vše s nimi spojené, dále na část Advanced Data Mining with Weka, věnující se například klasifikaci tweetů, možností použití Rka či Pythnonu, nebo spolupráci Weky s Apache Spark. Poslední částí je More Data mining with Weka, kde se detailněji rozebírá preprocessing, klasifikátory, unsupervised metody nebo třeba cost sensitive klasifikaci. V podstatě všechna témata, která Weka nabízí, jsou formou videotutoriálů zpracována.


Weka nabízí rovněž pokročilou funkcionalitu, jako je balíček pro deep learning, možnost práce prostřednictví API nebo integrace s Pythonem, Rkem, či s Apache Spark.


Zpracování datasetu Titanic

Nahrání datasetu Titanic do Weky se ukázalo jako problém, protože dle nástroje není csv správně formátované. Problém je v tom, že dataset Titanic používá pro jména pasažérů dvakrát dvojité uvozovky, což je dle definice formátu csv správně (pole obsahující znaky konce řádků, dvojité uvozovky a čárky musí být uzavřeny v dvojitých uvozovkách). Pro ušetření času a práce jsem raději našel dataset Titanic ve wekovském formátu arff a ten následně použil.


Prvním krokem analýzy je seznámení se s daty, ke kterému slouží EDA (exploratory data analysis), zobrazení základních statistik a vizualizací, aby analytik získal o datech přehled. V Exploreru Weky máme záložku Visualize, ve které je matice všech dostupných atributů

Vizualizační možnosti Weky

Po zvolení libovolné kombinace atributů se otevře detailní náhled, který je možné dále upravovat (volit atributy na osy, přidat odchylku (jitter), čím se datové body mající stejnou hodnotu "rozostří"). Následující obrázek ukazuje, jaké šance na přežití měli muži a ženy z různých tříd, kdy červené body jsou přeživší, modré nepřeživší, osa x značí třídu, kterou pasažér cestoval a osa y pohlaví.

Vizualizační možnosti Weky

Příprava dat

Odstranění nepotřebných atributů Ticket a Cabin se dělá na hlavní obrazovce Exploreru, pomocí tlačítka Remove. Dalším krokem je extrakce titulu. Zde se ukázaly limity možností předpracování dat ve Wece. Extrakce titulu, tedy různých hodnot z textového atributu, není možná, filtr nabízející extrakci pomocí regulárního výrazu není k dispozici. Naopak chybějící hodnoty se ošetří velmi jednoduše pomocí filtru ReplaceMissingValues, který chybějící hodnoty nahradí průměrem (numerické), či modusem (nominální). Diskretizaci hodnot je možné najít jak v unsupervised, tak v supervised filtrech. Použil jsem jednodušší možnost unsupervised filtru Discretize a nastavil pro atributy Age a Fare 5 ekvifrekvenčních (mající zhruba stejné zastoupení z hlediska četností) intervalů. Posledním krokem je úprava atributů Sibsp a Parch. Nejdříve jsem atributy převedl na nominální, a to pomocí filtru NumericToNominal. Dále jsem sloučil jejich hodnoty vyšší než 1 do jedné kategorie pojmenové Other, pomocí filtru MergeManyValues.


Modelování - klasifikace

Nejdříve jsem vyzkoušel klasifikační úlohy, konkrétně ZeroR, což je nejjednodušší představitelný klasifikátor, který nedělá nic jiného, než že určí která třída (hodnota) cílové proměnné je nejvyšší a všechny instance následně klasifikuje jako tato třída s vyšší četností. V datech Titanic je cílová proměnná Survived v poměru 549 (nepřežilo) ku 342 (přežilo), čili nepřežilo 61,6 % pasažérů. To je hodnota správnosti modelu pro algoritmus ZeroR, správně klasifikuje 61,6 % pasažérů. ZeroR je naprostý baseline, všechny klasifikační modely musejí přinést lepší výsledky, jinak jsou horší než prostý náhodný výběr.

Postupně jsem vyzkoušel algoritmy (s defaultním nastavením parametrů) NaiveBayes, Logistickou regresi, (vícevrstevnou) neuronovou síť, IBk, rozhodovací tabulku, PART, J48 a random forest. Následně ještě metaklasifikátory AdaBoostM1 s algoritmem J48 a bagging s algoritmem J48. Nejlepší výsledek klasifikace (při testování prostřednictvím cross validace s hodnotou n=10) přinesl metaklasifikátor AdaBoostM1 s algoritmem J48, a to 81,7 % správnost. Matice záměn spolu s dalšími metrikami je k dispozici na obrázku.

Matice záměn pro nejlepší dosažený výsledek klasifikace

Modelování - asociační pravidla a shlukování

Pro dolování asociačních pravidel jsem použil asi (pravděpodobně nejznámnější) algoritmus Apriori. Zde jsem, na rozdíl od klasifikačních úloh, provedl změny v hodnotách parametrů, aby výsledky alespoň trochu použitelné. Především jsem nastavil možnost generování asociačních pravidel obsahující cílový atribut (ač cílový atribut v asociačních pravidlech jako takových nefiguruje, Weka zde používá terminologii z klasifikačních úloh), tím se zabezpečí, že výsledná pravidla budou obsahovat atribut Survived. Dále jsem upravil minimální hodnotu Confidence, udávající sílu pravidla, tedy pro kolik procent dat pravidlo platí, na 0,6 (60 %) a A celkový počet vygenerovaných pravidel jsem zvýšil na 25. Následující obrázek ukazuje získaná pravidla.

Výsledná asociační pravidla

U shlukování jsem použil algoritmus K-means s hodnotou k=5, tedy 5 výsledných shluků. Následující textový výpis ukazuje kolik instancí bylo přiřazeno k jednotlivým clusterům, dále centroidy (tedy hodnoty, které reprezentují všechny ostatní hodnoty v daném clusteru, průměry pro numerické atributy, modus pro nominální atributy) jednotlivých clusterů.

Výsledek shlukování

Poslední, o čem se v rámci Weky zmíním, je v úvodu avizovaný BoundaryVisualiser. Tento nástroj, představený již v roce 2003, řeší problematiku interpretability klasifikačních modelů, což je problém, kterému se v současné době věnuje velká pozornost. Nástroj umožňuje graficky zobrazit, jaká bude výsledná klasifikace daného klasifikátoru pro určitou kombinaci vysvětlujících atributů.

Pro použití na dasetu Titanic jsem připravil verzi datasetu, která má pouze atributy Age, Pclass a Survived (z důvodu, aby do klasifikace nemohly vstupovat žádné další atributy a výsledky tedy byly závislé pouze na těchto dvou, na osách souřadného systému zobrazitelných, atributech).

První vizualizace ukazuje jednoduchý klasifikátor OneR, který klasifikuje všechny pasažéry cestující v první třídě, že cestu přežili, všechny pasažéry z ostatních tříd (tedy z druhé a třetí třídy) že cestu nepřežili.

BoundaryVisualiser, algoritmus OneR

Druhá vizualizace ukazuje rozhodovací strom s využitím algoritmu J48

BoundaryVisualiser, algoritmus J48 (rozhodovací strom)

Třetí vizualizace je výstup z vícevrstevné neuronové sítě (multilayer perceptron), kde je dobře vidět zcela jiný princip, na kterém neuronové sítě oproti pravidlovým klasifikátorům fungují.

BoundaryVisualiser, vícevrstevná neuronová síť

Pro bližší podrobnosti o tom, jak BoundaryVisualizer funguje, doporučuji článek, kde byl poprvé představen.


Shrnutí

Weka je jednoduchý nástroj, který bych doporučil pro seznámení se s problematikou data miningu a machine learningu (pokud se vám nechce se učit Python). Nicméně pro reálné nasazení na nějaké složitější problémy vhodná není, složitější úlohy se velmi dlouho počítají a program rovněž začne být s většími daty nestabilní (tento problém je ovšem možné řešit díky prostřednictvím distribuované Weky v Apache Spark prostředí).

19 zobrazení
  • Twitter Clean Grey
  • LinkedIn Clean Grey