Tworzysz „wynik pewności” z głosów w losowych lasach?

36

Chcę wyszkolić klasyfikatora, który będzie rozróżniał Type Ai Type Bprzedmioty przy pomocy dość dużego zestawu szkoleniowego złożonego z około 10 000 obiektów, z których około połowa jest, Type Aa połowa z nich jest Type B. Zestaw danych składa się ze 100 ciągłych elementów wyszczególniających właściwości fizyczne komórek (rozmiar, średni promień itp.). Wizualizacja danych na parach wykresów rozrzutu i wykresach gęstości mówi nam, że w wielu cechach zachodzi znaczące nakładanie się rozkładów komórek rakowych i normalnych.

Obecnie badam losowe lasy jako metodę klasyfikacji dla tego zestawu danych i zauważyłem kilka dobrych wyników. Za pomocą R losowe lasy są w stanie poprawnie sklasyfikować około 90% obiektów.

Jedną z rzeczy, które chcemy spróbować, jest stworzenie pewnego rodzaju „wskaźnika pewności”, który będzie określał, jak bardzo jesteśmy pewni klasyfikacji obiektów. Wiemy, że nasz klasyfikator nigdy nie będzie w 100% dokładny, a nawet jeśli zostanie osiągnięta wysoka dokładność prognoz, będziemy chcieli, aby przeszkoleni technicy zidentyfikowali, które obiekty są naprawdę Type Ai Type B. Zamiast więc dostarczać bezkompromisowe prognozy dla Type Alub Type B, chcemy przedstawić ocenę dla każdego obiektu, która opisuje, jak Alub Bobiekt jest. Na przykład, jeśli opracujemy wynik w zakresie od 0 do 10, wynik 0 może wskazywać, że obiekt jest bardzo podobny do Type Aobiektów, a wynik 10 wskazuje, że obiekt jest bardzo podobny Type B.

Myślałem, że przy pomocy głosów w losowych lasach opracuję taki wynik. Ponieważ klasyfikacja w losowych lasach odbywa się poprzez głosowanie większością głosów w lesie wygenerowanych drzew, zakładam, że obiekty, na które głosowało 100% drzew, Type Aróżniłyby się od obiektów, na które głosowało, powiedzmy, 51% drzew na być Type A.

Obecnie próbowałem ustalić arbitralny próg dla proporcji głosów, które obiekt musi otrzymać, aby zostać zaklasyfikowany jako Type Alub Type B, a jeśli próg nie zostanie przekroczony, zostanie zaklasyfikowany jako Uncertain. Na przykład, jeśli wymuszę warunek, że 80% lub więcej drzew musi zgodzić się na decyzję dotyczącą zaliczenia klasyfikacji, stwierdzę, że 99% przewidywań klasy jest poprawnych, ale około 40% obiektów jest binowanych jako Uncertain.

Czy miałoby zatem sens wykorzystanie informacji z głosowania w celu uzyskania pewności prognoz? A może myślę w złym kierunku?

Ialm
źródło
Upewnij się, że masz osobne zestawy danych dotyczących szkolenia i testowania. Upewnij się, że używasz zestawu testowego tak mało, jak to możliwe (najlepiej tylko raz).
Boris Gorelik,
@bgbg Korzystam ze schematu szkolenia / walidacji / testu w podziale 70/20/10. Trenuję model z 70% danych i dostrajam parametry w oparciu o wyniki z zestawu walidacyjnego 20%. Po dostrojeniu parametrów tych dwóch zestawów oceniam model na 10% zestawie testowym. Chociaż Breiman twierdzi, że wbudowany poziom błędu OOB powoduje, że oddzielny zestaw testów jest zbędny, obawiam się jego twierdzenia.
ialm

Odpowiedzi:

19

Ma to sens, a wszystkie implementacje losowych lasów, z którymi pracowałem (takich jak MATLAB), dostarczają również probabilistyczne wyniki, aby to zrobić.

Nie pracowałem z implementacją R, ale byłbym zszokowany, gdyby nie było prostego sposobu na uzyskanie miękkich wyników z głosów, a także trudnej decyzji.

Edycja: Rzuciłem okiem na R i przewiduj.randomForest również określa prawdopodobieństwo wyjściowe.

