randomForest ve değişken önemi hatası?


10

MeanDecreaseAccuracy sütununda rfobject$importanceve importance(rfobject)arasındaki farkı alamıyorum.

Misal:

> data("iris")
> fit <- randomForest(Species~., data=iris, importance=TRUE)
> fit$importance
                  setosa  versicolor   virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 0.027078501 0.019418330 0.040497602           0.02898837         9.173648
Sepal.Width  0.008553449 0.001962036 0.006951771           0.00575489         2.472105
Petal.Length 0.313303381 0.291818815 0.280981959           0.29216790        41.284869
Petal.Width  0.349686983 0.318527008 0.270975757           0.31054451        46.323415
> importance(fit)
               setosa versicolor virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 1.277324   1.632586  1.758101            1.2233029         9.173648
Sepal.Width  1.007943   0.252736  1.014141            0.6293145         2.472105
Petal.Length 3.685513   4.434083  4.133621            2.5139980        41.284869
Petal.Width  3.896375   4.421567  4.385642            2.5371353        46.323415
> 

Farklı MeanDecreaseAccuracy değerleri alıyorum ama önem değişkenleri için aynı sıraya sahibim ( fit$importancehem de için importance(fit)):

  1. Petal.Width

  2. Petal.Length

  3. Sepal.Length

  4. Sepal.Width

Ancak diğer veri kümelerinde bazen farklı siparişler alırım. Birisi burada neler olduğunu açıklayabilir mi? Bu muhtemelen bir hata mı?


Düzenleme ( Martin O'Leary'ye yanıt olarak )

Tamam teşekkürler! Başka bir şey fark ettim.

İşleve göz atarak rfcv()çizgiyi fark ettim:

impvar <- (1:p)[order(all.rf$importance[, 1], decreasing = TRUE)]

bu satırla, ilk sütununu all.rf$importancebize sadece doğrulukta ortalama azalma olarak hesaplanan sınıfa özgü ( ilk faktör için ) ölçümlerin sırasını veren seçeriz. Bu her zaman tüm sınıflar ( MeanDecreaseAccuracy) üzerindeki doğruluktaki ortalama düşüşle aynı sıraya sahip değildir . Ya MeanDecreaseAccuracyda MeanDecreaseGinisütunu seçmek ya da importance()ölçeklenmiş değerler için- işlevini kullanmak daha iyi olmaz mıydı? Bu nedenle, birinci sınıf için değişken öneme sahip (tüm sınıflar üzerinde) sıralı olarak azaltılmış sayıda göstergeye sahip olacağız.

Yanıtlar:


13

Hayır, bu bir hata değil. Burada verilen değerler fit$importanceölçeklendirilmezken, verilen değerler importance(fit)standart sapmalar (olarak verildiği gibi fit$importanceSD) cinsinden ifade edilir . Bu genellikle daha anlamlı bir önlemdir. "Ham" değerleri istiyorsanız kullanabilirsiniz importance(fit, scale=FALSE).

Genel olarak, bir çıkarıcı işlevi sağlandığında, uygun bir nesnenin iç ayrıntılarına güvenmek çok kötü bir fikirdir. İçeriği konusunda herhangi bir garanti yoktur fit$importance- önceden bildirilmeksizin sürümden sürüme büyük ölçüde değişebilirler. Çıkarıcı işlevini her zaman sağlandığında kullanmalısınız.


Düzenleme: Evet, bu satır rfcv()bir hata veya en azından istenmeyen davranış gibi görünüyor. Aslında, bu tür şeylerin içeriğine neden güvenmemeniz gerektiğine dair oldukça iyi bir örnek fit$importance. Fit bir gerileme orman içinse, ilk sütun fit$importanceolan %IncMSE, eşdeğer importance(fit, type=1). Ancak, bu, her faktör düzeyi için fazladan sütunların bulunduğu sınıflandırma durumunda geçerli değildir.

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.