Code vu en cours pour optimiser les poids d'un perceptron à sortie binaire.
perceptron.binaire <- function (x, y, N, P, zero.un = TRUE,
eta = .01, seuil = 1e-6)
{
w <- runif (P + 1, min = -.2, max = .2)
erreur <- c ()
repeat {
w.prev <- w
p <- sample.int (N)
Err <- 0
for (i in p) {
e <- c (x [i,], 1)
if (zero.un)
s <- ifelse (w %*% e >= 0, 1, 0)
else
s <- sign (w %*% e)
E <- as.numeric (s - y [i])
Err <- Err + abs (E)
w <- w - eta * E * e
}
if ((Err == 0) | (sum (abs (w - w.prev)) < seuil))
break
}
return (w)
}
C'est une fonction qui s'utilise comme suit. Supposons que l'on veuille appliquer le perceptron à la fonction ET-logique à 2 entrées.
On va prendre un autre jeu d'exemples, connu sous le nom des iris. Chaque exemple correspond à un iris décrit par 4 attributs (longueur et largeur des sépales, longueur et largeur des pétales) et sa classe qui correspond à une espèce d'iris. 3 espèces sont représentées dans ce jeu de données. Il s'agît de déterminer l'espèce d'un iris à partir des 4 attributs.
Le jeu d'exemples est disponible dans une espèce de matrice dont chaque ligne correspond à un exemple. Il y a cinq colonnes : les 4 attributs puis l'espèce.
On utilisera deux attributs pour cet exercice. On construira donc la matrice x comme suit : x <- as.matrix (iris [, 3:4]).
La valeur ...