Rastgele orman için OOB ve konfüzyon matrisi nasıl yorumlanır?


35

Rastgele bir orman modeli çalıştırmak için birinden bir R betiği aldım. Bazı çalışan verileriyle değiştirdim ve çalıştırdım. Gönüllü ayrılıkları tahmin etmeye çalışıyoruz.

İşte bazı ek bilgiler: bu bir sınıflandırma modelidir 0 = çalışan kaldı, 1 = çalışan sonlandı, şu anda sadece bir düzine yordayıcı değişkenine bakıyoruz, veriler "dengesiz" ifadesiyle 7’deki kayıtların 7’yi oluşturduğu ayarlanan toplam kaydın% 'si.

Modeli çeşitli mtry ve ntree seçimleriyle yaptım ancak aşağıya yerleştim. OOB% 6.8 olduğunu düşünüyorum, ancak karışma matrisi terimler için farklı bir hikaye anlatıyor gibi görünüyor çünkü hata oranı% 92,79'da oldukça yüksek çünkü bu modeli kullanamayacağımı ve kullanamayacağımı varsaydığım için doğru muyum? terimleri tahmin etmek için yüksek hata oranı? veya RF'yi kullanmak ve terimleri tahmin etmek için daha küçük bir hata oranı almak için yapabileceğim bir şey var mı?

 FOREST_model <- randomForest(theFormula, data=trainset, mtry=3, ntree=500, importance=TRUE, do.trace=100)
ntree      OOB      1      2
  100:   6.97%  0.47% 92.79%
  200:   6.87%  0.36% 92.79%
  300:   6.82%  0.33% 92.55%
  400:   6.80%  0.29% 92.79%
  500:   6.80%  0.29% 92.79%
> print(FOREST_model)

Call:
 randomForest(formula = theFormula, data = trainset, mtry = 3,      ntree = 500, importance = TRUE, do.trace = 100) 
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 3

        OOB estimate of  error rate: 6.8%
Confusion matrix:
     0  1 class.error
0 5476 16 0.002913328
1  386 30 0.927884615
> nrow(trainset)
[1] 5908

Yanıtlar:


20

Karışıklık matrisi oyların kesilmesiyle belirlenen belirli bir noktada hesaplanır. İhtiyaçlarınıza bağlı olarak, yani daha iyi hassasiyet (yanlış pozitifleri azalt) veya daha iyi hassasiyet (yanlış negatifleri azalt) farklı bir kesim tercih edebilirsiniz.

Bu amaçla, (i) bir ROC eğrisi , (ii) bir geri çağırma hassasiyeti ve (iii) amaçlarınıza en uygun kesimi seçmek için bir kalibrasyon eğrisi çizmenizi öneririm . Tüm bu kolayca 2 Aşağıdaki fonksiyonları kullanılarak çizilebilir ROCR R kütüphanesi (aynı zamanda geçerli CRAN ):

pred.obj <- prediction(predictions, labels,...)
performance(pred.obj, measure, ...)

Örneğin:

rf <- randomForest (x,y,...);
OOB.votes <- predict (rf,x,type="prob");
OOB.pred <- OOB.votes[,2];

pred.obj <- prediction (OOB.pred,y);

RP.perf <- performance(pred.obj, "rec","prec");
plot (RP.perf);

ROC.perf <- performance(pred.obj, "fpr","tpr");
plot (ROC.perf);

plot  (RP.perf@alpha.values[[1]],RP.perf@x.values[[1]]);
lines (RP.perf@alpha.values[[1]],RP.perf@y.values[[1]]);
lines (ROC.perf@alpha.values[[1]],ROC.perf@x.values[[1]]);

Cevabınızla ilgileniyorum, paylaştığınız kodla çizim yaptım. Bana önerdiğin arsa hakkında biraz detay bulmak için bana biraz kaynak verir misin? veya nasıl yorumlanacağına dair birkaç cümle yazacak. şimdiden çok teşekkürler.
MKS,

Size yukarıda belirtilen ROC eğrisi girişine ve burada belirtilen diğer girişlere başlamanızı öneririm .
Itamar

Cevap, oldukça eğri bir veri setinde karar ağacının sınırlandırılmasını doğrudan ele almamaktadır.
SmallChess

19

Kümeniz keskin bir şekilde dengesizdir - RF bu senaryoda genellikle başarısız olur (yani yalnızca daha büyük sınıfı iyi tahmin eder).

"0" sınıfını yalnızca "1" sınıfıyla aynı boyutta olacak şekilde örnekleyerek veya classwtparametre ile oynayarak kümenizi dengelemeyi denemelisiniz .


1
Bir classwtparametre olmasına rağmen , henüz paketin R. Per Link'tekirandomForest() işlevinde uygulandığını sanmıyorum . Daha önce kullandın mı? Farklı değerlerle denedim, ancak varsayılanla aynı sonuçları aldım . randomForestclasswt=NULL
Zhubarb 23:15

9

Karışıklık matrisinize göre, 5,908 veri noktanız var ve bunların büyük çoğunluğu 0 tür ('çalışan kaldı'). Sınıflandırıcı bu nedenle, bir örneğin diğer sınıfa ait olduğu kesin olmadıkça, "tembel" olmaktan ve çoğunluk sınıfını seçmekle uzaklaşabilir. Genel hata oranınızın ~% 7 olduğunu ve bunun 1. Sınıf örneklerin yüzdesine oldukça yakın olduğunu unutmayın!

Birkaç seçeneğin var:

  • Kabaca dengelenmiş sınıflara sahip olana kadar Class0 örneklerini atın. Optimal temsili bir altkümenin nasıl seçileceğine dair literatür var mı bilmiyorum (belki başka biri tartılabilir mi?), Ancak örnekleri rastgele bırakarak başlayabilirsiniz. subsetTest etmek için bu önemsiz hale getirmesi gereken randomForest öğesine bir argüman iletebilirsiniz .

  • Sınıf0'ın orantısız sayısını telafi etmek için kayıp fonksiyonunuzu / sınıf ağırlıklarınızı ayarlayın. Temelde, sınıflandırıcının Class1 örneğini Class0 örneğinden daha Sınıf1 bir örneğe göre yanlış sınıflandırmasını sağlamak istersiniz. Başlamak için Class0 = 1 / 0.07 ~ = 14x Class1'i denemek mantıklı olabilir, ancak bunu iş taleplerinize göre ayarlamak isteyebilirsiniz (bir tür hata ne kadar kötü). Bence classwtparametre burada aradığınız şey.

  • Ağaçların eğitim verilerinde her iki sınıftan da örnekler aldığınızdan emin olmak için tabakalı örneklemeyi kullanın. Ağaçlarınızdan bazılarının genelleme performansları için yeterince zayıf davranacak olan yalnızca Class0 verileriyle ilgili eğitilmiş olmaları mümkündür. strataArgümanı kontrol et .


Baskın olan sınıftan rastgele seçim yapmak mantıklı geliyor. Eşit olmaları gerekmiyor: 1: 5'lik bir oran bile bir gelişme olmalı.
Itamar

@ Itmar, kesinlikle ilk deneyeceğim şey bu. Ancak, tuttuğunuz örneklerin daha büyük veri kümelerini temsil etmesini sağlamanın bir yolu olması gerektiği gibi görünüyor.
Matt Krause,

1
Bir seçenek, PCA'yı (ana bileşen analizi) daha büyük sette çalıştırmak, noktaları birinci ana bileşene göre kümelemek ve her kümeden bir örnek almak olabilir.
Itamar
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.