randomForest 및 변수 중요도 버그?


10

rfobject$importanceimportance(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. 길이

  4. Sepal.Width

그러나 다른 데이터 세트에서 때로는 다른 순서를 얻습니다. 누군가 여기서 무슨 일이 일어나고 있는지 설명 할 수 있습니까? 이것은 버그일까요?


편집 ( 마틴 O'Leary 에 대한 응답 )

괜찮 감사! 나는 다른 것을 알아 차렸다.

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). 그러나 이는 각 요인 수준에 대한 추가 열이있는 분류 사례에는 적용되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.