Czy powinienem wybrać regresor lub klasyfikator Random Forest?

11

Dopasowuję zestaw danych do binarnej klasy docelowej przy losowym lesie. W Pythonie mogę to zrobić przez randomforestclassifier lub randomforestregressor.

Mogę uzyskać klasyfikację bezpośrednio z randomforestclassifier lub mogę najpierw uruchomić randomforestregressor i odzyskać zestaw oszacowanych wyników (wartość ciągła). Następnie mogę znaleźć wartość graniczną, aby uzyskać przewidywane klasy z zestawu wyników. Obie metody mogą osiągnąć ten sam cel (tj. Przewidzieć klasy dla danych testowych).

Ja też to widzę

randomforestclassifier.predict_proba(X_test)[:,1]) 

jest różny od

randomforestregressor.predict(X_test)

Chcę tylko potwierdzić, że obie metody są prawidłowe, a która z nich jest lepsza w przypadkowej aplikacji w lesie?

LUSAQX
źródło
1
Moją natychmiastową reakcją jest to, że powinieneś użyć klasyfikatora, ponieważ właśnie po to jest on zbudowany, ale nie jestem w 100% pewien, że to robi dużą różnicę. Korzystanie z regresora byłoby jak regresja liniowa zamiast regresji logistycznej - działa, ale w wielu sytuacjach nie jest tak dobre. Może uda mi się znaleźć właściwą odpowiedź, ale nie na jakiś dzień.
Peter Ellis,

Odpowiedzi:

7

Użyj klasyfikatora. Nie, oba nie są ważne.

Po pierwsze, naprawdę zachęcam do zapoznania się z tematem Regresja a klasyfikacja. Ponieważ używanie ML bez wiedzy o tym da złe wyniki, których nie zdasz sobie sprawy. A to dość niebezpieczne ... ( to trochę jak pytanie, w którą stronę powinieneś trzymać broń, czy to nie ma znaczenia )

To, czy użyjesz klasyfikatora, czy regresora, zależy tylko od rodzaju rozwiązywanego problemu. Masz problem z klasyfikacją binarną , więc użyj klasyfikatora.

Mógłbym najpierw uruchomić randomforestregressor i odzyskać zestaw szacunkowych prawdopodobieństw.

NIE. Nie otrzymujesz prawdopodobieństwa z regresji. Próbuje po prostu „ekstrapolować” podane wartości (w tym przypadku tylko 0 i 1). Oznacza to, że wartości powyżej 1 lub poniżej 0 są całkowicie poprawne jako wynik regresji, ponieważ nie oczekuje się tylko dwóch dyskretnych wartości jako wyniku (to się nazywa klasyfikacja !), Ale wartości ciągłe.

Jeśli chcesz mieć „prawdopodobieństwa” ( pamiętaj, że nie muszą to być dobrze skalibrowane prawdopodobieństwa ), aby pewien punkt należał do określonej klasy, wytrenuj klasyfikator (aby uczy się klasyfikować dane), a następnie użyj .predict_proba (), która następnie przewiduje prawdopodobieństwo.

Wystarczy wspomnieć o tym tutaj: .predict vs. .predict_proba (dla klasyfikatora!)
.Predict po prostu bierze wyjście .predict_proba i zmienia wszystko na 0 poniżej pewnego progu (zwykle 0,5) odpowiednio na 1 powyżej tego progu.

Uwaga: jasne , wewnętrznie są one takie same, z wyjątkiem „ostatniej warstwy” itd.! Mimo to patrz na nich (lub lepiej na problem, który rozwiązują) jako zupełnie inny!

Mayou36
źródło