Comparez le R au carré de deux modèles différents de forêt aléatoire

10

J'utilise le package randomForest dans R pour développer un modèle de forêt aléatoire pour essayer d'expliquer un résultat continu dans un ensemble de données "large" avec plus de prédicteurs que d'échantillons.

Plus précisément, j'adapte un modèle RF permettant à la procédure de sélectionner parmi un ensemble de ~ 75 variables prédictives qui, selon moi, sont importantes.

Je teste à quel point ce modèle prédit le résultat réel pour un ensemble de tests réservé, en utilisant l' approche publiée ici précédemment , à savoir,

... ou en R:

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

Mais maintenant, j'ai 25 variables de prédiction supplémentaires que je peux ajouter. Lorsque vous utilisez l'ensemble de ~ 100 prédicteurs, le R² est plus élevé. Je veux tester cela statistiquement, en d'autres termes, lorsque vous utilisez l'ensemble de ~ 100 prédicteurs, le modèle teste-t-il significativement mieux dans les données de test que l'ajustement du modèle en utilisant ~ 75 prédicteurs. C'est-à-dire que le R² du test du modèle RF ajusté sur l'ensemble de données complet est significativement plus élevé que le R² du test du modèle RF sur l'ensemble de données réduit.

C'est important pour moi de tester, car ce sont des données pilotes, et obtenir ces 25 prédicteurs supplémentaires était cher, et je dois savoir si je devrais payer pour mesurer ces prédicteurs dans une étude de suivi plus large.

J'essaie de penser à une sorte d'approche de rééchantillonnage / permutation, mais rien ne me vient à l'esprit.

Stephen Turner
la source

Réponses:

8

R2

Voir page 3 de la vignette d'insertion (également dans le manuel de référence complet )

Zach
la source
Je suis d'accord, sauf pour votre omission selon laquelle OP devrait utiliser le R au carré ajusté, car c'est pour cela qu'il est conçu. Les modèles ont les mêmes ensembles de prédicteurs Y mais différents, il est donc nécessaire d'ajuster le R au carré pour pénaliser la différence en degrés de liberté dépensés / complexité du modèle. L'autre problème que je vois est potentiellement un problème de taille d'échantillon; OP nécessiterait une taille d'échantillon MASSIVE pour avoir une sorte d'espoir réel que ce n'est pas seulement sur-ajusté, même avec CV.
LSC
@LSC Je dirais que si un ensemble de données supplémentaire est utilisé (non utilisé pour la sélection), ils pourraient utiliser R2 sans ajustement, comme son RMSE juste normalisé. Je suis d'accord qu'ils auraient besoin d'un assez grand ensemble de données pour ce faire.
Zach
les nouvelles données ou les anciennes, toutes choses étant constantes par ailleurs, mettre 100 termes dans un modèle contre 25 auront un R au carré non ajusté supérieur par rapport au R au carré du modèle à 25 prédicteurs. Cela se voit facilement lors du calcul de la somme des erreurs quadratiques entre les deux (plus de termes est inférieur SSE, tout le reste est le même). Je pense que les gens oublient souvent que plus de termes ne diminueront jamais le R au carré, mais s'ils piquent par rapport à leur valeur, ils peuvent diminuer le R au carré ajusté, ce qui est une meilleure mesure à utiliser pour examiner le rapport qualité-prix.
LSC
"plus de termes ne diminueront jamais le R au carré" <- Cette affirmation est fausse, lors du calcul de R2 hors échantillon.
Zach
Comme je l'ai mentionné, je le signale parce que beaucoup de gens qui posent ces questions ne se souviennent pas de cette idée en premier lieu. Je pense qu'il est important de comprendre pourquoi cela est vrai dans l'échantillon et ne peut pas conserver de nouvelles données pour comprendre quoi et comment quelque chose est optimisé dans l'équation d'origine.
LSC
4

R2

L'option latérale consiste à utiliser toutes les sélections de fonctionnalités pertinentes, ce qui vous dirait quels attributs ont une chance d'être significativement utiles pour la classification - ainsi, les attributs coûteux valent leur prix. Cela peut être fait par exemple avec un wrapper RF, Boruta .

Communauté
la source
pour un test en binôme, je suppose que les 2 modèles sont ajustés sur les mêmes plis? Alors que les k rangées du matrx sont les plis et les deux colonnes sont le modèle 1 et le modèle 2?
B_Miner
@B_Miner précisément.
1

Vous voudrez peut-être penser en termes de signification pratique plutôt que de signification statistique (ou les deux). Avec suffisamment de données, vous pouvez trouver des choses statistiquement significatives qui n'auront aucun impact réel sur votre utilisation. Je me souviens d'avoir analysé un modèle une fois où les interactions à 5 voies étaient statistiquement significatives, mais lorsque les prédictions du modèle comprenant tout jusqu'aux interactions à 5 voies ont été comparées aux prédictions d'un modèle comprenant uniquement des interactions à 2 voies et les effets principaux , la plus grande différence était inférieure à 1 personne (la réponse était le nombre de personnes et toutes les valeurs intéressantes étaient loin de 0). La complexité supplémentaire n'en valait donc pas la peine. Regardez donc les différences dans vos prévisions pour voir si les différences sont suffisantes pour justifier le coût supplémentaire, sinon, pourquoi s'embêter à chercher la signification statistique? Si les différences sont suffisamment importantes pour justifier le coût si elles sont réelles, j'appuie les autres suggestions d'utilisation de la validation croisée.

Greg Snow
la source
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))

La méthode peut également être étendue pour fonctionner dans le cadre de la validation croisée (et pas seulement de la répartition des échantillons comme indiqué ci-dessus).

Eric
la source
0

Comme vous l'utilisez déjà randomForestaprès la validation croisée, vous pouvez émettre le calcul de l'ajustement choisi des valeurs d'importance du prédicteur.

> 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
la source
0

Je vois que cette question a été posée il y a longtemps; cependant, aucune réponse n'indique encore les lacunes et les malentendus importants de la question.

Notez s'il vous plaît:

  1. Vous déclarez que R ^ 2 = ESS / TSS = 1 - RSS / TSS. Cela n'est vrai que dans un contexte linéaire. L'égalité TSS = RSS + ESS n'est vraie que dans la régression linéaire avec interception. Ainsi, vous ne pouvez pas utiliser ces définitions pour des forêts aléatoires de manière interchangeable. C'est pourquoi RMSE et similaires sont des fonctions de perte plus typiques.

  2. Plus important encore à des fins statistiques: R ^ 2 suit une distribution inconnue (également dans le cadre linéaire). Cela signifie que tester une hypothèse ayant une signification statistique en utilisant R ^ 2 n'est pas aussi simple. La validation croisée, comme l'a mentionné Zach , est un bon choix.

Quant à la réponse de l'utilisateur 88 : la validation croisée avec le test de Wilcoxon est une approche valide. Un article récent utilise le test des rangs signés de Wilcoxon et les tests de Friedman pour comparer différentes méthodes et algorithmes.

tobiaspk1
la source