Řetězce a faktory
Jak víš, Spark při modelování vyžaduje číselná data. Dosud to nebyl problém – i booleovské sloupce lze snadno převést na celá čísla. Teď ale budeš jako příznaky v modelu používat také název letecké společnosti a cílové letiště. Ty jsou uloženy jako řetězce a není zřejmé, jak je přímo převést na číselný datový typ.
Naštěstí PySpark obsahuje funkce pro zpracování těchto dat přímo v submodulu pyspark.ml.features. Můžeš vytvořit takzvané „one-hot vektory", které budou reprezentovat dopravce a cílové letiště každého letu. One-hot vektor je způsob, jak zakódovat kategorický příznak – každé pozorování je reprezentováno vektorem, ve kterém jsou všechny prvky nulové, až na nejvýše jeden, který má hodnotu 1.
Každý prvek vektoru odpovídá jedné kategorii daného příznaku, takže správnou kategorii snadno poznáš podle toho, který prvek vektoru se rovná 1.
Prvním krokem při kódování kategorického příznaku je vytvoření StringIndexeru. Instance této třídy jsou Estimatory, které přijmou DataFrame se sloupcem řetězců a každý jedinečný řetězec namapují na číslo. Estimator poté vrátí Transformer, který toto mapování připojí k DataFrame jako metadata a vrátí nový DataFrame s číselným sloupcem odpovídajícím původnímu textovému sloupci.
Druhým krokem je zakódovat tento číselný sloupec jako one-hot vektor pomocí OneHotEncoderu. Funguje to stejně jako StringIndexer – nejprve vznikne Estimator a z něj pak Transformer. Výsledkem je sloupec, který kategorický příznak zakóduje jako vektor vhodný pro algoritmy strojového učení!
Může to znít složitě, ale neboj se! Stačí si zapamatovat, že potřebuješ vytvořit StringIndexer a OneHotEncoder – o zbytek se postará Pipeline.
Proč je potřeba kategorický příznak zakódovat jako one-hot vektor?
Toto cvičení je součástí kurzu
Foundations of PySpark
Interaktivní praktické cvičení
Proměňte teorii v praxi s jedním z našich interaktivních cvičení
Začít cvičení