RandomForestClassifier OOB puanlama yöntemi


16

Scikit-learn'daki rastgele orman uygulaması, torba dışı örneklerle genelleme hatasını tahmin etmek için puanlama yöntemi olarak ortalama doğruluk kullanıyor mu? Belgelerde bu belirtilmemiştir, ancak score () yöntemi ortalama doğruluğu rapor eder.

Dengesiz bir veri kümem var ve ızgara aramasında puanlama ölçütüm olarak AUC of ROC kullanıyorum. Sınıflandırıcıya OOB örnekleri üzerinde de aynı puanlama yöntemini kullanmasını söylemenin bir yolu var mı?


Oob_score parametre RandomForestClassifier sınıfına istediğini yapmaz?
Pierre

AFAIK, oob_scoredoğruluğunu rapor et. Yine de kaynak koduna bakmak gerekir.
darXider

Izgara aramanızla hangi parametreyi tahmin ediyorsunuz?
JahKnows

^ Üzgünüm, ama şimdi gerçekten hatırlamıyorum! Bu soruyu 1.5 yıl önce sordum.
darXider

Yanıtlar:


14

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_scoreiş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


4
Teşekkürler! OOB sürecinin rastgele ormanlarda nasıl çalıştığının farkındayım. Özellikle RandomForestClassifier, DOĞRU OLMAYAN bir OOB skoru döndürüp döndüremeyeceğini soruyordum ve cevabınızın ikinci kısmı bu soruna nasıl yaklaşılacağı konusunda çok iyi bir ipucu veriyor. Ancak, vurgulamak gerekir ki ROC eğrisinin AUC hesaplamak için sınıf etiketleri kullanmamalısınız; sınıf olasılıkları doğrudan kullanılmalıdır. Yani, doğru tanım olurdu pred_train = forest.oob_decision_function_[:, 1].
darXider

@darXider Forest.oob_decision_function_.shape [0] == X_train.shape [0] olduğundan, örnek sayısından daha az olması gereken == OOB örneği sayısı olmasını beklediğimden bu gölgeli değil X_train? Ayrıca, şahsen ben bunu yapmak isteyen diğerleri için, mantık hesaplamak ilgilendi, bunun yerine pred_train = forest.oob_decision_function_ olması gerektiğini düşünüyorum.
Sander Vanden Hautte
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.