3 votos

Utilizar el núcleo RBF gaussiano para el mapeo de datos 2D a 3D

Estoy trabajando en las SVM e intento que todos los conceptos estén implicados. Por ejemplo, el mapeo del kernel. Me gustaría construir algunas partes del algoritmo por mí mismo, para entender lo que está sucediendo.

Mi objetivo es crear una cartografía como la de esta imagen (tomada de aquí ) Example mapping 2D --> 3D

No entiendo muy bien cuáles son los valores de entrada y salida del kernel; para mapear los puntos de datos a la 3ª dimensión, la salida deberían ser los valores Z, ¿no? ¿Y la entrada son (vectores de) los valores X e Y?

Mi código (matlab) para obtener los valores z es:

z = exp(-( (abs(x-y).^2)./ (2*gamma^2) ));

Pero los valores z son sólo una curva de campana, nosotros tal: enter image description here

Realmente no sé qué estoy haciendo mal, pero creo que confundo los conceptos de núcleo y mapeo (implícito/explícito).

¿Cómo puedo construir una función (matlab) que mapee los datos 2D al espacio 3D, utilizando la Función de Base Radial Gaussiana?

-- Editar -- Gracias al usuario27840 he conseguido que funcione, con el siguiente código de matlab:

gamma = 2;
D = squareform( pdist(data, 'euclidean') );
D = exp(-(D .^ 2) ./ ( 2*gamma^2));
z = sum(D);

El resultado es el siguiente gráfico en 3D, a partir de los datos originales en 2D: enter image description here

-- Edición 2: -- Para aquellos que estén interesados en las máquinas de vectores de soporte de una clase; escribí una entrada en el blog sobre ello, utilizando la respuesta de este hilo: Introducción a la máquina de vectores de apoyo de una clase

4voto

kalimurugan Puntos 1

Creo que el RBF proyecta los datos en el espacio 3D centrando una protuberancia tridimensional (una gaussiana no normalizada) sobre cada punto de datos. La anchura de las protuberancias viene dada por el $gamma$ parámetro.

Estas protuberancias se superponen, por lo que para calcular el valor de z en un lugar concreto hay que sumar todos los puntos de datos. Si en lugar de $x, y$ utilizamos $x_1, x_2$ e indexar todos los puntos de datos como $\mathbf{x}_i$ entonces la fórmula para calcular la proyección es:

$ z(\mathbf{x}) = \sum_{i=1}^{n} \exp\{ - \frac{ \| \mathbf{x} - \mathbf{x_i} \|^2}{2 \gamma^2 } \} $

Donde $\mathbf{x}$ y $\mathbf{x}_i$ son vectores bidimensionales y $\| \mathbf{x} - \mathbf{x}_i \|$ es la distancia euclidiana entre ellos.

Es decir, para encontrar el valor z en cada punto, hay que sumar todos los puntos de datos.

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