Jak kontrolować koszty błędnej klasyfikacji w losowych lasach?

21

Czy można kontrolować koszt błędnej klasyfikacji w pakiecie R randomForest ?

W mojej własnej pracy fałszywe negatywy (np. Brak pomyłki, że dana osoba może mieć chorobę) są znacznie bardziej kosztowne niż fałszywie pozytywne. Pakiet rpart pozwala użytkownikowi kontrolować koszty błędnej klasyfikacji, określając macierz strat do różnej wagi błędnych klasyfikacji. Czy istnieje coś podobnego randomForest? Czy powinienem na przykład użyć classwtopcji kontroli kryterium Giniego?

użytkownik5944
źródło

Odpowiedzi:

8

Niezupełnie, jeśli nie przez ręczne wykonanie klonowania RF podczas pakowania rpartmodeli.

Niektóre opcje wynikają z faktu, że moc wyjściowa RF jest w rzeczywistości wynikiem ciągłym, a nie wyraźną decyzją, tj. Ułamkiem drzew, które głosowały na jakąś klasę. Można go wyodrębnić predict(rf_model,type="prob")i wykorzystać na przykład do utworzenia krzywej ROC, która ujawni lepszy próg niż 0,5 (który można później włączyć do treningu RF z cutoffparametrem).

classwt podejście również wydaje się słuszne, ale nie działa zbyt dobrze w praktyce - przejście między zrównoważoną prognozą a trywialnym rzutowaniem tej samej klasy, niezależnie od atrybutów, wydaje się być zbyt ostre, aby było użyteczne.


źródło
MBQ. Wielkie dzięki. (i) Krzywa ROC: W tym przypadku nie wymagam krzywej ROC, ponieważ mam własne priorytety dotyczące tego, jaka powinna być waga kosztów. (ii) classwt: Tak, stwierdziłem, że w praktyce i zgodnie z innymi użytkownikami wyniki nie są zgodne z oczekiwaniami. (iii) cutoff: Nie jestem cutoffpewien, jak wykorzystać w tym przypadku i chętnie przyjmę wszelkie dalsze porady.
user5944
3

Istnieje wiele sposobów uwzględnienia kosztów.
(1) Pobieranie próbek powyżej / poniżej dla każdego drzewa w workach (pobieranie warstwowe) jest najczęstszą metodą wprowadzania kosztów. zestaw danych celowo zaburzono równowagę.
(2) Ważenie. Nigdy nie działa Myślę, że jest to podkreślone w dokumentacji. Niektórzy twierdzą, że po prostu musisz rozważyć wszystkie etapy, w tym podział Gini i ostateczne głosowanie. Jeśli zadziała, będzie to trudna implementacja.
(3) Funkcja Metacost w Weka.
(4) Traktowanie losowego lasu jako probabilistycznego klasyfikatora i zmiana progu. Ta opcja najbardziej mi się podoba. Prawdopodobnie z powodu mojego braku wiedzy, ale mimo że algorytm może generować prawdopodobieństwa, nie ma dla mnie sensu traktować ich tak, jakby to był model probabilistyczny.

Ale jestem pewien, że istnieją dodatkowe podejścia.

Charles
źródło
3

Zaleca się, aby jeśli zmienna, którą próbujesz przewidzieć, nie wynosi 50% dla class 1i 50% dla class 2(jak większość przypadków), dostosuj cutoffparametr tak, aby reprezentował rzeczywistą wartość OOBpodsumowującą.

Na przykład,

randomForest(data=my_data, formula, ntree = 501, cutoff=c(.96,.04))

W tym przypadku prawdopodobieństwo o wartości jednego class 1jest .96jednocześnie posiadające wartość class 2jest .04.

W przeciwnym razie losowe lasy używają progu wynoszącego 0.5.

pablo_sci
źródło
1

Można uwzględnić costMatrixw randomForestsposób wyraźny przez parmsparametr:

library(randomForest)
costMatrix <- matrix(c(0,10,1,0), nrow=2)
mod_rf <- randomForest(outcome ~ ., data = train, ntree = 1000, parms = list(loss=costMatrix))
Siergiej Bushmanow
źródło
0

Możesz uwzględnić wrażliwość kosztów za pomocą sampsizefunkcji w randomForestpakiecie.

model1=randomForest(DependentVariable~., data=my_data, sampsize=c(100,20))

Zmieniaj liczby w (100,20)zależności od posiadanych danych i założeń / reguł biznesowych, z którymi pracujesz.

Potrzeba trochę prób i błędów, aby uzyskać macierz nieporozumień, która odzwierciedla koszty błędu klasyfikacji. Rzuć okiem na kryminalne prognozy ryzyka Richarda Berka : podejście oparte na uczeniu maszynowym , s. 1. 82

MH TING
źródło