ML | Análisis Discriminante Lineal

El análisis discriminante lineal o el análisis discriminante normal o el análisis de función discriminante es una técnica de reducción de dimensionalidad que se usa comúnmente para problemas de clasificación supervisada. Se utiliza para modelar diferencias en grupos, es decir, separar dos o más clases. Se utiliza para proyectar las características en un espacio de mayor dimensión en un espacio de menor dimensión. 
Por ejemplo, tenemos dos clases y necesitamos separarlas de manera eficiente. Las clases pueden tener múltiples funciones. El uso de una sola característica para clasificarlos puede dar lugar a cierta superposición, como se muestra en la siguiente figura. Por lo tanto, seguiremos aumentando la cantidad de características para una clasificación adecuada. 
 


Ejemplo: 
supongamos que tenemos dos conjuntos de puntos de datos que pertenecen a dos clases diferentes que queremos clasificar. Como se muestra en el gráfico 2D dado, cuando los puntos de datos se trazan en el plano 2D, no hay una línea recta que pueda separar completamente las dos clases de puntos de datos. Por lo tanto, en este caso, se utiliza LDA (Análisis Discriminante Lineal) que reduce el gráfico 2D a un gráfico 1D para maximizar la separabilidad entre las dos clases. 
 


Aquí, el análisis discriminante lineal utiliza ambos ejes (X e Y) para crear un nuevo eje y proyecta datos en un nuevo eje de manera de maximizar la separación de las dos categorías y, por lo tanto, reducir el gráfico 2D a un gráfico 1D. 
 

LDA utiliza dos criterios para crear un nuevo eje: 

  1. Maximizar la distancia entre las medias de las dos clases.
  2. Minimice la variación dentro de cada clase.


En el gráfico anterior, se puede ver que se genera y traza un nuevo eje (en rojo) en el gráfico 2D de manera que maximiza la distancia entre las medias de las dos clases y minimiza la variación dentro de cada clase. En términos simples, este eje recién generado aumenta la separación entre los puntos de datos de las dos clases. Después de generar este nuevo eje utilizando los criterios mencionados anteriormente, todos los puntos de datos de las clases se trazan en este nuevo eje y se muestran en la figura que se muestra a continuación. 
 


Pero el análisis discriminante lineal falla cuando se comparte la media de las distribuciones, ya que se vuelve imposible para LDA encontrar un nuevo eje que haga que ambas clases sean linealmente separables. En tales casos, utilizamos análisis discriminante no lineal.

Matemáticas

Supongamos que tenemos dos clases y muestras d-dimensionales como x1, x2… xn, donde:

  • n1 muestras provenientes de la clase (c1) y n2 provenientes de la clase (c2).

Si xi es el punto de datos, entonces su proyección en la línea representada por el vector unitario v se puede escribir como vTxi

Consideremos que u1 y u2 son las medias de las muestras de clase c1 y c2 respectivamente antes de la proyección y u1hat denota la media de las muestras de clase después de la proyección y se puede calcular mediante:

\widetilde{\mu_1}  = \frac{1}{n_1}\sum_{x_i \in c_1}^{n_1} v^{T}x_i = v^{T} \mu_1

Similarmente,

\widetilde{\mu_2} = v^{T} \mu_2

Ahora, en LDA necesitamos normalizar |\widetilde{\mu_1} -\widetilde{\mu_2} |. Sean y_i = v^{T}x_i las muestras proyectadas, luego la dispersión para las muestras de c1 es:

\widetilde{s_1^{2}} = \sum_{y_i \in c_1} (y_i - \mu_1)^2

Similarmente:

\widetilde{s_2^{2}} = \sum_{y_i \in c_1} (y_i - \mu_2)^2

Ahora, necesitamos proyectar nuestros datos en la línea que tiene la dirección v que maximiza

J(v) = \frac{\widetilde{\mu_1} - \widetilde{\mu_2}}{\widetilde{s_1^{2}} + \widetilde{s_2^{2}}}

Para maximizar la ecuación anterior, necesitamos encontrar un vector de proyección que maximice la diferencia de medias y reduzca las dispersiones de ambas clases. Ahora, la array de dispersión de s1 y s2 de las clases c1 y c2 son:

s_1 = \sum_{x_i \in c_1} (x_i - \mu_1)(x_i - \mu_1)^{T}

y s2

s_2 = \sum_{x_i \in c_2} (x_i - \mu_2)(x_i - \mu_2)^{T}

Después de simplificar la ecuación anterior, obtenemos:

Ahora, definimos, dispersar dentro de las clases (s w ) y dispersar b/w las clases (s b ):

