[CZ] Evoluce klasifikačních pravidel
Na přednášce jste si s Romanem povídali o tom, jak se pomocí evolučních algoritmů dají vyvíjet pravidla pro klasifikaci. V těchto cvičeních si něco takového zkusíme.
Ve zdrojových kódech najdete jednoduchou implementaci inspirovanou Pittsburghským přístupem, tj. jedinci jsou množiny několika pravidel. Naším cílem je klasifikovat správně daný dataset, tedy používáme fitness funkci, která počítá správnost klasifikace (procento správně klasifikovaných instancí). Jako objective funkci používáme 1 - správnost
.
Jedinci jsou v našem případě seznamy pravidel (maximální počet pravidel lze nastavit), každé pravidlo se skládá z podmínek pro každý atribut. Máme tři druhy podmínek - menší než, větší než a univerzální podmínku, která je vždy splněna. Při vyhodnocení jedince se na každé instanci z dat kontroluje, která pravidla jí odpovídají (jsou splněny všechny podmínky) a tato pravidla se nechají hlasovat o klasifikaci (tj. vyhraje třída, kterou pravidla předpovídají nejčastěji).
Pro tyto jedince máme implementované tři genetické operátory
- křížení, které připomíná uniformní křížení (berou se náhodně pravidla z jednoho nebo druhého jedince)
- mutace, která mění hranice v pravidlech
- mutace, která mění hodnotu předpovídané třídy
Algoritmy budeme testovat na dvou datových souborech - jeden z nich je známý soubor o kosatcích iris.csv
, kde je cílem klasifikovat kosatce do třech druhů v závislosti na rozměrech okvětních lístků. Druhý soubor je winequality-white.csv
, kde je cílem předpovědět kvalitu vína na škále 1-9 na základě fyzikálních a chemických atributů. Soubor iris.csv
je docela malý, hodí se tedy pro testování. Druhý soubor je mnohem větší, a problém je také mnohem složitější. Hodí se především těm, komu první soubor připadá moc jednoduchý.
Zdrojové kódy najdete v package rules.