Algoritmo de reducción de dimensionalidad de datos-análisis de componentes principales

Reducción de dimensionalidad de datos

La reducción de la dimensionalidad de los datos es muy útil en el aprendizaje automático, ya que se puede utilizar para descartar algunas de las características menos distintivas de los datos y transformar el ángulo de observación de los datos para que funcione mejor en un menor número de dimensiones de características. La reducción de la dimensionalidad de los datos también se puede utilizar en la operación de visualización de datos de alta dimensión, que son algoritmos indispensables e importantes.

PCA

PCA (Análisis de componentes principales) es un algoritmo de reducción de dimensionalidad de datos de uso común.

La idea principal de PCA es seleccionar algunos espacios de menor dimensión en las características de los datos, de modo que la varianza de los datos en estos espacios sea relativamente grande. En este momento, podemos pensar que los datos están más dispersos. Todavía podemos mostrar en este espacio de baja dimensión. Discreción de datos.

Matemáticas

Antes de presentar oficialmente los pasos de PCA, hay algunos conocimientos matemáticos importantes que pueden ayudarnos enormemente a calcular. Si aún no está claro después de leer esta sección, los siguientes dos artículos pueden ayudarlo.

Referencia uno

Referencia dos, principios matemáticos

Representación de varianza

Suponga que cada fila de la matriz representa un conjunto de datos, y cada columna representa una característica unidimensional, a saber $$ A_ {n \ times m} $$.

La matriz de covarianza se puede expresar como:

donde $$ n $$ es el número de grupos de datos.

Por el contrario, si cada grupo de entidades está representado por filas, entonces

Cov = \frac{1}{n} A A^T

Obviamente, la matriz de covarianza $$ Cov $$ es una matriz simétrica real.

Valores propios y vectores propios

Para la matriz $$ A $$, si hay $$ \ lambda $$ y el vector $$$ v $$ está satisfecho

A v = \lambda v

Luego llame a $$ \ lambda $$ como el valor de característica de $$ A $$, y $$ v $$ como el vector de característica de $$ A $$.

Solución de Eigenvalue y Eigenvector

La resolución de la ecuación (2) puede calcular todos los valores propios y los vectores propios.

Características de los valores propios y los vectores propios.

La matriz se puede descomponer según los valores propios,

donde $$ Q $$ es una matriz en la que los vectores propios están dispuestos en columnas, y $$ \ Sigma $$ es una matriz diagonal de valores propios.

Prueba

Dado que los dos vectores propios (cualquiera de los dos vectores propios diferentes) correspondientes a diferentes valores propios son ortogonales, podemos obtener

Q Q^T = I = Q^T = Q^{-1}

Entonces también se puede descomponer así

Diagonalización de la matriz

Transforme la fórmula anterior (3)

Transformación elemental

En el nivel de la matriz, multiplicar una matriz por la izquierda es equivalente a la transformación de fila elemental, y multiplicar la matriz por la derecha es equivalente a la transformación de columna elemental. Si la multiplicación de la matriz se entiende como algunas operaciones en las filas y columnas de la matriz, puede ser más conveniente comprender el funcionamiento de la PCA en las características de los datos.

El siguiente es un conjunto de datos según el comportamiento, cada columna es una característica.

Pasos de PCA

La siguiente descripción detallada de cada paso del algoritmo de análisis de componentes principales implica mucho conocimiento del álgebra lineal, lo que requiere una cierta comprensión del contenido anterior.

Media

Después de obtener los datos primero, calcule el promedio $$ \ mu $$ y luego reste el promedio de cada columna de características, de modo que los datos se centren en $$ 0 $$.

Matriz de covarianza

Usando la ecuación (1), se calcula la matriz de covarianza. La matriz de covarianza que obtuvimos en este momento es una matriz simétrica real. Las diagonales se distribuyen con las varianzas de las características $$ m $$, y las otras posiciones son las covarianzas. Lo que esperamos obtener es lo menos posible, ortogonal y puede representar un plano de características completo. Entonces esta matriz debería verse así.

Esto significa que la covarianza de estas características es cero, es decir, son ortogonales entre sí, cada característica tiene su propia varianza. Elegimos la varianza más grande en el primer $$ k $$ para obtener qué tipo de características queremos formar. Completando así la reducción de dimensionalidad. A continuación pasamos a la matriz anterior, que es la diagonalización de la matriz .