benhamner
źródło
1
Dziękuję za odpowiedź. Masz rację, stworzyłem skrypt, który wyświetli proporcję głosów, które otrzyma każdy obiekt. Zastanawiam się jednak, jak przydatne będą te głosy? Czy są jakieś kolejne kroki, które polecasz? Czy powinienem patrzeć na zmienność proporcji głosowania poprzez dodatkowe serie RF? Rozumiem, że RF ma element stochastyczny. Czy są jakieś diagnozy, na które powinienem spojrzeć?
ialm
3
@Jathanathan Możesz spróbować spojrzeć na fabułę przedstawiającą ułamek prawdziwego obiektu z jakiejś klasy jako funkcję ułamka głosów dla tej klasy z lasu. Pracowałem nad jednym problemem, który wymagał oceny pewności i okazało się, że udało mi się uzyskać bardzo ładną krzywą logistyczną.
@mbq Przepraszamy, czy możesz wyjaśnić, co przez to rozumiesz? Jestem zainteresowany twoją sugestią i zajmę się nią jutro!
ialm
1
Również zmienność RF pojawia się na etapie szkolenia, więc wielokrotne uruchomienie próbek testowych przez RF nie zmieni wyników. Chciałbym spojrzeć na AUC w porównaniu z liczbą drzew w RF, aby upewnić się, że masz wystarczająco dużo drzew, a następnie zoptymalizować minimalny parametr liści zgodnie z AUC.
benhamner
2
@ Jonathan Myślę, że mbq odnosi się do czegoś o nazwie kalibracja (chociaż mogą istnieć inne nazwy). Zobacz na przykład następujące pytania: Kalibracja klasyfikatora podwyższonego klasy , do czego odnoszą się „rzeczywiste wartości” w nadzorowanej klasyfikacji?
steffen
17

Jeśli używasz R, pakiet karetki uratuje cię przed ponownym wynalezieniem koła. Na przykład poniższy kod używa walidacji krzyżowej, aby wybrać parametry strojenia dla losowego modelu lasu, a następnie wyprowadza średnią i standardowe odchylenie dokładności dla każdego krotności walidacji krzyżowej. Na koniec oblicza prawdopodobieństwa klasowe dla modelu.

library(caret)
library(PerformanceAnalytics)
data(iris)

#Make a yes/no dataset
Dataset <- iris
Dataset$Class <- ifelse(Dataset$Species=='versicolor','Yes','No')
Dataset$Class  <- as.factor(Dataset$Class)
Dataset$Species<- NULL
chart.Correlation(Dataset[-5], col= Dataset$Class)

#Fit an RF model
model <- train(Class~.,Dataset,
                method='rf',TuneLength=3,
                trControl=trainControl(
                    method='cv',number=10,
                    classProbs = TRUE))
model$results

#Predict class probabilities (i.e. 'certainty' scores)
pred <- predict(model,iris,"prob")
head(pred)

Zaletą karetki jest to, że bardzo łatwo jest porównywać różne modele predykcyjne. Na przykład, jeśli chcesz spróbować SVM, można zastąpić tekst method='rf'z method='svmLinear'lub method='svmRadial'. Można również wybrać parametry strojenia w oparciu o AUC niż dokładnością przez dodanie odpowiedniego wiersza do parametru trainControl: summaryFunction=twoClassSummary.

Na koniec jest trochę kodu z pakietu PerformanceAnalytics chart.Correlation(Dataset[-5], col= Dataset$Class), który nie jest potrzebny do zbudowania modelu, ale zapewnia dobrą wizualizację twojego zestawu danych.

Zach
źródło
Sprawiasz, że jestem fanem pakietu Caret. Myślę, że będę utrzymywał drugi wątek R otwarty tylko po to, aby wypróbować różne metody klasyfikacji i zlecić samodzielne dostosowanie CV i parametrów oraz sprawdzenie, czy otrzymam jakiekolwiek porównywalne wyniki.
ialm
@ Jonathan miło to słyszeć! To wspaniały pakiet. Wypróbuj modelLookup()polecenie, aby uzyskać listę możliwych możliwości.
Zach
Ten probtyp predictjest również dostępny przy użyciu randomForestdo trenowania modelu (z użyciem lub bez użycia innych pakietów, takich jak caretlub PerformanceAnalytics).
Hack-R
2

Lasy losowe pakiet w R jest całkiem przyzwoity pakiet do dostania się do większych szczegółów o swojej analizy. Zapewnia ci głosy (jako część ułamkową lub surową) i oferuje wbudowaną zdolność do strojenia i krzyżowej weryfikacji, a nawet może dać ci więcej informacji na temat twoich funkcji (jeśli chcesz wiedzieć, które ze 100 są najważniejsze w analizie).

Jeśli już używasz tego pakietu, być może chcesz go bliżej przyjrzeć, a jeśli nie, to może go sprawdź.

użytkownik4673
źródło