Сравните R-квадрат из двух разных моделей Random Forest

10

Я использую пакет randomForest в R для разработки модели случайного леса, чтобы попытаться объяснить непрерывный результат в «широком» наборе данных с большим количеством предикторов, чем выборок.

В частности, я подгоняю одну модель RF, позволяющую процедуре выбрать из набора ~ 75 переменных предиктора, которые я считаю важными.

Я проверяю, насколько хорошо эта модель предсказывает фактический результат для зарезервированного набора тестирования, используя подход, опубликованный здесь ранее , а именно:

... или в R:

1 - sum((y-predicted)^2)/sum((y-mean(y))^2)

Но теперь у меня есть дополнительные ~ 25 предикторных переменных, которые я могу добавить. При использовании набора ~ 100 предикторов R² выше. Я хочу проверить это статистически, иными словами, при использовании набора из ~ 100 предикторов модель значительно лучше тестирует данные, чем модель, подходящая с использованием ~ 75 предикторов. То есть, R2 при тестировании модели RF подходит для полного набора данных значительно выше, чем R² при тестировании модели RF на сокращенном наборе данных.

Это важно для меня, чтобы проверить, потому что это пилотные данные, и получить эти 25 дополнительных предикторов было дорого, и мне нужно знать, должен ли я платить за измерение этих предикторов в более широком последующем исследовании.

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

Стивен Тернер
источник

Ответы:

8

R2

См. Стр. 3 виньетки каретки (также в полном справочном руководстве )

Zach
источник
Я согласен, за исключением вашего упущения, что OP должен использовать R-квадрат с поправкой, так как это то, для чего он предназначен. Модели имеют одинаковый Y, но разные наборы предикторов, поэтому необходимо скорректировать R-квадрат, чтобы штрафовать за разницу в потраченных степенях свободы / сложности модели. Другая проблема, которую я вижу, - это проблема размера выборки; OP потребует МАССИВНОГО размера выборки, чтобы иметь реальную надежду, что это не просто переоснащение, даже с CV.
LSC
@LSC Я бы сказал, что, если у него есть дополнительный набор данных (не используется для выбора), они могли бы использовать R2 без корректировки, так как это только нормализованный RMSE. Я согласен, что для этого им понадобится довольно большой набор данных.
Зак
новые данные или старые, все остальные константы, помещающие 100 членов в модель против 25, будут иметь более высокий нескорректированный R-квадрат по сравнению с R-квадратом из модели 25 предикторов. Это легко увидеть при вычислении суммы квадратов ошибок между двумя (больше терминов - меньше SSE, все остальное одинаково). Я думаю, что люди часто забывают, что большее количество терминов никогда не уменьшит R-квадрат, но если они воняют по отношению к их значению, они могут уменьшить скорректированный R-квадрат, что является лучшей мерой, которую можно использовать, чтобы посмотреть на отдачу от доллара.
LSC
«больше условий никогда не уменьшит R-квадрат» <- Это утверждение неверно, если вычислять R2 вне выборки.
Зак
Как я уже говорил, я указываю на это, потому что многие люди, задающие эти вопросы, вообще не помнят эту идею. Я думаю, что понимание того, почему это верно для выборки и может не содержать новых данных, важно для понимания того, что и как оптимизируется в исходном уравнении.
LSC
4

R2

Дополнительный вариант заключается в том, чтобы использовать все релевантные возможности выбора, что бы указывало на то, какие атрибуты могут быть значительно полезны для классификации - таким образом, эти дорогие атрибуты стоят своей цены. Это можно сделать, например, с помощью RF-обертки Boruta .

Сообщество
источник
для парного теста, я полагаю, что две модели подходят на одинаковые сгибы? Так что k строк матрицы - это сгибы, а два столбца - модель 1 и модель 2?
B_Miner
@B_Miner Точно.
1

