R / caret: train et ensembles de test vs validation croisée?

9

Cela peut être peut-être une question stupide, mais lors de la génération d'un modèle avec caret et en utilisant quelque chose comme LOOCVou (plus précisément) LGOCV, quel est l'avantage de diviser les données en trains et ensembles de test si c'est essentiellement ce que l'étape de validation croisée fait de toute façon?

J'ai lu certaines des questions connexes et ils ont suggéré que certaines des méthodes de validation croisée (par exemple ce qui est décrit ici sur le site du curseur ) sont destinées à la sélection des fonctionnalités . Mais dans mon cas, j'utilise randomForest( method = "rf") et kernlab( method = svmRadial), qui ne sont pas répertoriés dans le groupe qui tente de purger les prédicteurs.

Donc, ma question est de savoir si j'utilise quelque chose comme cross_val <- trainControl(method = "LGOCV", p = 0.8), n'est-ce pas la même chose que la formation sur 80% de mes données, tester le modèle résultant sur les 20% restants, et le faire encore et encore pour avoir une idée de la modèle fonctionne?

Si oui, est-il nécessaire de diviser mes données en trains / ensembles de tests?

PS Je demande en partie pendant que je conduis des modèles sur des prototypes DOE générés empiriquement (pensez aux biens matériels où nous modifions les entrées, puis utilisons des méthodes de test pour mesurer divers attributs du prototype).

En tant que tel, je n'ai pas un énorme ensemble de données avec beaucoup de niveaux de prédicteurs qui se chevauchent à partir desquels nous modéliser - nous exécutons souvent un essai à chaque point d'intérêt du DOE car la génération de données est coûteuse dans ce cas. Ainsi, j'aimerais utiliser toutes les données que je peux pour un modèle précis, mais je voulais vérifier ici que je ne manque pas quelque chose d'évident et faire un mauvais modèle en ne divisant pas les choses.


Edit: En réponse à la question de @ topepo, je modélise les attributs mesurés physiquement d'un composé en fonction de l'ajustement des intrants chimiques de la formule. Je ne peux pas discuter de mon application réelle, mais je vais inventer un exemple basé sur la formulation de peinture intérieure au latex. J'exécute des expériences conçues où nous mélangeons 4-5 produits chimiques, peut-être jouer avec% de solides et un certain temps pour chauffer la solution de polymère pour ajuster le degré de polymérisation.

Nous pourrions alors mesurer la rhéologie, le poids moléculaire, la dureté du revêtement de peinture, la résistance à l'eau, etc.

Nous avons des répliques décentes de plusieurs variables, mais peu de vraies répliques dans le sens où chaque niveau DOE était exactement le même. L'ensemble de données total est d'environ 80 observations et peut-être 4-5 sont des répétitions exactes. Nous avons effectué 15 tests différents, et peut-être 5-6 d'entre eux ont été effectués pour chaque observation. Certaines réponses sont présentes pour 25 à 50% des données.

À partir d'ici, nous aimerions modéliser les effets de nos 7 prédicteurs sur les propriétés de sortie, puis optimiser pour cibler de nouveaux espaces de conception qui sont les plus susceptibles de donner les propriétés souhaitées.

(D'où ma question ICI . Une fois que j'aurai un modèle formé, ce serait bien de faire le "reverse" et d'introduire les réponses souhaitées pour obtenir la meilleure estimation des niveaux d'entrée possibles pour essayer ensuite).

Hendy
la source
L'ensemble de validation et l'ensemble de test sont deux choses différentes! Voir stats.stackexchange.com/questions/19048/… et en.wikipedia.org/wiki/Test_set
sashkello
@sashkello Merci pour cela. Cela peut probablement être fermé en double, et d'une manière ou d'une autre j'ai complètement raté cette question. Un élément manquant pourrait être: si je m'entraîne avec data_set1, que dois-je considérer comme l'étape effectuée par la LGOCVvalidation croisée? D'après ma lecture, je suppose que 1) caretitère les paramètres de réglage data_set1, puis 2) maintient ces paramètres fixes et 3) crée un "sous-modèle" en utilisant les paramètres de # 1 pour chaque p = 0.8échantillon data_set1et teste les prédictions sur les 0,2 restants pour évaluer la précision . Est-ce un résumé raisonnable?
Hendy
Un autre élément manquant: le fait de laisser un ensemble pour les tests aide-t-il à la précision du modèle? Il semble que cela donne juste un ensemble non biaisé pour de futurs tests. Si les données sont limitées et qu'il n'y a pas beaucoup de points de conception qui se chevauchent, ne suis-je pas mieux de m'entraîner avec l'ensemble complet et de compter sur la validation croisée pour une estimation de la précision?
Hendy
Avec une meilleure stratégie de recherche, celle-ci est plus utile: stats.stackexchange.com/questions/9357/… . En particulier, ceci "Je pense qu'un facteur limitant ici est la quantité de données dont vous disposez. La plupart du temps, nous ne voulons même pas diviser les données en partitions fixes, d'où CV." Je pense que cela arrive à ma question (qui est probablement spécifique à la nature limitée de mes données (seulement 80 observations). Semble-t-il comme un vote pour ne pas se séparer dans ces cas?
Hendy

Réponses:

7

Mes pensées générales:

Donc, lorsque vous évaluez différents modèles, vous pouvez les ajuster, essayer différents types de prétraitement, etc. jusqu'à ce que vous trouviez ce que vous pensez être un bon modèle. Le rééchantillonnage peut vous guider dans la bonne direction au cours de ce processus.

Cependant, il existe toujours un risque de sur-ajustement et les chances que cela se produise sont grandement influencées par la quantité de données (et de prédicteurs) dont vous disposez. Si vous avez un peu de données, il y a plusieurs façons de penser à cela:

  • Utilisez toutes les données pour la formation, car chaque point de données améliore considérablement la performance du modèle.
  • Mettez de côté un petit ensemble de test comme vérification finale des erreurs grossières dues à un sur-ajustement. Les chances de sur-ajustement avec une petite taille d'échantillons ne sont pas petites et augmentent avec le nombre d'échantillons.

Je tombe dans le deuxième camp mais le premier n'a pas tort du tout.

Si vous avez une tonne de données, cela n'a pas vraiment d'importance (à moins que vous n'ayez un petit taux d'événements).

Pour vous:

Vous avez un DOE. Le type de conception aiderait à répondre à la question. Essayez-vous d'interpoler entre des points de conception ou de prédire des points de conception qui n'ont pas été testés jusqu'à présent?

Vous en avez une réplique. Je suis tombé comme si la forêt aléatoire frappait un clou avec un marteau et pouvait entraîner un sur-ajustement. J'essaierais quelque chose de plus fluide comme un SVM ou un réseau neuronal (haletant).

Max

topepo
la source
J'ai ajouté une mise à jour pour vous ci-dessus. J'ai eu de jolies courbes (je suppose que c'est subjectif) avec method = "svmRadial". J'espère en évaluer d'autres, y compris method = neuralnet, bien que dans les tentatives passées, j'ai trouvé le réseau neuronal très sensible à `set.seed (). En bref, nous essayons de 1) mieux comprendre la relation entre les entrées / réponses multiples et 2) de faire les meilleures suppositions sur l'espace de conception le plus susceptible de produire les propriétés souhaitées afin que nous puissions exécuter de nouveaux DOE plus ciblés par rapport à un plus typique approche expansive / shotgun en termes de niveaux d'entrée min / max à essayer.
Hendy