11 votos

¿Cómo kernelize un Perceptrón simple?

Clasificación de problemas no lineales de los límites no pueden ser resueltos por una simple tipo perceptrón. El siguiente código R es para propósitos ilustrativos y se basa en este ejemplo en Python):

nonlin <- function(x, deriv = F) {
  if (deriv) x*(1-x)
  else 1/(1+exp(-x))
}

X <- matrix(c(-3,1,
              -2,1,
              -1,1,
               0,1,
               1,1,
               2,1,
               3,1), ncol=2, byrow=T)

y <- c(0,0,1,1,1,0,0)

syn0 <- runif(2,-1,1)

for (iter in 1:100000) {
  l1 <- nonlin(X %*% syn0)
  l1_error <- y - l1
  l1_delta <- l1_error * nonlin(l1,T)
  syn0 <- syn0 + t(X) %*% l1_delta
}

print("Output After Training:")
## [1] "Output After Training:"
round(l1,3)
##       [,1]
## [1,] 0.488
## [2,] 0.468
## [3,] 0.449
## [4,] 0.429
## [5,] 0.410
## [6,] 0.391
## [7,] 0.373

Ahora, la idea de un núcleo y el llamado núcleo truco es el proyecto del espacio de entrada en un espacio de dimensiones superiores, como así (fuentes de las fotos):

enter image description here enter image description here

Mi pregunta
¿Cómo puedo hacer uso de el kernel truco (por ejemplo, con un simple cuadrática kernel) así que tengo un kernel de tipo perceptrón, que es capaz de resolver determinado problema de clasificación? Por favor nota: Esta es principalmente conceptual de la pregunta, pero si usted podría también dar la necesaria modificación del código esto sería genial

Lo que he probado hasta ahora
He intentado lo siguiente que funciona muy bien, pero creo que este no es el verdadero negocio, porque se convierte en computacionalmente muy costoso para los problemas más complejos (el "truco" detrás del núcleo "truco" no es sólo la idea de un núcleo en sí, pero que usted no tiene que calcular la proyección para todos los casos):

X <- matrix(c(-3,9,1,
              -2,4,1,
              -1,1,1,
               0,0,1,
               1,1,1,
               2,4,1,
               3,9,1), ncol=3, byrow=T)

y <- c(0,0,1,1,1,0,0)

syn0 <- runif(3,-1,1)

La Divulgación Completa
He publicado esta pregunta hace una semana en MODO pero no recibe mucha atención. Sospecho que aquí es un lugar mejor porque es más conceptual de la pregunta de una programación de que se trate.

3voto

Steve Jarvis Puntos 21

Podemos construir un "núcleo de tipo perceptrón" tomando el estándar de tipo perceptrón y colocación del producto interior $X^\intercal X=\left<X,X\right>$ con el equivalente (debido a que el "kernel-trick") K(X,X). Esto funciona porque tenemos que el producto interior es un mapa de $<\cdot,\cdot>:\mathbb{R}^p\times\mathbb{R}^p\to\mathbb{R}$, que tiene las mismas propiedades que el kernel funcione $k:\mathbb{R}^p\times\mathbb{R}^p\to\mathbb{R}$. Como en el caso de que el común de Gauss radial de la función de base de kernel (RBF):

$$ K(x_i,x_j)=\exp\left(-\frac{{\left|\left|x_i-x_j\right|\right|}^2}{2\sigma^2}\right) $$

Como se mencionó en la página de la Wikipedia sobre el kernel de tipo perceptrón, se selecciona un subconjunto de tamaño $M$ de los insumos y el uso de una combinación lineal de ellos para producir nuestra salida,

$$ f(x) = \sum\limits_i^M \alpha_i y_i K(x,x_i) $$

Si has visto la máquina de soporte vectorial (SVM), te darás cuenta de la idénticos dual. Para seleccionar el subconjunto de tamaño $M$ a utilizar, podemos optimizar más de $\alpha_i$, lo que representa si la muestra $i$ es un soporte/base de vectores de nuestra solución. En la optimización de la $\alpha_i$ se incluyen los pesos de $\omega_i$ de la original de tipo perceptrón de optimización.

En cuanto a su pregunta acerca de no tener para el cálculo de la proyección, usted está en lo correcto, los datos de entrada de la matriz $X$ es todavía 2-dimensional. En el cálculo de la salida que sustituyó a un producto escalar con el kernel de la función, y esto es donde la 'implícita' cálculo en el espacio de características se produce.

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