Genel olarak, sınıflandırıcıların performansı doğruluk kullanılarak karşılaştırılır, bu doğru sınıflandırılmış örnek sayısının toplam örnek sayısına bölünmesiyle elde edilen bir ölçüdür. Bununla birlikte, eğitim verilerinden, topluluk öğrenme veya torbalama tekniklerini kullanırken sınıflandırıcıdan beklenen hatanın daha iyi bir yaklaşımını elde edebiliriz.
Torbadan çıktı hatası
xben
Oob'u sklearn içine uygulamak için Rastgele Ormanlar nesnesini oluştururken bunu belirtmeniz gerekir.
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100, oob_score = True)
Sonra modeli eğitebiliriz
forest.fit(X_train, y_train)
print('Score: ', forest.score(X_train, y_train))
Puan: 0.979921928817
Beklendiği gibi, eğitim setini değerlendirirken modelin doğruluğu çok yüksektir. Bununla birlikte, bu anlamsızdır, çünkü verilerinizi çok fazla sığdırabilirsiniz ve bu nedenle modeliniz saçmadır. Bununla birlikte, çanta dışı puanı şu şekilde kullanabiliriz:
print(forest.oob_score_)
,86453272101
Bu, eğitim setindeki örneklerimizi sadece atlandıkları ağaçlar kullanılarak değerlendirirken doğruluktur. Şimdi test setindeki puanı şu şekilde hesaplayalım:
print('Score: ', forest.score(X_test, y_test))
Puan: 0.86517733935
Oob tarafından ölçülen doğruluğun test seti ile elde edilene çok benzediğini görüyoruz. Bu nedenle, oob doğruluğunun, modelinizin performansını sadece skordan ziyade değerlendirmek için daha iyi bir metrik olduğu teorisi ile izlenir. Bu torbalama modellerinin bir sonucudur ve diğer tip sınıflandırıcılarla yapılamaz.
Oob'u farklı metrikler kullanarak hesaplama
Evet, bunu yapabilirsiniz! Ancak, kodunuzun tam olarak nasıl yapılandırıldığına bağlıdır. Oob ve AUC'yi cross_val_score
işlevle birlikte nasıl ekleyeceğinizden emin değilim . Ancak, çapraz doğrulama kıvrımlarını manuel olarak yapıyorsanız aşağıdakileri yapabilirsiniz, sklearn'deki rasgele orman algoritması size oob'un karar işlevini şu şekilde sağlar:
print(forest.oob_decision_function_)
Daha sonra sınıf,
from sklearn import metrics
pred_train = np.argmax(forest.oob_decision_function_,axis=1)
Sonra aşağıdakileri kullanarak AUC'yi hesaplayabiliriz
metrics.roc_auc_score(y_train, pred_train)
,86217157846471204