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:

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ů na základě rozměrů kališních a korunní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 souboru rules.py.

Zadání úkolu

[5 bodů] Je mnoho možností, jak implementovaný algoritmus vylepšit, vyzkoušejte několik z nich (nebo si vymyslete i vlastní):

  1. Přidat další typy podmínek.
  2. Přidat další genetické operátory.
  3. Přidat váhy/priority k jednotlivým pravidlům.
  4. Změnit parametry algoritmu (počet pravidel v jedinci, nastavení operátorů apod.).

Napište mi, co jste zkusili a jak to dopadlo. Porovnejte vaše výsledky s implementací ve zdrojových kódech na datasetu iris a na nějakém dalším datasetu. Nezapomeňte připojit grafy s průběhem. Dataset iris je velmi jednoduchý, na druhou stranu winequality je pro tento algoritmus relativně komplikovaný.

[+3 body] V předchozím úkolu použijte jiný dataset než iris a winequality.