Od jakiegoś czasu buduję modele z danymi kategorialnymi, a kiedy w tej sytuacji zasadniczo używam funkcji LabelEncoder scikit-learn do transformacji tych danych przed zbudowaniem modelu.
Rozumiem różnicę między OHE
, LabelEncoder
a DictVectorizor
jeśli chodzi o to, co robią z danymi, ale to, co nie jest dla mnie jasne jest, kiedy można wybrać zatrudnić jedną technikę nad drugą.
Czy istnieją pewne algorytmy lub sytuacje, w których jeden ma zalety / wady w stosunku do innych?
Odpowiedzi:
W niektórych przypadkach użyteczne są LabelEncoder lub DictVectorizor, ale moim zdaniem są one dość ograniczone ze względu na porządek.
LabelEncoder może zamienić [pies, kot, pies, mysz, kot] w [1,2,1,3,2], ale wówczas narzucona porządek oznacza, że średnia pies i mysz to kot. Nadal istnieją algorytmy, takie jak drzewa decyzyjne i losowe lasy, które mogą dobrze pracować ze zmiennymi kategorialnymi, a LabelEncoder może być używany do przechowywania wartości przy użyciu mniejszej ilości miejsca na dysku.
Zaletą kodowania na gorąco jest to, że wynik jest binarny, a nie porządkowy, a wszystko znajduje się w ortogonalnej przestrzeni wektorowej. Wadą jest to, że w przypadku dużej liczności przestrzeń funkcji może naprawdę szybko wybuchnąć i zaczynasz walczyć z przekleństwem wymiarowości. W takich przypadkach zwykle używam kodowania na gorąco, a następnie PCA w celu zmniejszenia wymiarów. Uważam, że rozsądną kombinację one-hot plus PCA rzadko można pokonać innymi schematami kodowania. PCA znajduje liniowe nakładanie się, więc naturalnie będzie dążyć do grupowania podobnych elementów w tę samą cechę.
źródło
Chociaż AN6U5 udzielił bardzo dobrej odpowiedzi, chciałem dodać kilka punktów na przyszłość. Rozważając kodowanie na gorąco (OHE) i kodowanie etykiet , musimy spróbować zrozumieć, jaki model próbujesz zbudować. Mianowicie dwie kategorie modeli, które rozważymy, to:
Zastanówmy się, kiedy zastosować OHE, a kiedy zastosować Kodowanie etykiet podczas budowania modeli opartych na drzewach.
Stosujemy BHP, gdy:
Stosujemy kodowanie etykiet, gdy:
Jeśli chcesz kontynuować BHP, jak sugerował @ AN6U5, możesz połączyć PCA z OHE.
Zastanówmy się, kiedy zastosować OHE i kodowanie etykiet podczas budowania modeli nieopartych na drzewach.
Aby zastosować kodowanie etykiet, zależność między cechą a celem musi być liniowa, aby można było efektywnie korzystać z kodowania etykiet.
Podobnie w przypadku, gdy zależność jest nieliniowa, możesz użyć OHE do tego samego.
Uwaga: Niektóre wyjaśnienia zostały przywołane w Jak wygrać konkurs Data Science z Coursera.
źródło
LabelEncoder jest dla danych porządkowych, a OHE dla danych nominalnych.
źródło