J'ai un data.frame avec 800 obs. de 40 variables, et j'aimerais utiliser l'analyse des composants principaux pour améliorer les résultats de ma prédiction (qui fonctionne jusqu'à présent le mieux avec Support Vector Machine sur une quinzaine de variables sélectionnées à la main).
Je comprends qu'un prcomp peut m'aider à améliorer mes prévisions, mais je ne sais pas comment utiliser les résultats de la fonction prcomp.
J'obtiens le résultat:
> PCAAnalysis <- prcomp(TrainTrainingData, scale.=TRUE)
> summary(PCAAnalysis)
Importance of components:
PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10 PC11 PC12 PC13 PC14
Standard deviation 1.7231 1.5802 1.3358 1.2542 1.1899 1.166 1.1249 1.1082 1.0888 1.0863 1.0805 1.0679 1.0568 1.0520
Proportion of Variance 0.0742 0.0624 0.0446 0.0393 0.0354 0.034 0.0316 0.0307 0.0296 0.0295 0.0292 0.0285 0.0279 0.0277
Cumulative Proportion 0.0742 0.1367 0.1813 0.2206 0.2560 0.290 0.3216 0.3523 0.3820 0.4115 0.4407 0.4692 0.4971 0.5248
PC15 PC16 PC17 PC18 PC19 PC20 PC21 PC22 PC23 PC24 PC25 PC26 PC27 PC28
Standard deviation 1.0419 1.0283 1.0170 1.0071 1.001 0.9923 0.9819 0.9691 0.9635 0.9451 0.9427 0.9238 0.9111 0.9073
Proportion of Variance 0.0271 0.0264 0.0259 0.0254 0.025 0.0246 0.0241 0.0235 0.0232 0.0223 0.0222 0.0213 0.0208 0.0206
Cumulative Proportion 0.5519 0.5783 0.6042 0.6296 0.655 0.6792 0.7033 0.7268 0.7500 0.7723 0.7945 0.8159 0.8366 0.8572
PC29 PC30 PC31 PC32 PC33 PC34 PC35 PC36 PC37 PC38
Standard deviation 0.8961 0.8825 0.8759 0.8617 0.8325 0.7643 0.7238 0.6704 0.60846 0.000000000000000765
Proportion of Variance 0.0201 0.0195 0.0192 0.0186 0.0173 0.0146 0.0131 0.0112 0.00926 0.000000000000000000
Cumulative Proportion 0.8773 0.8967 0.9159 0.9345 0.9518 0.9664 0.9795 0.9907 1.00000 1.000000000000000000
PC39 PC40
Standard deviation 0.000000000000000223 0.000000000000000223
Proportion of Variance 0.000000000000000000 0.000000000000000000
Cumulative Proportion 1.000000000000000000 1.000000000000000000
Je pensais que j'obtiendrais les paramètres les plus importants à utiliser, mais je ne trouve tout simplement pas ces informations. Tout ce que je vois, c'est l'écart type, etc. sur les PC. Mais comment utiliser cela pour la prédiction?
pls
(Partial Least Squares), qui a des outils pour la PCR ( Principal Component Regression ).Réponses:
Bien que je ne sois pas sûr de la nature de votre problème, je peux vous dire que j'ai utilisé l'ACP comme moyen d'extraire des motifs dominants dans un groupe de variables prédictives dans la construction ultérieure d'un modèle. Dans votre exemple, ceux-ci se trouveraient dans les principaux composants (PC)
PCAAnalysis$x
, et ils seraient basés sur la pondération des variables trouvées dansPCAAnalysis$rotation
. Un avantage de ce processus est que les PC sont orthogonaux, et donc vous supprimez les problèmes de multicolinéarité entre les prédicteurs du modèle. La seconde est que vous pourriez être en mesure d'identifier un plus petit sous-ensemble de PC qui captent la majorité de la variance de vos prédicteurs. Ces informations peuvent être trouvées danssummary(PCAAnalysis)
ou dansPCAAnalysis$sdev
. Enfin, si vous souhaitez utiliser un sous-ensemble de PC pour la prédiction, vous pouvez définir letol
paramètre dansprcomp
à un niveau supérieur pour supprimer les PC à la fin.Maintenant, vous pouvez "projeter" de nouvelles données sur la base de coordonnées PCA en utilisant la
predict.prcomp()
fonction. Puisque vous appelez votre ensemble de données un ensemble de données "d'apprentissage", il peut être judicieux de projeter ensuite un ensemble de données de validation sur votre base PCA pour le calcul de leurs coordonnées PC respectives. Vous trouverez ci-dessous un exemple d'ajustement d'une ACP à 4 mesures biométriques de différentes espèces d'iris (qui sont corrélées dans une certaine mesure). Par la suite, je projette les valeurs biométriques d'un nouvel ensemble de données de fleurs qui ont des combinaisons similaires de ces mesures pour chacune des trois espèces d'iris. Vous verrez sur le graphique final que leurs PC projetés se trouvent dans une zone similaire de l'intrigue que l'ensemble de données d'origine.Un exemple utilisant l'
iris
ensemble de données:la source
predict.prcomp
aide.Les informations de la commande summary () que vous avez jointe à la question vous permettent de voir, par exemple, la proportion de la variance capturée par chaque composant principal (Proportion de la variance). De plus, la proportion cumulée est calculée en sortie. Par exemple, vous devez disposer de 23 PC pour capturer 75% de la variance dans votre ensemble de données.
Ce ne sont certainement pas les informations que vous utilisez généralement comme entrée pour d'autres analyses. Au lieu de cela, ce dont vous avez généralement besoin, ce sont les données pivotées, qui sont enregistrées sous la forme «x» dans l'objet créé par prcomp.
Utiliser le code R comme exemple court.
Ensuite, vous pouvez utiliser les données dans le nouveau fichier pour d'autres analyses, par exemple, comme entrée dans SVM ou un modèle de régression. Voir également, par exemple, /programming/1805149/how-to-fit-a-linear-regression-model-with-two-principal-components-in-r pour plus d'informations.
la source
predict()
méthode pour les données de test. En utilisant l'exemple ci-dessus,predict(pr, USArrests)
retournera la même matrice quepr$x
. Pour les données de test, remplacez USarrests par le nom des données de test. Vous pouvez faire la même chose à la main, mais c'est plus facile, car les méthodes de prévision prennent automatiquement en charge la mise à l'échelle correcte de l'ensemble de données de test.predict()
utilise par défaut tous les composants. Cependant, vous pouvez limiter le nombre de composants renvoyés, par exemple, `predire (pr, USArrests) [, 1: 2]. Cela marcherait-il pour toi?predict()
ce que cela se fait automatiquement avec les paramètres initiaux avecprcomp()
?