randomForest та змінна важлива помилка?


10

Я не отримую різниці між rfobject$importanceі importance(rfobject)в стовпці MeanDecreaseAccuracy.

Приклад:

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

Я отримую різні значення MeanDecreaseAccuracy, але мають однаковий порядок значень Змінні ( fit$importanceяк і для importance(fit)):

  1. Пелюстка.Ширина

  2. Пелюстка.Довга

  3. Sepal.Length

  4. Sepal.Ширина

Але в інших наборах даних я інколи отримую різні замовлення. Може хтось пояснить, що тут відбувається? Це можливо помилка?


Редагувати (у відповідь на Мартіна О'Лірі )

Добре, дякую! Я помітив щось інше.

Переглянувши rfcv()функцію, я помітив рядок:

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

за допомогою цього рядка ми вибираємо перший стовпець, all.rf$importanceякий наводить нам порядок специфічних для класу (для першого фактору ) заходів, обчислених як середнє зменшення лише в точності. Це не завжди є таким же порядком, як середнє зменшення точності у всіх класах ( MeanDecreaseAccuracy). Не було б краще вибрати MeanDecreaseAccuracyабо MeanDecreaseGiniколонку, або краще використовувати функцію- importance()для масштабованих значень? Таким чином, у нас буде послідовно зменшена кількість предикторів, класифікованих за змінною важливістю (для всіх класів), а не лише ранжированих за змінною важливістю для першого класу.

Відповіді:


13

Ні, це не помилка. Значення, наведені в, не fit$importanceмають масштабу, тоді як значення, що задаються importance(fit), виражаються у вигляді стандартних відхилень (як задано fit$importanceSD). Зазвичай це більш значущий захід. Якщо ви хочете "сирих" значень, можете використовувати importance(fit, scale=FALSE).

Взагалі, дуже погана ідея покладатися на внутрішні деталі підходящого об'єкта, коли передбачена функція витяжки. Немає жодних гарантій щодо вмісту fit$importance- вони можуть суттєво змінитися від версії до версії без попередження. Ви завжди повинні використовувати функцію витяжки, коли вона надається.


Редагувати: Так, цей рядок rfcv()виглядає як помилка чи принаймні ненавмисна поведінка. Це насправді досить хороший приклад того, чому ви не повинні покладатися на зміст подібних речей fit$importance. Якщо придатність призначена для регресійного лісу, перший стовпець fit$importanceє %IncMSEеквівалентним importance(fit, type=1). Однак це не стосується випадку класифікації, де у вас є додаткові стовпці для кожного рівня факторів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.