Tengo un data.frame con 800 obs. de 40 variables, y me gustaría utilizar el Análisis de componentes principales para mejorar los resultados de mi predicción (que hasta ahora funciona mejor con Support Vector Machine en unas 15 variables seleccionadas a mano).
Entiendo que un prcomp puede ayudarme a mejorar mis predicciones, pero no sé cómo usar los resultados de la función prcomp.
Obtengo el 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
Pensé que obtendría los parámetros más importantes para usar, pero no encuentro esta información. Todo lo que veo es la desviación estándar, etc. en las PC. Pero, ¿cómo uso esto para la predicción?
pls
(mínimos cuadrados parciales), que tiene herramientas para PCR ( regresión de componentes principales ).Respuestas:
Si bien no estoy seguro de la naturaleza de su problema, puedo decirle que he usado PCA como un medio para extraer patrones dominantes en un grupo de variables predictoras en la construcción posterior de un modelo. En su ejemplo, estos se encontrarían en los componentes principales (PC)
PCAAnalysis$x
y se basarían en la ponderación de las variables encontradas enPCAAnalysis$rotation
. Una ventaja de este proceso es que las PC son ortogonales, por lo que elimina los problemas de multicolinealidad entre los predictores del modelo. El segundo, es que puede identificar un subconjunto más pequeño de PC que capturan la mayoría de las variaciones en sus predictores. Esta información se puede encontrar ensummary(PCAAnalysis)
o enPCAAnalysis$sdev
. Finalmente, si está interesado en usar un subconjunto de las PC para la predicción, puede configurar eltol
parámetro enprcomp
a un nivel superior para eliminar las PC finales.Ahora, puede "proyectar" nuevos datos en la base de coordenadas PCA utilizando la
predict.prcomp()
función. Como está llamando a su conjunto de datos un conjunto de datos de "entrenamiento", esto podría tener sentido luego proyectar un conjunto de datos de validación en su PCA para el cálculo de sus coordenadas de PC respectivas. A continuación se muestra un ejemplo de ajuste de un PCA a 4 mediciones biométricas de diferentes especies de iris (que están correlacionadas en algún grado). Después de esto, proyecto valores biométricos de un nuevo conjunto de datos de flores que tienen combinaciones similares de estas medidas para cada una de las tres especies de iris. Verá en el gráfico final que sus PC proyectadas se encuentran en un área similar de la trama que el conjunto de datos original.Un ejemplo usando el
iris
conjunto de datos:fuente
predict.prcomp
ayuda.La información del comando resumen () que ha adjuntado a la pregunta le permite ver, por ejemplo, la proporción de la varianza que captura cada componente principal (Proporción de varianza). Además, la proporción acumulativa se calcula a la salida. Por ejemplo, necesita tener 23 PC para capturar el 75% de la variación en su conjunto de datos.
Ciertamente, esta no es la información que normalmente usa como entrada para análisis posteriores. Por el contrario, lo que generalmente necesita son los datos rotados, que se guardan como 'x' en el objeto creado por prcomp.
Usando el código R como un breve ejemplo.
Luego puede usar los datos en el newdat para análisis adicionales, por ejemplo, como entrada a SVM o algún modelo de regresión. Además, consulte, por ejemplo, /programming/1805149/how-to-fit-a-linear-regression-model-with-two-principal-components-in-r para obtener más información.
fuente
predict()
método para los datos de prueba. Usando el ejemplo anterior,predict(pr, USArrests)
devolverá la misma matriz quepr$x
. Para los datos de prueba, reemplace los arrestos estadounidenses con el nombre de los datos de prueba. Puede hacer lo mismo a mano, pero esto es más fácil, ya que los métodos de predicción se ocupan automáticamente de la escala correcta del conjunto de datos de prueba.predict()
utiliza por defecto todos los componentes. Sin embargo, puede limitar el número de componentes que se devuelven, por ejemplo, `predic (pr, USArrests) [, 1: 2]. ¿Eso funcionaría para ti?predict()
eso automáticamente dados los parámetros iniciales conprcomp()
?