Вы можете думать с точки зрения практической значимости, а не статистической значимости (или оба). С достаточным количеством данных вы можете найти статистически значимые вещи, которые не окажут реального влияния на ваше использование. Я помню, как однажды анализировал модель, в которой 5-сторонние взаимодействия были статистически значимыми, но когда прогнозы из модели, включающие все до 5-сторонних взаимодействий, сравнивались с прогнозами из модели, включающими только 2-сторонние взаимодействия и основные эффекты самая большая разница была менее 1 человека (ответом было количество людей, и все интересные значения были вдали от 0). Таким образом, сложность не стоила того. Итак, посмотрите на различия в ваших прогнозах, чтобы увидеть, достаточно ли этих различий, чтобы оправдать дополнительные расходы, если нет, то зачем вообще искать статистическую значимость? Если различия достаточно велики, чтобы оправдать стоимость, если они реальны, то я поддерживаю другие предположения о перекрестной проверке.

Грег Сноу
источник
1

R2

library(randomForest)
data(iris)
set.seed(42)

# split the data into training and testing sets
index <- 1:nrow(iris)
trainindex <- sample(index, trunc(length(index)/2))
trainset <- iris[trainindex, ]
testset <- iris[-trainindex, ]

# with species
model1 <- randomForest(Sepal.Length ~ Sepal.Width + Petal.Length +
   Petal.Width + Species, data = trainset)
# without species
model2 <- randomForest(Sepal.Length ~ Sepal.Width + Petal.Length + 
   Petal.Width, data = trainset)

pred1 <- predict(model1, testset[, -1])
pred2 <- predict(model2, testset[, -1])

y <- testset[, 1]
n <- length(y)

# psi is the mean squared prediction error (MSPE) estimate
# sigma2 is the estimate of the variance of the MSPE
psi1 <- mean((y - pred1)^2)
sigma21 <- 1/n * var((y - pred1)^2) 
# 95% CI:
c(psi1 - 1.96 * sqrt(sigma21), psi1, psi1 + 1.96 * sqrt(sigma21))

psi2 <- mean((y - pred2)^2)
sigma22 <- 1/n * var((y - pred2)^2) 
# 95% CI:
c(psi2 - 1.96 * sqrt(sigma22), psi2, psi2 + 1.96 * sqrt(sigma22))

Этот метод также может быть расширен для работы в рамках перекрестной проверки (а не только разбиения выборки, как показано выше).

Эрик
источник
0

Поскольку вы уже используете randomForestпосле перекрестной проверки, возможно, вы выберете вычисление выбранного соответствия значений важности предиктора.

> require(randomForest)
> rf.fit = randomForest(Species~.,data=iris,importance=TRUE)
> rf.fit$importance
                  setosa   versicolor   virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 0.036340893  0.021013369 0.032345037          0.030708732         9.444598
Sepal.Width  0.005399468 -0.002131412 0.007499143          0.003577089         2.046650
Petal.Length 0.319872296  0.297426025 0.290278930          0.299795555        42.494972
Petal.Width  0.343995456  0.309455331 0.277644128          0.307843300        45.286720
mrbcuda
источник
0

Я вижу, что этот вопрос был задан давно; однако ни один ответ не указывает на существенные недостатки и недоразумения в этом вопросе.

Пожалуйста, обратите внимание:

  1. Вы утверждаете, что R ^ 2 = ESS / TSS = 1 - RSS / TSS. Это верно только в линейном контексте. Равенство TSS = RSS + ESS выполняется только в линейной регрессии с перехватом. Таким образом, вы не можете использовать эти определения для случайных лесов взаимозаменяемо. Вот почему RMSE и аналогичные являются более типичными функциями потерь.

  2. Что более важно для статистических целей: R ^ 2 следует за неизвестным распределением (также в линейной установке). Это означает, что проверка гипотезы со статистической значимостью с использованием R ^ 2 не так проста. Перекрестная проверка, как упомянул Зак , является хорошим выбором.

Что касается ответа пользователя 88 : перекрестная проверка с помощью критерия Уилкоксона является допустимым подходом. В недавней статье для сравнения различных методов и алгоритмов используются критерий Уилкоксона со знаковыми рангами и тесты Фридмана.

tobiaspk1
источник