Почему параметр важности влияет на производительность Random Forest в R? - PullRequest
7 голосов
/ 03 августа 2020

При использовании случайных лесов в R я столкнулся со следующей ситуацией:

library(randomForest)
set.seed(42)
data(iris)
rf_noImportance <- randomForest(Species~.,data=iris,ntree=100,importance=F)
print(table(predict(rf_noImportance),iris$Species))

Вывод:

            setosa versicolor virginica
 setosa         50          0         0
 versicolor      0         47         3
 virginica       0          3        47

и

library(randomForest)
set.seed(42)
data(iris)  
rf_importance <- randomForest(Species~.,data=iris,ntree=100,importance=T)
print(table(predict(rf_importance),iris$Species))

Вывод:

            setosa versicolor virginica
 setosa         50          0         0
 versicolor      0         47         4
 virginica       0          3        46

В первом примере я установил importance = FALSE, а во втором - TRUE. Насколько я понимаю, это не должно повлиять на итоговый прогноз. Также нет указаний на такое поведение в документации .

Согласно потоку с перекрестной проверкой Влияют ли близость или важность на прогнозы случайного леса? , флаг важности не должен влиять на прогнозы, но это явно влияет на приведенный выше пример.

Так почему же параметр важности метода randomForest влияет на производительность модели?

1 Ответ

7 голосов
/ 18 августа 2020

Это хороший пример для демонстрации пределов воспроизводимости ; вкратце:

Исправление случайного начального числа не делает результаты сопоставимыми, если эксперименты вызывают генератор случайных чисел по-разному.

Давайте посмотрим, почему это здесь так ...

Все исследования воспроизводимости основаны на сильном неявном предположении: при прочих равных ; если изменение между двумя экспериментами опровергает это предположение, мы не можем ожидать воспроизводимости в смысле детерминизма c, который вы ищете здесь (мы, конечно, все еще можем ожидать воспроизводимости в смысле статистический , но проблема здесь не в этом).

Разница между двумя представленными здесь случаями (вычисление важности функции или нет) очень тонкая; Чтобы понять, почему это на самом деле нарушает изложенный выше принцип, мы должны немного покопаться как в документации, так и в исходном коде.

Документация РФ importance функция уже предоставляет сильную подсказку (выделено мной):

Вот определения мер важности переменных. Первая мера вычисляется из перестановки данных OOB [...] Затем то же самое делается после перестановки каждой переменной-предиктора.

Возможно, вы уже стал подозревать; такие перестановки данных обычно выполняются в случайном смысле, следовательно, потенциально вызывая генератор случайных чисел (ГСЧ) для одного дополнительного процесса, когда мы используем importance=TRUE, который отсутствует в случае importance=FALSE.

Другими словами: если в случае importance=TRUE ГСЧ задействован способом, который отсутствует в случае importance=FALSE, то с первого раза, когда такое происходит в программе, два случая перестают быть детерминированно сопоставимо, независимо от обычного случайного начального числа.

На данный момент это может быть сильным намеком, но это все еще только предположение; в конце концов, и в принципе, перестановки могут выполняться детерминированно, то есть без привлечения каких-либо случайных процессов (и, следовательно, ГСЧ). Где дымящееся ружье?

Оказывается, что дымящееся ружье действительно существует, оно скрыто в исходном коде C, используемом пакетом randomForest R; вот соответствующая часть C функции permuteOOB:

/* Permute tp */
    last = nOOB;
    for (i = 0; i < nOOB; ++i) {
        k = (int) last * unif_rand();
        tmp = tp[last - 1];
        tp[last - 1] = tp[k];
        tp[k] = tmp;
        last--;
    }

, где мы можем ясно видеть, как функция unif_rand() (т.е. ГСЧ) вызывается в строке # 4 фрагмента ( здесь в исходном коде), в методе, вызываемом только тогда, когда мы запрашиваем importance=TRUE, а не в противоположном случае.

Возможно, и учитывая факт что RF - это алгоритм, в котором случайность (и, следовательно, использование RNG) поступает из слишком большого количества точек, это должно быть достаточным доказательством того, почему два представленных вами случая действительно не должны быть идентичными , поскольку различное использование ГСЧ приводит к расхождению реальных результатов. С другой стороны, разница в одну единственную ошибочную классификацию среди 150 образцов должна обеспечить достаточную уверенность в том, что эти два случая все еще статистически одинаковы. Также должно быть очевидно, что тонкая проблема реализации здесь (т.е. участие ГСЧ) не нарушает ожидания того, что два результата должны теоретически быть равными.

...