Estaba utilizando el Análisis discriminante lineal (LDA) de la scikit-learn
biblioteca de aprendizaje automático (Python) para la reducción de la dimensionalidad y tenía un poco de curiosidad por los resultados. Ahora me pregunto qué scikit-learn
está haciendo la LDA para que los resultados se vean diferentes de, por ejemplo, un enfoque manual o una LDA realizada en R. Sería genial si alguien pudiera darme algunas ideas aquí.
Lo que básicamente es más preocupante es que scikit-plot
muestra una correlación entre las dos variables donde debería haber una correlación 0.
Para una prueba, utilicé el conjunto de datos de Iris y los primeros 2 discriminantes lineales se veían así:
IMG-1. LDA a través de scikit-learn
Esto es básicamente consistente con los resultados que encontré en la documentación de scikit-learn aquí.
Ahora, revisé el LDA paso a paso y obtuve una proyección diferente. Intenté diferentes enfoques para averiguar qué estaba pasando:
IMG-2. LDA en datos sin procesar (sin centrado, sin estandarización)
Y aquí estaría el enfoque paso a paso si estandarizara (normalización del puntaje z; varianza de la unidad) los datos primero. Hice lo mismo solo con centrado en la media, lo que debería conducir a la misma imagen de proyección relativa (y que de hecho lo hizo).
IMG-3. LDA paso a paso después del centrado medio o estandarización
IMG-4. LDA en R (configuración predeterminada)
LDA en IMG-3, donde centré los datos (que sería el enfoque preferido) también se ve exactamente igual al que encontré en una publicación de alguien que hizo el LDA en R
Código de referencia
No quería pegar todo el código aquí, pero lo he subido como un cuaderno de IPython desglosado en varios pasos que utilicé (ver más abajo) para la proyección LDA.
- Paso 1: Calcular los vectores medios d-dimensionales
Paso 2: Calcular las matrices de dispersión
2.1 La matriz de dispersión dentro de clase se calcula mediante la siguiente ecuación:
2.2 La matriz de dispersión entre clases se calcula mediante la siguiente ecuación: donde es la media general.
Paso 3. Resolver el problema de valor propio generalizado para la matriz
3.1. Ordenar los vectores propios disminuyendo los valores propios
3.2. Elección de k vectores propios con los valores propios más grandes. Combinando los dos vectores propios con los valores propios más altos para construir nuestra matriz de vectores propios -dimensional
Paso 5: Transformando las muestras en el nuevo subespacio