Pablo Tempone
Es un tipo de Red Neuronal que se utiliza para aprendizaje no supervisado.
5.Actualizar los pesos de los nodos en la vecindad de k utilizando la regla de aprendizaje de Kohonen: \[ Si\ i\ \in\ N_k \rightarrow\ w_i^{new} = w_i^{old}+\infty h_{ik}(x-w_i) \] \[ Si\ i\ \notin\ N_k \rightarrow\ w_i^{new} = w_i^{old} \] El parámetro \( \infty \) es la rapidez de aprendizaje, que varia entre 0 y 1, y \( h_{ik} \) es un kernel de vecindad y puede ser de diferentes tipos, por ejemplo, gaussiano: \[ h_{ik} = exp[-\frac{d(r_i-r_k)^2}{2\sigma^2}] \] Donde \( r_i \) y \( r_k \) son las posiciones de las celdas \( i \) y \( k \) en la grilla y \( \sigma \) es el radio de la vecindad.
Este paso del algoritmo es el que determina que los datos en dos grillas vecinas sean más similares entre sí que con los datos presentes en grillas más lejanas. El kernel gaussiano determina que la magnitud de los cambios en los pesos baje a medida que las grillas del vecindario están más alejadas de la que recibió el nuevo objeto.
6.Disminuir la rapidez de aprendizaje.
7.Repetir los pasos 3-6 hasta que los pesos se estabilicen.
# La primera vez:
# install.packages("kohonen")
library(kohonen)
url.tinto <- "http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"
tinto <- read.csv(url.tinto, header=T, sep=";")
tinto.st <- scale( tinto[, -12] )
tinto.som <- som(as.matrix( tinto.st), somgrid(4,4,"hexagonal"))
par(mfrow = c(1,2) )
plot(tinto.som, type="codes")
plot(tinto.som, type="mapping", col = tinto$quality, pch=19)
# La primera vez:
# install.packages("SOMbrero")
library(SOMbrero)
Usamos Iris como ejemplo.
set.seed(255)
# run the SOM algorithm with verbose set to TRUE
iris.som <- trainSOM(x.data=iris[,1:4], verbose=FALSE, nb.save=5)
iris.som
Self-Organizing Map object...
online learning, type: numeric
5 x 5 grid with square topology
neighbourhood type: gaussian
distance type: euclidean
par(mfrow = c(1,1) )
plot(iris.som, what="energy")
par(mfrow=c(2,2))
plot(iris.som, what="obs", type="color", variable=1, print.title=TRUE, main="Sepal length")
plot(iris.som, what="obs", type="color", variable=2, print.title=TRUE, main="Sepal width")
plot(iris.som, what="obs", type="color", variable=3, print.title=TRUE, main="Petal length")
plot(iris.som, what="obs", type="color", variable=4, print.title=TRUE, main="Petal width")