Diagonalizar

Matemáticamente, la diagonalización matricial ya no es difícil.

Imagine las últimas características restantes de PCA. Se puede entender que las características existentes se obtienen realizando alguna transformación lineal. En estas dimensiones, la varianza es mayor. La transformación lineal de las características corresponde a la transformación de la columna en la operación básica. Entonces podemos multiplicar la matriz de datos $$ A $$ por una matriz $$ P $$ y obtener las características ortogonales que queremos.

Después de la transformación, la covarianza se puede escribir como

: ¿Sientes que (5) y (6) son similares?

Los matemáticos nos dicen que la matriz de vectores propios tiene muy buenas propiedades, que pueden cumplir con nuestros requisitos para $$ P $$, por lo que podemos calcular los vectores propios y los valores propios de $$ A ^ TA $$ para lograr la diagonalización. Demasiado

Ordenar

Cuando elegimos el valor de la característica, necesitamos seleccionar el primer $$ k $$ grande, porque cuanto mayor sea la varianza, más información podemos retener, más se selecciona el componente principal.

Ordene estos pocos valores propios y seleccione el primer $$ k $$ grande. En este momento, de la matriz correspondiente $$ P $$, podemos saber cómo se transforman linealmente las dimensiones seleccionadas.

Solicitud

fastNLPEl entrenamiento previo que utilicé para glove embeddingconstruir vectores de incrustación de palabras además de unas pocas palabras es de 50 dimensiones. Para comparar si nuestra incrustación es exitosa, nlp a menudo usa visualización para estimar.

Usé el siguiente código para sklearn.decomposition.PCAintentar reducir 50 dimensiones a 2 dimensiones y 3 dimensiones. Echemos un vistazo al efecto juntos.

2 dimensiones

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np
from fastNLP.embeddings import StaticEmbedding
from fastNLP import Vocabulary
import torch


word_list = ['he', 'she', 'right', 'black', 'work', 'evening', 'his', 'do', 'left', 'white', 'green', 'job', 'it', 'her', 'morning', 'afternoon']

vocab = Vocabulary()
vocab.add_word_lst(
    # msg.split(' ')
    word_list
)

embeded = StaticEmbedding(vocab=vocab, model_dir_or_name="en-glove-6b-50d")
words_idx = torch.LongTensor(list(vocab.idx2word.keys()))
word_embedding = embeded(words_idx)
word_embedding = word_embedding.detach().numpy()


pca = PCA(n_components=3)
pca.fit(word_embedding)
data = pca.transform(word_embedding)

plt.scatter(data[:, 0], data[:, 1], alpha=0.6)

for i in range(len(data)):
    plt.text(x=data[i][0], y=data[i][1], s=vocab.to_word(words_idx[i].item()))
    # plt.text()

plt.show()

3 dimensiones

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np
from fastNLP.embeddings import StaticEmbedding
from fastNLP import Vocabulary
import torch

word_list = ['he', 'she', 'right', 'black', 'work', 'evening', 'his', 'do', 'left', 'white', 'green', 'job', 'it', 'her', 'morning', 'afternoon']

vocab = Vocabulary()
vocab.add_word_lst(
    # msg.split(' ')
    word_list
)

embeded = StaticEmbedding(vocab=vocab, model_dir_or_name="en-glove-6b-50d")
words_idx = torch.LongTensor(list(vocab.idx2word.keys()))
word_embedding = embeded(words_idx)
word_embedding = word_embedding.detach().numpy()


pca = PCA(n_components=3)
pca.fit(word_embedding)
data = pca.transform(word_embedding)
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(data[:, 0], data[:, 1], data[:, 2], alpha=0.6)
for i, datai in enumerate(data):
    ax.text3D(x=datai[0], y=datai[1], z=datai[2]\
        , s=vocab.to_word(words_idx[i].item()), fontsize=5, horizontalalignment="center")

plt.show()

Se puede ver que palabras similares pueden mostrar relevancia en el gráfico después de la reducción de dimensionalidad.

Supongo que te gusta

Origin www.cnblogs.com/TABball/p/12727342.html
Recomendado
Clasificación