Compare o R-quadrado de dois modelos diferentes da Random Forest

10

Estou usando o pacote randomForest no R para desenvolver um modelo de floresta aleatória para tentar explicar um resultado contínuo em um conjunto de dados "amplo" com mais preditores do que amostras.

Especificamente, estou ajustando um modelo de RF, permitindo que o procedimento selecione entre um conjunto de ~ 75 variáveis ​​preditivas que considero importantes.

Estou testando até que ponto esse modelo prevê o resultado real de um conjunto de testes reservado, usando a abordagem publicada aqui anteriormente , a saber,

... ou em R:

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

Mas agora eu tenho ~ 25 variáveis ​​preditoras adicionais que posso adicionar. Ao usar o conjunto de ~ 100 preditores, o R² é maior. Quero testar isso estatisticamente, em outras palavras, ao usar o conjunto de ~ 100 preditores, o modelo testa significativamente melhor nos dados de teste do que o modelo se encaixa usando ~ 75 preditores. Ou seja, é o R² de testar o ajuste do modelo de RF no conjunto de dados completo significativamente maior que o R² de testar o modelo de RF no conjunto de dados reduzido.

Isso é importante para eu testar, porque são dados piloto, e obter 25 preditores extras foi caro, e eu preciso saber se devo pagar para medir esses preditores em um estudo de acompanhamento maior.

Estou tentando pensar em algum tipo de abordagem de reamostragem / permutação, mas nada vem à mente.

Stephen Turner
fonte

Respostas:

8

Validação cruzada! Use a função de trem no cursor para ajustar seus 2 modelos. Use um valor de mtry (o mesmo para os dois modelos). Caret retornará uma estimativa re-amostrada de RMSE e .R2

Consulte a página 3 da vinheta de sinal de intercalação (também no manual de referência completo )

Zach
fonte
Concordo, exceto pela sua omissão de que o OP deve usar o quadrado R ajustado, pois é para isso que ele foi projetado. Os modelos têm o mesmo Y, mas diferentes conjuntos de preditores, portanto, o quadrado R ajustado é necessário para penalizar a diferença de graus de liberdade / complexidade do modelo. O outro problema que vejo é potencialmente um problema de tamanho de amostra; O OP exigiria um tamanho de amostra MASSIVO para ter qualquer tipo de esperança real de que isso não seja apenas um super ajuste, mesmo com o CV.
LSC
@LSC Eu diria que, se mantiver um conjunto de dados adicional (não usado para seleção), eles poderão usar o R2 sem ajuste, como o RMSE normalizado. Concordo que eles precisariam de um conjunto de dados bastante grande para fazer isso.
Zach
dados novos ou antigos, todos os demais constantes, colocar 100 termos em um modelo vs 25 terão um R-quadrado maior não ajustado quando comparado ao R-quadrado do modelo de previsão de 25. Isso é facilmente visto ao calcular a soma dos erros ao quadrado entre os dois (mais termos são SSE mais baixos, todos os demais são iguais). Acho que as pessoas geralmente esquecem que mais termos nunca diminuirão o quadrado R, mas se eles cheiram mal em relação ao seu valor, podem diminuir o quadrado R ajustado, o que é uma medida melhor a ser usada para procurar um retorno financeiro.
LSC
"mais termos nunca diminuirão R ao quadrado" <- Esta afirmação é falsa ao calcular R2 fora da amostra.
Zach
Como mencionei, estou apontando porque muitas pessoas que fazem essas perguntas não se lembram dessa idéia em primeiro lugar. Eu acho que entender por que isso é verdade na amostra e pode não conter novos dados é importante para entender o que e como algo é otimizado na equação original.
LSC
4

Concordo com Zach que a melhor idéia é validar cruzadamente os dois modelos e comparar os 2s, por exemplo, coletando valores de cada dobra e comparando os vetores resultantes com o teste de Wilcoxon (emparelhado para k-fold, não emparelhado aleatoriamente) CV).R2

A opção lateral é usar toda a seleção de recursos relevantes, o que indicaria quais atributos têm uma chance de serem significativamente úteis para classificação - assim, a intemperização desses atributos caros vale o preço. Isso pode ser feito, por exemplo, com um invólucro de RF, Boruta .

Comunidade
fonte
para um teste emparelhado, suponho que os 2 modelos se encaixem nas mesmas dobras? Para que as k linhas da matriz sejam as dobras e as duas colunas sejam o modelo 1 e o modelo 2?
B_Miner
@B_Miner Precisamente.
1

Você pode pensar em termos de significado prático, em vez de significado estatístico (ou ambos). Com dados suficientes, é possível encontrar coisas estatisticamente significativas que não terão impacto real no seu uso. Lembro-me de analisar um modelo uma vez em que as interações de 5 vias eram estatisticamente significativas, mas quando as previsões do modelo, incluindo tudo, até as interações de 5 vias foram comparadas às previsões de um modelo, incluindo apenas interações de 2 vias e efeitos principais , a maior diferença foi menos de 1 pessoa (a resposta foi número de pessoas e todos os valores interessantes estavam longe de 0). Portanto, a complexidade adicionada não valeu a pena. Portanto, observe as diferenças em suas previsões para ver se as diferenças são suficientes para justificar o custo extra, se não, então por que se preocupar em procurar a significância estatística? Se as diferenças forem grandes o suficiente para justificar o custo, se forem reais, eu recomendo as outras sugestões de uso da validação cruzada.

Greg Snow
fonte
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))

O método também pode ser estendido para trabalhar com validação cruzada (e não apenas com divisão de amostra, como mostrado acima).

Eric
fonte
0

Como você já está usando randomForestapós a validação cruzada, pode emitir o cálculo do ajuste escolhido dos valores de importância do preditor.

> 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
fonte
0

Vejo que essa pergunta foi feita há muito tempo; no entanto, nenhuma resposta aponta para as deficiências e mal-entendidos significativos da pergunta ainda.

Observe:

  1. Você declara que R ^ 2 = ESS / TSS = 1 - RSS / TSS. Isso é verdade apenas em um contexto linear. A igualdade TSS = RSS + ESS é verdadeira apenas na regressão linear com interceptação. Portanto, você não pode usar essas definições para florestas aleatórias de forma intercambiável. É por isso que RMSE e similares são funções de perda mais comuns.

  2. Mais importante para fins estatísticos: R ^ 2 segue uma distribuição desconhecida (também na configuração linear). Isso significa que testar uma hipótese com significância estatística usando R ^ 2 não é tão simples. A validação cruzada, como mencionado por Zach , é uma boa escolha.

Quanto à resposta do usuário88 : A validação cruzada com o teste de Wilcoxon é uma abordagem válida. Um artigo recente usa o teste de classificação assinado Wilcoxon e os testes de Friedman para comparação de diferentes métodos e algoritmos.

tobiaspk1
fonte