Mam 3 klasy z tą dystrybucją:
Class 0: 0.1169
Class 1: 0.7668
Class 2: 0.1163
I używam xgboost
do klasyfikacji. Wiem, że istnieje parametr o nazwie scale_pos_weight
.
Ale jak to jest obsługiwane w przypadku „wieloklasowym” i jak mogę to właściwie ustawić?
Ta odpowiedź @KeremT jest poprawna. Podaję przykład dla tych, którzy nadal mają problemy z dokładną implementacją.
weight
parametr w XGBoost jest na instancję, a nie na klasę. Dlatego musimy przypisać wagę każdej klasy do jej instancji, co jest tym samym.Na przykład, jeśli mamy trzy niezbilansowane klasy ze współczynnikami
Ich wagi byłyby (dzieląc najmniejszą klasę przez innych)
Następnie, jeśli dane treningowe są
weight
wektor budujemy w następujący sposób:źródło
Wszyscy natkną się na to pytanie, mając do czynienia z problemem niezrównoważonej klasyfikacji wieloklasowej za pomocą XGBoost w R. Ja też to zrobiłem!
Szukałem przykładu, aby lepiej zrozumieć, jak go zastosować. Zainwestował prawie godzinę, aby znaleźć link wymieniony poniżej. Dla wszystkich, którzy szukają przykładu, oto -
/datascience//a/9493/37156
Dzięki Wacax
źródło
Po prostu przypisz każdemu wystąpieniu danych pociągu wagę klasy. Najpierw uzyskaj wagi klasy ze
class_weight.compute_class_weight
sklearn, a następnie przypisz każdemu rzędowi danych pociągu odpowiednią wagę.Zakładam tutaj, że dane pociągu mają kolumnę „klasa” zawierającą numer klasy. Zakładałem również, że istnieją klasy nb od 1 do nb_classes.
źródło