Análisis discriminante lineal

PCA busca encontrar una serie de vectores que describan la varianza en los datos. Por ejemplo, puede tener algunos datos descritos por dos características, \(X\) y \(Y\), que puede trazar. Puede encontrar un par de vectores que expliquen cuánto varían los datos en una dirección en comparación con una dirección ortogonal al primer vector, como se muestra en la Figura 7-4.

Figura 7-4: Los componentes principales describen la varianza en los datos; aquí, hay dos vectores componentes, siendo el componente principal el que describe el más largo de los dos ejes en los datos

Los conjuntos de datos más complejos pueden tener más características y más vectores, pero la idea es la misma. Por el contrario, una forma diferente de realizar el análisis de características sería con el análisis discriminante lineal (LDA). En este caso, es posible que tenga algunos datos que sean una función de \(X\) y \(Y\), nuevamente, pero esta vez, como muestra la Figura 7-5, desea clasificarlos en diferentes grupos en función de cómo se distribuyen sus datos.

Figura 7-5. LDA describe la mejor manera de separar los datos según las clases; aquí, hay un conjunto de datos que se divide efectivamente por las distribuciones a lo largo del eje \(X\) y el eje \(Y\), respectivamente

En la Figura 7-5, hay algunos datos que están graficados, pero separados en dos clases. Los datos + tienen una distribución a lo largo del eje \(X\), al igual que los otros datos. Sin embargo, los datos del eje \(Y\) no se distinguen por clases diferentes en este caso.

Veamos cómo se comparan estos dos modelos entre sí para fines de clasificación ejecutándolos con el conjunto de datos de iris familiar. Comience usando PCA en los datos de iris y luego observe la varianza total atribuida a cada uno de los componentes, comenzando con el uso de la función prcomp:

iris.pca <- prcomp(iris[, -5], center = T, scale. = T) #se elimina la 5 columna, cada variable sera restada a la media de cada una de las mismas y se va a dividir por la desviación tipica así las variables quedan estandarizadas.

iris.pca$sdev^2/sum(iris.pca$sdev^2) #se va a dividir la varianza de cada una de las componente principales por la sumatoria de las varianzas de cada una de las componentes principales
## [1] 0.729624454 0.228507618 0.036689219 0.005178709

Aquí, PCA le informa que tiene básicamente dos componentes principales. El componente 1 describe la varianza del 72% de los datos y el componente 2 describe el 23% de la varianza de los datos. Estos dos vectores combinados describen un buen 96% de los datos; puede ignorar los otros componentes por el momento (para mantener las visualizaciones un poco más simples).

Antes de saltar de lleno a LDA, primero debemos establecer cuál es la distribución previa de datos. Tocamos brevemente este tema mientras discutíamos las estadísticas bayesianas.

Para una actualización rápida, la distribución anterior es la distribución de los datos que está modelando, esencialmente. En algunos casos, no sabe con certeza cuál podría ser la distribución, pero sí en este caso. Debido a que está ejecutando un modelo de clasificación en los datos de iris, el único tipo de datos de clase que tiene está relacionado con la variable Species. Puede ver cuál sería la distribución anterior en este caso mirando esa variable específica:

table(iris$Species)
## 
##     setosa versicolor  virginica 
##         50         50         50

Aquí, hay tres clases, todas igualmente distribuidas. La distribución previa en este caso sería (1/3) para cada clase. Debe especificar esto como un vector al entrenar el modelo LDA. Después de hacer eso, puede ver cómo se compara el corolario de LDA con los componentes principales haciendo básicamente el mismo enfoque matemático:

library(MASS)
iris.lda <- lda(Species ~ ., data = iris, prior = c(1/3, 1/3,
1/3))
iris.lda$svd^2/sum(iris.lda$svd^2)
## [1] 0.991212605 0.008787395

El resultado aquí muestra que hay dos valores singulares, el primero que describe un enorme 99% de la varianza en los datos y el otro un mínimo 0,8%. Si desea ver cómo los dos discriminantes lineales están relacionados con cada una de las características en los datos de una manera similar a cómo lo hizo con PCA, simplemente puede llamar a las escalas:

iris.lda$scaling
##                     LD1         LD2
## Sepal.Length  0.8293776  0.02410215
## Sepal.Width   1.5344731  2.16452123
## Petal.Length -2.2012117 -0.93192121
## Petal.Width  -2.8104603  2.83918785

A continuación, puede hacer la matriz de confusión habitual para ver qué tan bien se compara el modelo LDA con las respuestas reales para los datos de las especies de iris:

iris.lda.prediction <- predict(iris.lda, newdata = iris)
table(iris.lda.prediction$class, iris$Species)
##             
##              setosa versicolor virginica
##   setosa         50          0         0
##   versicolor      0         48         1
##   virginica       0          2        49

El modelo LDA parece ser bastante acertado. A continuación, puede intentar visualizar la diferencia entre PCA y LDA. Recordemos las formulaciones con estos dos modelos. PCA es un alumno sin supervisión. No le decimos a la PCA que intente separar nuestros datos en función de una determinada clase, simplemente se ocupa de sus asuntos al hacerlo. Por otro lado, con LDA, necesitamos especificar una clase por la cual separarnos y, por lo tanto, este último es un modelo supervisado.

Los modelos supervisados tenderán a ser mejores para separar datos que los no supervisados. La Figura 7-6 prueba esto comparando las salidas de PCA con LDA:

combined <- data.frame(Species = iris[, "Species"], pca = iris.pca$x,
lda = iris.lda.prediction$x)
library(ggplot2)
library(gridExtra)
lda.plot <- ggplot(combined) + geom_point(aes(lda.LD1, lda.LD2,
shape = Species)) + scale_shape_manual(values = c(0, 1, 2))
pca.plot <- ggplot(combined) + geom_point(aes(pca.PC1, pca.PC2,
shape = Species)) + scale_shape_manual(values = c(0, 1, 2))
grid.arrange(pca.plot, lda.plot)
*Figura 7-6. Una comparación de PCA versus LDA*

Figura 7-6. Una comparación de PCA versus LDA

La Figura 7-6 muestra PCA en la parte superior y LDA en la parte inferior. El objetivo aquí es ver qué tan bien cada modelo separa sus datos. En PCA, observe que los datos de setosa están bien separados del resto, pero los datos versicolor parecen tener cierta superposición con los datos de virginica alrededor del pca. PC1 = 1,5 rango. En comparación, LDA también separa bien los datos de setosa, pero parece que funciona mejor para mantener la superposición entre versicolor y virginica al mínimo.