2015-01-13 3 views
8

Я использовал RandomForest для проблемы регрессии. Я использовал importance(rf,type=1), чтобы получить% IncMSE для переменных, а один из них имеет отрицательный% IncMSE. Означает ли это, что эта переменная плохо для модели? Я искал в Интернете, чтобы получить ответы, но я не нашел четкого. Я также нашел что-то странное в резюме модели (прилагается ниже), похоже, что только одно дерево использовали, хотя я определил ntrees, как 800.Что означает отрицательный% IncMSE в пакете RandomForest?

модель:

rf<-randomForest(var1~va2+var3+..+var35,data=d7depo,ntree=800,keep.forest=FALSE, importance=TRUE) 

summary(rf) 
       Length Class Mode  
call    6 -none- call  
type    1 -none- character 
predicted  26917 -none- numeric 
mse    800 -none- numeric 
rsq    800 -none- numeric 
oob.times  26917 -none- numeric 
importance   70 -none- numeric 
importanceSD  35 -none- numeric 
localImportance  0 -none- NULL  
proximity   0 -none- NULL  
ntree    1 -none- numeric 
mtry    1 -none- numeric 
forest    0 -none- NULL  
coefs    0 -none- NULL  
y    26917 -none- numeric 
test    0 -none- NULL  
inbag    0 -none- NULL  
terms    3 terms call 

ответ

20

Вопрос 1 - почему ntree показать 1?:

summary(rf) показывает длину объектов, включенных в вашу переменную rf. Это означает, что rf$ntree имеет длину 1. Если вы печатаете на консоли rf$tree вы увидите, что он показывает 800.

Вопрос 2 - это отрицательное% IncMSE показывают «плохие» переменную?

IncMSE:
Как это рассчитывается это путем вычисления MSE всей модели на начальном этапе. Назовем это MSEmod. После этого для каждой из переменных (столбцы в вашем наборе данных) значения случайным образом перетасовываются (переставляются), так что создается «плохая» переменная и вычисляется новый MSE. То есть представьте себе, что за один столбец у вас были ряды 1,2,3,4,5. После перестановки они в конечном итоге будут 4,3,1,2,5 в случайном порядке. После перестановки (все остальные столбцы остаются точно такими же, поскольку мы хотим изучить значение col1's), вычисляется новый MSE модели, назовем ее MSEcol1 (аналогичным образом у вас будет MSEcol2, MSEcol3, но давайте продолжим это просто и только дело с MSEcol1 здесь). Мы ожидаем, что, поскольку вторая MSE была создана с использованием переменной полностью случайной, MSEcol1 будет выше MSEmod (чем выше MSE, тем хуже). Поэтому, когда мы принимаем разницу между двумя MSEcol1 - MSEmod, мы обычно ожидаем положительное число. В вашем случае отрицательное число показывает, что случайная переменная работала лучше, что показывает, что, вероятно, переменная не является достаточно прогностической, т. Е. Не имеет значения.

Имейте в виду, что это описание, которое я вам дал, это высокий уровень, в действительности два значения MSE масштабируются и вычисляется процентная разница. Но история высокого уровня такова.

В виде алгоритма:

  1. Вычисление модели MSE
  2. Для каждой переменной в модели:
    • переставлять переменной
    • Вычислить новую модель MSE в соответствии с переменной перестановки
    • Возьмите разницу между моделью MSE и новой моделью MSE
  3. Составьте результаты в список
  4. Значение переменных по величине в соответствии со значением% IncMSE. Чем больше значение, тем лучше

Надеюсь, теперь это ясно!

+0

Большое спасибо LyzandeR за подробный и понятный ответ, Cheers, Ron – mql4beginner

+1

Рад помочь Рону :). Если вы хотите копать глубже, вы можете посмотреть [здесь] (http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm). Это от самого Бреймана (изобретателя случайных лесов), и он точно объясняет, как они работают на простом английском языке без (много) математических формул. Это как раз ссылка на rf-пакет, используемый для реализации. – LyzandeR

+0

Спасибо, я проверю это. – mql4beginner