Icone color1 06

Métodos para la reducción de la dimensionalidad manifold-based: el caso ISOMAP

Autor: Matteo Alberti

 

 

 

 

Entre metodologías principales  que hay en la  reducción lineal de dimensionalidad, tenemos las PCA o los componentes principales,estas son ciertamente las principales herramientas del Statistical Machine Learning.

Nos enfocamos muy a menudo en instrumentos que capturan el componente no lineal, el análisis de los componentes principales es el punto de partida para muchos análisis (y como una herramienta de preprocesamiento) y su conocimiento se vuelve imperativo en caso  que las condiciones en la linealidad sean satisfactorios.

En este tutorial vamos a presentar a nivel matemático la formación de los principales componentes de forma clara y concisa, como se implementa en python pero sobre todo su interpretación

“La idea básica es encontrar un sistema de referencia que maximice la varianza de las variables representadas”

Esto se hace dividiendo la varianza total en un número igual de variables de inicio, pero será posible reducir el número en función de la contribución que cada PC proporciona en la construcción de nuestra varianza total.

Nos gustaría recordarle que la aplicación de Análisis de Componentes Principales es útil cuando las variables de inicio no son independientes

 

Dado un conjunto de p variables cuantitativas X1, X2 ,. . . , Xp (variables centradas o estandarizadas) queremos determinar un nuevo conjunto de k variables t.c k≤p indicadas con Ys (s = 1,2, … k) que tienen las siguientes propiedades:

 

sin correlación, reproducir la mayor parte posible de la varianza restante después de la construcción de los primeros s-1 componentes, construido en orden creciente con respecto al porcentaje de varianza total que se reproducen, En promedio, no son nada

Como resultado, la combinación lineal será:

Por lo tanto, debemos encontrar los coeficientes v t.a.c que satisfacen nuestras propiedades.Este es un problema de restricción máxima donde la primera restricción se llama normalización:

Nuestro sistema es así:

Donde la varianza se puede expresar de la siguiente manera:

Y se resuelve mediante el método multiplicador de Lagrange:

Cálculo del gradiente de L1 y su cancelación obteniendo:

Donde   Este sistema admite infinitas soluciones (que respetan la restricción) al disminuir el rango de la matriz de coeficientes del sistema:

que corresponden a λs llamados valores propios de Σ.

Analogamente per la costruzione della seconda PCA (e cosi per tutte le altre) subentra al nostro sistema il Vincolo di Ortogonalità, dato dalla nostra richiesta che le PC siano incorrelate, esprimibile nel seguente modo:

De manera similar, para la construcción del segundo PCA (y para todos los demás), se agrega a nuestro sistema la Restricción de Ortogonalidad, le perdimos nuestra solicitud a los PC que estan sin correlación,podemos dar un ejemplo  de la siguiente manera:

Entonces al establecer la lagrangiana en p + 2 variables obtenemos:

De donde obtenemos el segundo valor propio de Y2 donde recordamos que se aplica la siguiente propiedad:

Propiedades de computador:

a) Cada valor propio de Σ tiene un papel en varianza respectiva del computador.

su valor es positivo

Varianza total

Varianza General

 

CRITERIOS DE SELECCIÓN:

Para la elección del número k (con k <p) de PC que se mantendrá en el análisis no existe un criterio universalmente aceptado y válido. Por lo tanto, es una buena práctica usarlos de forma conjunta y siempre tener en cuenta las necesidades del análisis. Expodremos los principales:

  1. a) Porcentaje acumulado de la varianza total reproducida:

 

                                                                                   

medida absoluta                           Normalización                                     Porcentaje acumulado

 

Establezca un umbral T en el porcentaje acumulado y mantenga el primer kPC en análisis que garantice que excede el umbral

 

b) Screen-Plot

Representa los valores propios con respecto al número de orden del componente

Donde se selecciona el primer k PC basado en la reducción de pendiente (también llamado criterio de codo). En este caso específico, los PC que se mantendrán en análisis serían los dos primeros.

 

c) Criterio Kaiser

También conocido como criterio de valor proprio mayor que 1 (válido solo para variables estandarizadas)

 

 

Vamos a implementar:

Importamos los paquetes necesarios de scikit-learn

import numpy as np

from sklearn.decomposition import PCA

La clase tiene los siguientes atributos:

Sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False, svd_solver=’auto’, tol=0.0, iterated_power=’auto’, random_state=None)

Comentemos los principales parámetros:

  • n_components = número de componentes a analizar. Aconsejamos en una fase de elección no establecer este valor y evaluar en función de los criterios anteriores.
  • svd_solver = nos da algunas de las alternativas principales (arpack, randomized ..) queremos recordar que PCA no admite datos dispersos (para lo cual deberá cargar TruncatedSVD)

Vamos a probarlo en nuevos datos reales, por ejemplo, en los datos de Wine que se pueden importar a través del comando

from sklearn import datasets

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

from sklearn import decomposition

En este punto vamos a implementar PCA y hacer un plot:

np.random.seed(123)
wine = datasets.load_wine()

X = wine.data

y = wine.target



fig = plt.figure(1, figsize=(5, 4))

plt.clf()

ax = Axes3D(fig, rect=[1, 0, 1, 0.9], elev=30, azim=222)



plt.cla()

pca = decomposition.PCA(n_components=None)

pca.fit(X)

X = pca.transform(X)





for name, label in [('Setosa', 0), ('Versicolour', 1), ('Virginica', 2)]:

ax.text3D(X[y == label, 0].mean(),

X[y == label, 1].mean() + 1.5,

X[y == label, 2].mean(), name,

bbox=dict(alpha=.5, edgecolor='b', facecolor='w'))

# Reorder the labels to have colors matching the cluster results

y = np.choose(y, [1, 2, 0]).astype(np.float)

ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y, cmap=plt.cm.spectral,

edgecolor='r')



ax.w_xaxis.set_ticklabels([])

ax.w_yaxis.set_ticklabels([])

ax.w_zaxis.set_ticklabels([])



plt.show()

Este será el gráfico que obtendremos:

Por lo tanto, vamos a seleccionar solo las primeras 3 variables de referencia

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir

Deja un comentario

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