Je viens de revoir une conférence du cours Machine Learning sur Coursera. Dans la section où le professeur discute de l'ACP pour le prétraitement des données dans les applications d'apprentissage supervisé, il dit que l'ACP ne devrait être effectuée que sur les données de formation, puis la cartographie est utilisée pour transformer la validation croisée et les ensembles de tests. Voir aussi PCA et la division train / test .
Cependant, dans le caret
package R, les données de formation que vous transmettez à la train()
fonction sont déjà traitées par PCA. Ainsi , lorsque les préformes de l' algorithme k fois la validation croisée, le jeu de validation croisée a déjà été traitée avec APC via preProcess()
et predict()
et est en fait utilisé dans le PCA « raccord ».
Ma compréhension de la situation est-elle correcte? C'est-à-dire que la procédure de Caret pour la validation croisée avec l'ACP (ou en fait, avec toute méthode de redimensionnement / centrage) est "incorrecte" car le prétraitement des données est effectué sur l'ensemble de validation croisée ainsi que sur l'ensemble de formation? Et si oui, quel impact cela aurait-il sur les résultats?
la source
Réponses:
Je n'ai pas vu la conférence, je ne peux donc pas commenter ce qui a été dit.
Mon 0,02 $: Si vous souhaitez obtenir de bonnes estimations des performances à l'aide du rééchantillonnage, vous devez vraiment effectuer toutes les opérations pendant le rééchantillonnage au lieu de la précédente. Cela est vraiment vrai pour la sélection des fonctionnalités [1] ainsi que pour les opérations non triviales comme PCA. S'il ajoute de l'incertitude aux résultats, incluez-le dans le rééchantillonnage.
Pensez à la régression des principaux composants: l'ACP suivie d'une régression linéaire sur certains des composants. L'ACP estime les paramètres (avec bruit) et le nombre de composants doit également être choisi (des valeurs différentes donneront des résultats différents => plus de bruit).
Disons que nous avons utilisé un CV 10 fois avec le schéma 1:
ou schéma 2:
Il devrait être clair que la deuxième approche devrait produire des estimations d'erreur qui reflètent l'incertitude causée par l'ACP, la sélection du nombre de composants et la régression linéaire. En effet, le CV du premier schéma n'a aucune idée de ce qui l'a précédé.
Je suis coupable de ne pas toujours faire toutes les opérations avec rééchantillonnage, mais uniquement lorsque je ne me soucie pas vraiment des estimations de performances (ce qui est inhabituel).
Y a-t-il beaucoup de différence entre les deux régimes? Cela dépend des données et du prétraitement. Si vous ne faites que centrer et mettre à l'échelle, probablement pas. Si vous avez une tonne de données, probablement pas. À mesure que la taille de l'ensemble de formation diminue, le risque d'obtenir de mauvaises estimations augmente, surtout si n est proche de p.
Je peux affirmer avec certitude par expérience que le fait de ne pas inclure la sélection de fonctionnalités supervisée dans le rééchantillonnage est une très mauvaise idée (sans grands ensembles de formation). Je ne vois pas pourquoi le prétraitement serait immunisé contre cela (dans une certaine mesure).
@mchangun: Je pense que le nombre de composants est un paramètre de réglage et vous voudrez probablement le choisir à l'aide d'estimations de performances généralisables. Vous pouvez choisir automatiquement K de telle sorte qu'au moins X% de la variance soit expliquée et inclure ce processus dans le rééchantillonnage afin que nous tenions compte du bruit dans ce processus.
Max
[1] Ambroise, C. et McLachlan, G. (2002). Biais de sélection dans l'extraction de gènes sur la base de données d'expression génique de puces à ADN. Actes de l'Académie nationale des sciences, 99 (10), 6562–6566.
la source
Ne prétraitez pas les données avant d'exécuter la
train
fonction! Utilisez l'preProcess
argument de la fonction train et le prétraitement sera appliqué à chaque itération de rééchantillonnage.par exemple, ne faites pas ceci:
fais ça!
la source
pred <- predict(knnFit2, newdata)
oùnewdata
n'est pas mis à l'échelle. Caret est-il suffisamment intelligent pour savoir qu'il doit effectuer un prétraitementnewdata
avant de l'utiliser pour des prévisions?