Descente de gradient stochastique

Calcul des poids d'un perceptron à sortie binaire

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.

  1. il y a 4 exemples : N <- 4
  2. chaque exemple possède 2 attributs : P <- 2
  3. on crée une matrice contenant les exemples : x.et <- matrix (c (0, 0, 1, 1, 0, 1, 0, 1), nrow = N)
  4. et un vecteur contenant les sorties attendues pour chacun des exemples : y.et <- c (0, 0, 0, 1)
  5. et on appelle la fonction : w <- perceptron.binaire (x.et, y.et, N, P)
  6. laquelle renvoie les poids qui ont été trouvés qui sont donc ici stockés dans l'objet w.
  7. On peut alors créer un graphique comme ceux que j'ai montrés en cours :
    • plot (x.et, col = y.et + 1, pch = 19, xlim = c (-.5, 1.5), ylim = c (-.5, 1.5))
    • abline (b = - w [1] / w [2], a = - w [3] / w [2], col = "green")

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 ...