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
xja
Aby zaimplementować OOB w sklearn, musisz określić go podczas tworzenia obiektu Losowe lasy jako
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100, oob_score = True)
Następnie możemy wytrenować model
forest.fit(X_train, y_train)
print('Score: ', forest.score(X_train, y_train))
Wynik: 0,979921928817
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
print(forest.oob_score_)
0,86453272101
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
print('Score: ', forest.score(X_test, y_test))
Wynik: 0,86517733935
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 jako
print(forest.oob_decision_function_)
Klasę można następnie uzyskać za pomocą
from sklearn import metrics
pred_train = np.argmax(forest.oob_decision_function_,axis=1)
Następnie możemy obliczyć AUC za pomocą następującego
metrics.roc_auc_score(y_train, pred_train)
0,86217157846471204