In generale, le prestazioni dei classificatori vengono confrontate usando l'accuratezza, questa è una misura del numero di istanze correttamente classificate diviso per il numero totale di istanze. Tuttavia, dai dati di addestramento possiamo ottenere una migliore approssimazione dell'errore atteso dal nostro classificatore quando utilizziamo tecniche di apprendimento o insaccamento di ensemble.
Errore esaurito
Questa metrica è l'accuratezza degli esempi usando tutti gli alberi nell'insieme di foreste casuali per i quali è stato omesso durante l'allenamento. Quindi in qualche modo si comporta come un'istanza di semi-test. Puoi avere un'idea di quanto bene il tuo classificatore possa generalizzare usando questa metrica.xi
Per implementare oob in sklearn è necessario specificarlo quando si crea l'oggetto Random Forests come
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100, oob_score = True)
Quindi possiamo addestrare il modello
forest.fit(X_train, y_train)
print('Score: ', forest.score(X_train, y_train))
Punteggio: 0.979921928817
Come previsto, l'accuratezza del modello durante la valutazione del set di addestramento è molto elevata. Tuttavia, questo è insignificante perché si può benissimo sovrastimare i dati e quindi il modello è spazzatura. Tuttavia, possiamo usare il punteggio out-of-bag come
print(forest.oob_score_)
,86453272101
Questa è l'accuratezza durante la valutazione delle nostre istanze nel set di addestramento utilizzando solo gli alberi per i quali sono stati omessi. Ora calcoliamo il punteggio sul set di test come
print('Score: ', forest.score(X_test, y_test))
Punteggio: 0,86517733935
Vediamo che l'accuratezza misurata da oob è molto simile a quella ottenuta con il set di test. Ne consegue quindi la teoria secondo cui l'accuratezza del oob è una metrica migliore in base alla quale valutare le prestazioni del modello piuttosto che solo il punteggio. Questa è una conseguenza dei modelli di insaccamento e non può essere eseguita con altri tipi di classificatori.
Calcolo di oob utilizzando metriche diverse
Si, puoi fare questo! Tuttavia, dipende da come è strutturato esattamente il tuo codice. Non sono sicuro di come sia possibile includere il piano di cottura e l'AUC insieme alla cross_val_score
funzione. Tuttavia, se si eseguono manualmente le pieghe di convalida incrociata, è possibile effettuare le seguenti operazioni, l'algoritmo di foreste casuali in sklearn fornisce la funzione decisionale di oob come
print(forest.oob_decision_function_)
La classe può quindi essere ottenuta usando
from sklearn import metrics
pred_train = np.argmax(forest.oob_decision_function_,axis=1)
Quindi possiamo calcolare l'AUC usando quanto segue
metrics.roc_auc_score(y_train, pred_train)
,86217157846471204