Eu tenho um data.frame com 800 obs. de 40 variáveis e gostaria de usar a Análise de componentes principais para melhorar os resultados da minha previsão (que até agora está funcionando melhor com a Support Vector Machine em cerca de 15 variáveis escolhidas a dedo).
Entendo que um prcomp pode me ajudar a melhorar minhas previsões, mas não sei como usar os resultados da função prcomp.
Eu obtenho o resultado:
> 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
Pensei em obter os parâmetros mais importantes para usar, mas simplesmente não encontro essas informações. Tudo o que vejo são Desvio Padrão, etc., nos PCs. Mas como uso isso para previsão?
pls
(Mínimos Quadrados Parciais), que possui ferramentas para PCR ( Regressão de Componentes Principais ).Respostas:
Embora não tenha certeza da natureza do seu problema, posso dizer que usei o PCA como um meio de extrair padrões dominantes em um grupo de variáveis preditoras na construção posterior de um modelo. No seu exemplo, eles seriam encontrados nos principais componentes (PCs)
PCAAnalysis$x
e seriam baseados na ponderação das variáveis encontradas emPCAAnalysis$rotation
. Uma vantagem desse processo é que os PCs são ortogonais e, portanto, você remove problemas de multicolinearidade entre os preditores do modelo. A segunda é que você pode identificar um subconjunto menor de PCs que captura a maioria das variações em seus preditores. Esta informação pode ser encontrada emsummary(PCAAnalysis)
ou emPCAAnalysis$sdev
. Por fim, se você estiver interessado em usar um subconjunto dos PCs para previsão, poderá definir otol
parâmetro emprcomp
para um nível superior para remover os PCs à direita.Agora, você pode "projetar" novos dados na base de coordenadas do PCA usando a
predict.prcomp()
função Como você está chamando seu conjunto de dados de "treinamento", pode fazer sentido projetar um conjunto de dados de validação na base do PCA para o cálculo de suas respectivas coordenadas do PC. Abaixo está um exemplo de ajuste de um PCA para 4 medições biométricas de diferentes espécies de íris (que estão correlacionadas em algum grau). A seguir, projeto valores biométricos de um novo conjunto de dados de flores que possuem combinações semelhantes dessas medidas para cada uma das três espécies de íris. Você verá no gráfico final que os PCs projetados estão em uma área semelhante ao gráfico que o conjunto de dados original.Um exemplo usando o
iris
conjunto de dados:fonte
predict.prcomp
ajuda.As informações do comando summary () que você anexou à pergunta permitem ver, por exemplo, a proporção da variação que cada componente principal captura (Proporção da variação). Além disso, a proporção cumulativa é calculada na saída. Por exemplo, você precisa ter 23 PCs para capturar 75% da variação no seu conjunto de dados.
Essa certamente não é a informação que você normalmente usa como entrada para análises adicionais. Em vez disso, o que você normalmente precisa são os dados rotacionados, que são salvos como 'x' no objeto criado pelo prcomp.
Usando o código R como um pequeno exemplo.
Em seguida, você pode usar os dados no newdat para análises adicionais, por exemplo, como entrada no SVM ou em algum modelo de regressão. Além disso, consulte, por exemplo, /programming/1805149/how-to-fit-a-linear-regression-model-with-two-principal-components-in-r para obter mais informações.
fonte
predict()
método para os dados de teste. Usando o exemplo acima,predict(pr, USArrests)
retornará a mesma matriz quepr$x
. Para dados de teste, substitua USarrests pelo nome dos dados de teste. Você pode fazer o mesmo manualmente, mas isso é mais fácil, pois os métodos de previsão cuidam automaticamente do dimensionamento correto do conjunto de dados de teste.predict()
usa por padrão todos os componentes. No entanto, você pode limitar o número de componentes retornados, por exemplo, `predict (pr, USArrests) [, 1: 2]. Isso funcionaria para você?predict()
feito automaticamente com os parâmetros iniciaisprcomp()
?