En primer lugar, sé que el uso de PCA para la selección de características no es un verdadero enfoque, sin embargo, he encontrado algunos artículos que utilizan PCA para la selección de características y quiero imitarlos. Estoy teniendo algunos problemas para conseguir la lógica real detrás de estos artículos. Aquí usted puede encontrar los enlaces de los artículos mencionados a continuación;
https://personal.utdallas.edu/~jiezhang/Journals/JIE_2017_AE_short_term_wind_forecasting.pdf https://doi.org/10.1016/j.neucom.2014.09.090
Supongamos que dispongo de cinco variables diferentes (características) para pronosticar el resultado. Son la velocidad del viento, la temperatura, la humedad, la presión y la dirección del viento.
dat.sample = data.frame(windspeed = rnorm(100, mean = 10, sd = 2),
temp = rnorm(100, mean = 20, sd = 2),
humid = rnorm(100, mean = 80, sd = 5),
press = rnorm(100, mean = 950, sd = 10),
winddir = rnorm(100,mean = 180, sd = 5))
Ahora vamos a escalar y centrar los datos para asegurar que tienen una desviación estándar de 1 y una media de 0 para cada variable.
library(caret)
preproc = preProcess(dat.sample, method = c("center","scale"))
dat.sample.cs = predict(preproc, dat.sample)
#Ensuring the standart deviation is 1 and mean 0 before proceeding with PCA.
apply(dat.sample.cs, 2, function(x) {c(sd(x),round(mean(x),3))})
El PCA se aplica a los datos escalados y centrados con la función prcomp de R. Tras aplicar el ACP, se utiliza la biblioteca factoextra para obtener los valores propios de cada componente principal (CP) y la contribución de cada variable a cada CP.
library(factoextra)
get_eigenvalue(pca)
eigenvalue variance.percent cumulative.variance.percent
Dim.1 1.2263264 24.52653 24.52653
Dim.2 1.1581302 23.16260 47.68913
Dim.3 0.9905302 19.81060 67.49974
Dim.4 0.8372833 16.74567 84.24540
Dim.5 0.7877299 15.75460 100.00000
Se observa que, si bien la PC1 representa el ~24,5 por ciento de la varianza total de todas las PC, también pueden verse otros porcentajes de varianza. Ahora, me gustaría ver la contribución de cada variable a cada PC.
pca.var = get_pca_var(pca)
(contrib = pca.var$contrib)
Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
windspeed 5.2483398 0.71103782 91.6450906 1.535375 0.8601568
temp 39.4126852 8.99578568 0.9641489 8.337931 42.2894495
humid 43.0894490 0.03033891 1.1556426 42.025891 13.6986782
press 0.1220664 55.14999755 0.2033069 14.220377 30.3042517
winddir 12.1274594 35.11284004 6.0318111 33.880426 12.8474639
Ahora bien, está claro que mientras que la máxima contribución al PC1 procede de la humedad; la presión, la velocidad del viento, la humedad y la temperatura son las variables que más contribuyen del PC2 al PC5 respectivamente (las contribuciones se han asociado directamente a la importancia de las características). Aquí vienen mis preguntas;
-
Suponiendo que los primeros PC sean suficientes para representar los datos, ¿cómo se puede hacer una selección de características utilizando esta información? ¿Está bien utilizar las primeras variables que más contribuyen a cada PC dentro de los primeros n (n se elige 4 aquí) PC seleccionados? Por ejemplo, en el ejemplo anterior, ¿deberían elegirse las características de humedad, presión, velocidad del viento y humedad? También significa que tener sólo 3 variables ya que la humedad se selecciona dos veces.
-
¿Cómo puedo obtener las contribuciones totales de cada variable como en el artículo citado anteriormente? Ya que obtuvimos la importancia de cada característica para cada PC individual, ¿cómo puedo obtener las contribuciones totales de cada característica? ¿Está bien tomar la media ponderada de cada característica en todos los ordenadores o en los ordenadores seleccionados (que son 1:4 en este ejemplo)? Las ponderaciones serán el porcentaje de varianza de cada PC. En resumen; me gustaría obtener una tabla como la de este artículo y que se puede ver a continuación.
Lo que me confunde en esta tabla es el nombre de la misma. Dice así: Índices de contribución de los componentes principales. Aquí, cada característica se menciona como componente principal. No sé si han utilizado las contribuciones de sólo PC1 o PCs enteros y no está del todo claro cómo calcularon esta tabla en el artículo. Aquí puedes encontrar la sección relacionada del método PCA para la selección de características en el artículo.
¿Me estoy perdiendo algo? ¿Cómo puedo obtener una tabla así?