¿Qué debo usar para reducir los atributos en mi conjunto de datos, PCA o algoritmos de selección de características?

Como señalan otras respuestas, depende del conjunto de datos. Pero, en general, mi consejo sería que nunca use PCA para reducir la dimensionalidad . No entiendo por qué es tan popular (¿probablemente se enseñe en algunos de los famosos cursos en línea de ciencia de datos?). Raramente vería que los principales científicos de datos lo usen. Nunca lo ves en las soluciones ganadoras de las competencias de Kaggle (a veces se usa para diseñar características adicionales pero no para reducir la dimensionalidad).

La razón es simple: desordena los datos. A menudo tiene variables en los datos que contienen fuertes señales predictivas y algunas que no. PCA no puede distinguirlos. Todo lo que hace es reconocer combinaciones lineales de las variables que tienen una alta varianza y combinaciones que no. Esto puede no tener correlación con la variable independiente que se va a predecir. Sus variables malas pueden tener una varianza muy alta, lo que resulta en pesos más altos en los componentes principales. Esto mata el poder predictivo de las variables útiles que tienen poca varianza, ya que se combinan con variables inútiles.

El único lugar donde me sentiría cómodo usando PCA es si todas las variables en el conjunto de datos son generadas por el mismo proceso, tienen la misma distribución (preferiblemente Normal) y tienen un poder predictivo similar. Todavía tengo que encontrar un conjunto de datos que cumpla con todas estas condiciones.

Recomendaría la selección de características sobre PCA cada vez. La eliminación de las malas características mejora el rendimiento y el tiempo de entrenamiento del modelo. Hay dos métodos que uso para esto:

  1. Eliminación recursiva de características: la idea es entrenar primero un modelo en todas las características, eliminar una característica a la vez y ver cuál ofrece la mejor mejora en las métricas de evaluación. Esto puede llevar mucho tiempo, por lo que las personas generalmente usan modelos simples como la regresión lineal / logística para hacer esto. Scikit-learn tiene una implementación simple para esto en Python sklearn.feature_selection.RFE – documentación de scikit-learn 0.19.1
  2. Regularización L1 : construya un modelo lineal (regresión lineal para problemas de regresión y regresión logística para problemas de clasificación) con regularización L1. Observe los coeficientes que el modelo asigna a todas las variables. La regularización de L1 funciona presionando las características malas para que tengan un coeficiente 0, lo que resulta en datos dimensionales significativamente más bajos. Esto debe hacerse con cuidado ya que una constante de regularización fuerte puede matar incluso unas pocas variables útiles además de las útiles. Pruebe diferentes valores para ver cuál da los mejores resultados en el conjunto de datos de validación.

Respuesta basada en más detalles

Los datos que se utilizan son datos del corazón del repositorio de UCI. Tiene 303 registros y 75 atributos, 14 de los cuales se usan comúnmente. También tiene 497 filas de otra fuente en la UCI, que no tengo tiempo para buscar en este momento.

Mi primer comentario es que es posible que desee ver también otros conjuntos de datos a menos que solo lo esté haciendo con este por una razón específica. Estos datos son antiguos (hablando de los 303) y en estos días, 800 puntos de datos no se consideran mucho.

En segundo lugar, la naturaleza de los datos en los predictores no es muy adecuada para PCA u (la mayoría) otros algoritmos de reducción de dimensiones. Eso está considerando solo el 303, pero imagino que los otros conjuntos de datos en la UCI tienen tipos de datos similares que son en su mayoría recuentos o categorías y, por lo tanto, no son susceptibles de PCA.

Si por selección de características se refería a la regularización de los parámetros de un modelo (explícito como LASSO o cresta o anteriores en los parámetros, o implícito como en bosques aleatorios), esa es mi recomendación en este caso.

Respuesta original

Esto depende de varias cosas:

  • La naturaleza de sus datos (PCA y algoritmos similares solo funcionan con datos numéricos, por un lado, y si bien puede convertir datos categóricos en numéricos, este es uno de esos casos en los que una codificación activa no funciona, por lo que debe ser inteligente.)
  • El problema que estás tratando de resolver.
  • Los métodos que está considerando en la solución.

Hay casos de uso donde cualquiera de las dos formas es apropiada. Hay casos en que uno es más natural que el otro. Y a menudo puedes combinar los dos.

La selección de características y la reducción de dimensiones (que es mucho más que solo PCA) están relacionadas de muchas maneras.

Los problemas de datos son muy parecidos a cualquier otro tipo de problemas en al menos un aspecto: gran parte de lo que define una solución efectiva depende del contexto.

Si desea comentar esta respuesta y darme una idea de su problema, puedo actualizar mi respuesta.

Puede usar PCA para reducir su dimensionalidad, luego extraer la característica del conjunto de datos de baja dimensión