s_w = s_1 + s_2 \\ \\ s_b  = (\mu_1 - \mu_2) (\mu_1 - \mu_2 )^{T}

Ahora, tratamos de simplificar la parte del numerador de J(v)

J(v) = \frac{|\widetilde{\mu_1} - \widetilde{\mu_2}|}{\widetilde{s_1^{2}} + \widetilde{s_2^{2}}} = \frac{v^{T}s_{b}v}{v^{T}s_{w}v}

Ahora, para maximizar la ecuación anterior, necesitamos calcular la diferenciación con respecto a v

\frac{d J(v)}{dv} = s_b v  - \frac{v^{t}s_{b} v (s_w v)}{v^{T} s_w v} \\ \\ = s_b v - \lambda s_w v =0 \\ \\ s_b v = \lambda s_w v \\ \\ s_w^{-1} s_b v = \lambda v \\ \\ M v = \lambda v \\ \\ where, \\ \\ \lambda = \frac{v^{T}s_{b} v}{v^{T} s_w v} and \\ \\ M  = s_w^{-1} s_b

Aquí, para el valor máximo de J(v) usaremos el valor correspondiente al valor propio más alto. Esto nos proporcionará la mejor solución para LDA.

Extensiones a LDA: 

  1. Análisis Discriminante Cuadrático (QDA): Cada clase usa su propia estimación de varianza (o covarianza cuando hay múltiples variables de entrada).
  2. Análisis discriminante flexible (FDA): donde se utilizan combinaciones no lineales de entradas, como splines.
  3. Análisis Discriminante Regularizado (RDA): Introduce la regularización en la estimación de la varianza (en realidad covarianza), moderando la influencia de diferentes variables en LDA.

Implementación

  • En esta implementación, realizaremos un análisis discriminante lineal utilizando la biblioteca Scikit-learn en el conjunto de datos de Iris.

Python3

# necessary import
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sklearn
from sklearn.preprocessing import StandardScaler, LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
  
# read dataset from URL
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
cls = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
dataset = pd.read_csv(url, names=cls)
  
# divide the dataset into class and target variable
X = dataset.iloc[:, 0:4].values
y = dataset.iloc[:, 4].values
  
# Preprocess the dataset and divide into train and test
sc = StandardScaler()
X = sc.fit_transform(X)
le = LabelEncoder()
y = le.fit_transform(y)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
  
# apply Linear Discriminant Analysis
lda = LinearDiscriminantAnalysis(n_components=2)
X_train = lda.fit_transform(X_train, y_train)
X_test = lda.transform(X_test)
  
# plot the scatterplot
plt.scatter(
    X_train[:,0],X_train[:,1],c=y_train,cmap='rainbow',
  alpha=0.7,edgecolors='b'
)
  
# classify using random forest classifier
classifier = RandomForestClassifier(max_depth=2, random_state=0)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
  
# print the accuracy and confusion matrix
print('Accuracy : ' + str(accuracy_score(y_test, y_pred)))
conf_m = confusion_matrix(y_test, y_pred)
print(conf_m)

LDA 2 – gráfica de variables

Accuracy : 0.9

[[10  0  0]
 [ 0  9  3]
 [ 0  0  8]]

Aplicaciones: 

  1. Reconocimiento facial: en el campo de la visión por computadora, el reconocimiento facial es una aplicación muy popular en la que cada rostro está representado por una gran cantidad de valores de píxeles. Aquí se utiliza el análisis discriminante lineal (LDA) para reducir el número de características a un número más manejable antes del proceso de clasificación. Cada una de las nuevas dimensiones generadas es una combinación lineal de valores de píxeles, que forman una plantilla. Las combinaciones lineales obtenidas mediante el discriminante lineal de Fisher se denominan caras de Fisher.
  2. Médico: en este campo, el análisis discriminante lineal (LDA) se utiliza para clasificar el estado de la enfermedad del paciente como leve, moderado o grave según los diversos parámetros del paciente y el tratamiento médico que está recibiendo. Esto ayuda a los médicos a intensificar o reducir el ritmo de su tratamiento.
  3. Identificación de clientes: supongamos que queremos identificar el tipo de clientes que es más probable que compren un producto en particular en un centro comercial. Al hacer una simple encuesta de preguntas y respuestas, podemos recopilar todas las características de los clientes. Aquí, un análisis discriminante lineal nos ayudará a identificar y seleccionar las características que pueden describir las características del grupo de clientes que es más probable que compren ese producto en particular en el centro comercial.

Publicación traducida automáticamente

Artículo escrito por raman_257 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *