2015-01-24 1 views
5

Я запускаю randomForest в R с подробным режимом (do.trace), , и мне было интересно, каковы значения столбцов в сообщении. Я вижу, что ntree - это количество деревьев, а OOB - это% из образцов сумки, но что такое «1» и «2»?Объяснение подробного режима во время работы randomForest в R

> rf.m <- randomForest(x = X.train, y=as.factor(y.train), do.trace=10) 
ntree  OOB  1  2 
    10: 32.03% 15.60% 82.47% 
    20: 29.18% 10.51% 86.31% 
    30: 27.44% 7.47% 88.57% 
    40: 26.48% 5.29% 91.33% 
    50: 25.92% 4.35% 91.96% 
    .... 

ответ

9

Колонны 1 и 2 на выходе дают ошибку классификации для каждого класса. Значение OOB представляет собой средневзвешенное значение ошибок класса (взвешенное по количеству наблюдений в каждом классе).

Пример (адаптируя случайный пример леса со страницы справки):

# Keep every 100th tree in the trace 
set.seed(71) 
iris.rf <- randomForest(Species ~ ., data=iris, importance=TRUE, 
         proximity=TRUE, do.trace=100) 

ntree  OOB  1  2  3 
    100: 6.00% 0.00% 8.00% 10.00% 
    200: 5.33% 0.00% 6.00% 10.00% 
    300: 6.00% 0.00% 8.00% 10.00% 
    400: 4.67% 0.00% 8.00% 6.00% 
    500: 5.33% 0.00% 8.00% 8.00% 

Средневзвешенные ошибок класса для 100-дерева дает частоту ошибок OOB 6,0%, в точности, как сообщалось в следы выше. (prop.table возвращает долю наблюдений в каждой категории (каждый класс) видов). Мы умножаем этот элемент на ошибки класса для 100-го дерева, как указано в приведенных выше значениях трассировки, а затем суммируем, чтобы получить средневзвешенную ошибку по всем классам (ошибка OOB).

sum(prop.table(table(iris$Species)) * c(0, 0.08, 0.10)) 
[,1] 
[1,] 0.06 

Вы можете избежать необходимости использовать сумму, если вы используете матричное умножение, которое здесь эквивалентен дот/скалярный/внутренний продукт:

prop.table(table(iris$Species)) %*% c(0, 0.08, 0.10) 
Смежные вопросы