Czy przypadkowa implementacja lasu w scikit-learn wykorzystuje średnią dokładność jako metodę punktacji do oszacowania błędu uogólnienia przy próbkach z worka? Nie jest to wspomniane w dokumentacji, ale metoda score () podaje średnią dokładność.
Mam bardzo niezrównoważony zestaw danych i używam AUC ROC jako mojej metryki punktacji w wyszukiwaniu siatki. Czy istnieje sposób, aby powiedzieć klasyfikatorowi, aby używał tej samej metody oceniania również na próbkach OOB?
random-forest
scikit-learn
darXider
źródło
źródło
oob_score
zgłoś dokładność. Muszę jednak jeszcze raz spojrzeć na kod źródłowy.Odpowiedzi:
Ogólnie wydajność klasyfikatorów porównuje się przy użyciu dokładności, jest to miara liczby poprawnie sklasyfikowanych instancji podzielona przez całkowitą liczbę instancji. Jednak na podstawie danych treningowych możemy uzyskać lepsze przybliżenie oczekiwanego błędu od naszego klasyfikatora, gdy stosujemy techniki uczenia się w grupach lub workowania.
Błąd braku worka
Aby zaimplementować OOB w sklearn, musisz określić go podczas tworzenia obiektu Losowe lasy jako
Następnie możemy wytrenować model
Zgodnie z oczekiwaniami dokładność modelu podczas oceny zestawu treningowego jest bardzo wysoka. Jest to jednak bez znaczenia, ponieważ bardzo dobrze możesz przepełniać swoje dane, a zatem Twój model jest śmieci. Możemy jednak użyć wyniku poza torbą jako
Jest to dokładność podczas oceny naszych instancji w zestawie treningowym przy użyciu tylko drzew, dla których zostały pominięte. Teraz obliczmy wynik na zestawie testowym jako
Widzimy, że dokładność zmierzona przez OOB jest bardzo podobna do tej uzyskanej z zestawem testowym. Wynika stąd teoria, że dokładność OOB jest lepszą miarą, dzięki której można oceniać wydajność modelu, a nie tylko wynik. Jest to konsekwencja modeli workowania i nie można tego zrobić z innymi typami klasyfikatorów.
Obliczanie OOB przy użyciu różnych wskaźników
Tak, możesz to zrobić! Zależy to jednak od tego, jak dokładnie tworzony jest kod. Nie jestem pewien, w jaki sposób można włączyć OOB i AUC wszystkie razem z
cross_val_score
funkcją. Jeśli jednak ręcznie wykonujesz fałdy krzyżowe, możesz wykonać następujące czynności: algorytm losowych lasów w sklearn zapewnia funkcję decyzyjną OOB jakoKlasę można następnie uzyskać za pomocą
Następnie możemy obliczyć AUC za pomocą następującego
źródło
RandomForestClassifier
może zwrócić wynik OOB, który NIE jest dokładnością, a druga część twojej odpowiedzi stanowi bardzo dobrą wskazówkę, jak podejść do tego problemu. Muszę jednak podkreślić, że nie należy używać etykiet klas do obliczania AUC krzywej ROC; raczej prawdopodobieństwa klasowe należy stosować bezpośrednio. Tak więc poprawna definicja byłabypred_train = forest.oob_decision_function_[:, 1]
.