Jak dopasować jakościowe typy danych do losowej klasyfikacji lasu?

12

Muszę znaleźć dokładność zestawu danych szkoleniowych, stosując algorytm losowego lasu. Ale mój typ mojego zestawu danych jest zarówno kategoryczny, jak i numeryczny. Kiedy próbowałem dopasować te dane, pojawia się błąd.

„Dane wejściowe zawierają NaN, nieskończoność lub wartość zbyt dużą dla dtype („ float32 ”)”.

Problem może dotyczyć typów danych obiektowych. Jak dopasować dane kategoryczne bez przekształcania w celu zastosowania RF?

Oto mój kod.

zrzut ekranu

zrzut ekranu

zrzut ekranu

IS2057
źródło
Nie musisz przeprowadzać one_hot, jeśli używasz modelu drzewa, ponieważ nie mierzy on odległości jak inna metoda.
Jun Yang,
1
@ JunYang, scikit-learn obecnie wymaga kodowania kategorii.
Ben Reiniger

Odpowiedzi:

11

Musisz przekonwertować cechy jakościowe na atrybuty numeryczne. Powszechnym podejściem jest stosowanie kodowania „na gorąco”, ale to zdecydowanie nie jedyna opcja. Jeśli masz zmienną z dużą liczbą poziomów jakościowych, powinieneś rozważyć połączenie poziomów lub użycie sztuczki haszującej. Sklearn jest wyposażony w kilka podejść (sprawdź sekcję „patrz także”): Jeden gorący enkoder i sztuczka haszująca

Jeśli nie jesteś zaangażowany w sklearn, losowa implementacja lasu H2O obsługuje funkcje jakościowe bezpośrednio.

David Marks
źródło
0

O ile wiem, istnieje pewien problem z uzyskaniem tego rodzaju błędów. Po pierwsze, w moich zestawach danych istnieje dodatkowa przestrzeń, przez którą pokazywany jest błąd: „Dane wejściowe zawierają wartość NAN; Po drugie, python nie jest w stanie współpracować z żadnym typem wartości obiektu. Musimy przekonwertować tę wartość obiektu na wartość liczbową. Do konwersji obiektu na numeryczny istnieje proces kodowania dwóch typów: koder etykiet i jeden gorący koder. W przypadku, gdy koder etykiet koduje wartość obiektu od 0 do n_klasy-1 i Jeden gorący koder koduje wartość od 0 do 1. W mojej pracy, przed dopasowaniem moich danych do dowolnej metody klasyfikacji, używam enkodera etykiet do konwersji wartości i przed konwersją upewniam się, że w moim zestawie danych nie ma pustej przestrzeni.

IS2057
źródło