19 votos

¿Qué son los "coeficientes de los discriminantes lineales" en LDA?

En R Utilizo lda de la biblioteca MASS para hacer la clasificación. Según entiendo LDA, la entrada $x$ se le asignará la etiqueta $y$ que maximizan $p(y|x)$ ¿verdad?

Pero cuando ajuste el modelo, en el que $$x=(Lag1,Lag2)$$$$y=Direction,$$ No entiendo muy bien la salida de lda ,

Edita: para reproducir la salida siguiente, primera ejecución:

library(MASS)
library(ISLR)

train = subset(Smarket, Year < 2005)

lda.fit = lda(Direction ~ Lag1 + Lag2, data = train)
> lda.fit
Call:
lda(Direction ~ Lag1 + Lag2, data = train)

Prior probabilities of groups:
    Down       Up 
0.491984 0.508016 

Group means:
            Lag1        Lag2
Down  0.04279022  0.03389409
Up   -0.03954635 -0.03132544

Coefficients of linear discriminants:
            LD1
Lag1 -0.6420190
Lag2 -0.5135293

Entiendo toda la información en la salida anterior, pero una cosa, ¿qué es LD1 ? Lo busco en la web, ¿es puntuación discriminante lineal ? ¿Qué es eso y por qué lo necesito?

ACTUALIZACIÓN

He leído varios posts (como este y éste ) y también buscar en la web para DA, y ahora esto es lo que pienso acerca de DA o LDA.

  1. Se puede utilizar para hacer una clasificación, y cuando este es el propósito, puedo utilizar el enfoque de Bayes, es decir, calcular la posterior $p(y|x)$ para cada clase $y_i$ y, a continuación, clasificar $x$ a la clase con mayor posterioridad. Con este enfoque, no necesito averiguar los discriminantes en absoluto, ¿verdad?

  2. Según leo en los posts, DA o al menos LDA está dirigido principalmente a reducción dimensional para $K$ clases y $D$ -dim espacio predictor, puedo proyectar el $D$ -dim $x$ en un nuevo $(K-1)$ -espacio de características dim $z$ Eso es, \begin{align*}x&=(x_1,...,x_D)\\z&=(z_1,...,z_{K-1})\\z_i&=w_i^Tx\end{align*} , $z$ puede considerarse como el vector de características transformado a partir del original $x$ y cada $w_i$ es el vector en el que $x$ se proyecta.

¿Estoy en lo cierto con las afirmaciones anteriores? En caso afirmativo, tengo las siguientes preguntas:

  1. ¿Qué es un discriminante ? ¿Cada entrada $z_i$ en vector $z$ ¿es un discriminante? O $w_i$ ?

  2. ¿Cómo realizar la clasificación mediante discriminantes?

7voto

Alan LaMielle Puntos 53

Si se multiplica cada valor de LDA1 (el primer discriminante lineal) por los elementos correspondientes de las variables predictoras y sumarlos ( $-0.6420190\times$Lag1$+ -0.5135293\times$Lag2 ) se obtiene un puntuación para cada encuestado. Esta puntuación junto con la anterior se utilizan para calcular el probabilidad posterior de pertenencia a una clase (existen diversas fórmulas para ello). La clasificación se basa en la probabilidad posterior, y se predice que las observaciones pertenecen a la clase para la que tienen la probabilidad más alta.

El gráfico siguiente ilustra la relación entre la puntuación, la probabilidad posterior y la clasificación, para el conjunto de datos utilizado en la pregunta. Los patrones básicos se mantienen siempre con LDA de dos grupos: hay una correspondencia 1 a 1 entre las puntuaciones y la probabilidad posterior, y las predicciones son equivalentes cuando se hacen a partir de las probabilidades posteriores o de las puntuaciones.

Score, Posterior Probability, Classification

Respuestas a las subpreguntas y otros comentarios

  • Aunque el LDA puede utilizarse para reducir la dimensión, esto no es lo que ocurre en el ejemplo. Con dos grupos, la razón por la que sólo se requiere una única puntuación por observación es que esto es todo lo que se necesita. Esto se debe a que la probabilidad de estar en un grupo es el complemento de la probabilidad de estar en el otro (es decir, suman 1). Esto puede verse en el gráfico: las puntuaciones inferiores a -,4 se clasifican en el grupo Abajo grupo y se prevé que las puntuaciones más altas Arriba .

  • A veces, el vector de puntuaciones se denomina discriminant function . A veces los coeficientes se llaman así. No tengo claro si alguna de las dos cosas es correcta. Creo que MASS discriminant se refiere a los coeficientes.

  • El paquete MASS lda produce coeficientes de un modo diferente a la mayoría de los demás programas de LDA. El enfoque alternativo calcula un conjunto de coeficientes para cada grupo y cada conjunto de coeficientes tiene un intercepto. Con la función discriminante (puntuaciones) calculada utilizando estos coeficientes, la clasificación se basa en la puntuación más alta y no hay necesidad de calcular probabilidades posteriores para predecir la clasificación. He puesto un poco de código LDA en GitHub que es una modificación de la MASS pero produce estos coeficientes más convenientes (el paquete se llama Displayr/flipMultivariates y si crea un objeto con LDA puede extraer los coeficientes utilizando obj$original$discriminant.functions ).

  • He publicado el R para el código de todos los conceptos en este post aquí .

  • No existe una fórmula única para calcular las probabilidades posteriores a partir de la puntuación. La forma más fácil de entender las opciones es (para mí de todos modos) para mirar el código fuente, utilizando:

library(MASS) getAnywhere("predict.lda")

3voto

pb2q Puntos 28514

Discriminante en el contexto de ISLR, 4.6.3 Análisis discriminante lineal, pp161-162 es, según tengo entendido, el valor de \begin{equation} \hat\delta_2(\vec x) - \hat\delta_1(\vec x) = {\vec x}^T\hat\Sigma^{-1}\Bigl(\vec{\hat\mu}_2 - \vec{\hat\mu}_1\Bigr) - \frac{1}{2}\Bigl(\vec{\hat\mu}_2 + \vec{\hat\mu}_1\Bigr)^T\hat\Sigma^{-1}\Bigl(\vec{\hat\mu}_2 - \vec{\hat\mu}_1\Bigr) + \log\Bigl(\frac{\pi_2}{\pi_1}\Bigr), \tag{$*$} \end{equation}

donde $\vec x = (\mathrm{Lag1}, \mathrm{Lag2})^T$ . Para la 2ª legislatura en $(*)$ hay que tener en cuenta que, para la matriz simétrica M, tenemos $\vec x^T M\vec y = \vec y^T M \vec x$ .

LD1 es el vector de coeficientes de $\vec x$ de la ecuación anterior, que es \begin{equation} \hat\Sigma^{-1}\Bigl(\vec{\hat\mu}_2 - \vec{\hat\mu}_1\Bigr). \end{equation} $y$ en $\vec x$ es 2 si $(*)$ es positivo, y 1 si $(*)$ es negativo.

LD1 viene dado por lda.fit$scaling . El vector discriminante ${\vec x}^T\hat\Sigma^{-1}\Bigl(\vec{\hat\mu}_2 - \vec{\hat\mu}_1\Bigr)$ calculado mediante LD1 para un conjunto de pruebas se da como lda.pred$x donde

test = subset(Smarket, Year==2005)
lda.pred = predict(lda.fit, test)

test no se da necesariamente como arriba, se puede dar arbitrariamente.

Desgraciadamente, lda.pred$x por sí sola no puede decir si $y$ es 1 ó 2. Necesitamos el 2º y el 3er término en $(*)$ . No pude encontrar estos términos en la salida de lda() y/o predict(lda.fit,..) .

Podemos calcular los tres términos de $(*)$ me refiero a utilizar sólo las funciones básicas de R. El script para LD1 se indica a continuación.

bTrain = (Smarket$Year < 2005) # boolean vector for the training set
bUp = (Smarket$Direction == "Up") # boolean vector for "Up" group
up.group = Smarket[bTrain & bUp,]
down.group = Smarket[bTrain & !bUp,]
cov.up = cov(up.group[,c(2,3)])
cov.down = cov(down.group[,c(2,3)])
nUp = nrow(up.group)
nDown = nrow(down.group)
n = nUp + nDown; K = 2
Sigma <- 1/(n - K) * (cov.up * (nUp - 1) + cov.down * (nDown - 1))
SigmaInv <- solve(Sigma)
lda.fit = lda(Direction ~ Lag1+Lag2, data=Smarket, subset=bTrain) 
mu2_mu1 = matrix(lda.fit$means[2,] - lda.fit$means[1,])
coeff.vec = SigmaInv %*% mu2_mu1; coeff.vec
            [,1]
Lag1 -0.05544078
Lag2 -0.04434520
v.scalar = sqrt(t(coeff.vec) %*% Sigma %*% coeff.vec)
myLD1 = coeff.vec/drop(v.scalar); myLD1 # same as below
           [,1]
Lag1 -0.6420190
Lag2 -0.5135293
lda.fit$scaling # same as above
            LD1
Lag1 -0.6420190
Lag2 -0.5135293

Aquí está el truco: myLD1 es perfectamente buena en el sentido de que puede utilizarse para clasificar $\vec x$ en función del valor de su correspondiente variable de respuesta $y$ . Dado que la función discriminante $(*)$ es lineal en $\vec x$ (en realidad no es lineal, es afín) cualquier múltiplo escalar de myLD1 funcionará siempre que el segundo y el tercer término se multipliquen por el mismo escalar, que es 1/v.scalar en el código anterior.

LD1 dada por lda() tiene la agradable propiedad de que la norma generalizada es 1, que nuestro myLD1 carencias.

t(lda.fit$scaling) %*% Sigma %*% lda.fit$scaling
    LD1
LD1   1

-fin-

0voto

Michael Sedor Puntos 41

La teoría detrás de esta función es el "Método de Fisher para discriminar entre varias poblaciones". Recomiendo el capítulo 11.6 del análisis estadístico multivariante aplicado (ISBN: 9780134995397) como referencia.

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