1 votos

PCA para la selección de características y cálculo de la contribución total de cada una de ellas

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;

  1. 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.

  2. ¿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.

Desired table from the article

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.

PCA feature selection section of the article

¿Me estoy perdiendo algo? ¿Cómo puedo obtener una tabla así?

1voto

user21770 Puntos 6

Como esto era demasiado largo para un comentario, lo publicaré como respuesta, aunque quizá no sea una respuesta adecuada. Según tengo entendido, al utilizar PCA se pierde la conexión con las variables originales. Lo que se obtiene son nuevas características que explican mejor la varianza total.

Cada una de estas nuevas características es una combinación lineal de las variables originales. CR_i y CC_i miden la contribución de cada una de estas nuevas características a la varianza. Tal vez están haciendo algo así como mirar a los pesos de cada una de las variables originales en las combinaciones lineales que dan PC1, PC2 y así sucesivamente. Supongo que no hay suficientes detalles para saberlo.

Por cierto, tu ejemplo de juguete no es un buen caso de uso de PCA. Después de reescalar y centrar, las columnas de datos son casi i.i.d. extraídas de una normal estándar. Todas estas variables serán casi ortogonales, por lo que PCA sólo le dará los ejes de coordenadas más o menos (todos los componentes contribuirán por igual a la varianza y también están alineados con las variables originales aproximadamente). De hecho, en el límite de la muestra grande, las PC no serían identificables individualmente.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X