library(tidyverse)
library(keras)
#install_keras() 1 seule fois sur la machine

On considère le jeu de données spam

library(kernlab)
data(spam)
spamX <- as.matrix(spam[,-58])
#spamY <- to_categorical(as.numeric(spam$type)-1, 2)
spamY <- as.numeric(spam$type)-1

que l’on sépare en un échantillon d’apprentissage et un échantillon test

set.seed(5678)
perm <- sample(4601,3000)
appX <- spamX[perm,]
appY <- spamY[perm]
validX <- spamX[-perm,]
validY <- spamY[-perm]
  1. A l’aide des données d’apprentissage, entrainer un perceptron simple avec une fonction d’activation sigmoïde. On utilisera 30 epochs et des batchs de taille 5.

On définit tout d’abord la structure du réseau, 1 seule couche ici de 1 neurone :

percep.sig <- keras_model_sequential() 
percep.sig %>% layer_dense(...)
summary(percep.sig)

On donne ensuite la fonction de perte, l’algorithme d’optimisation ainsi que le critère pour mesurer la performance du réseau :

percep.sig %>% compile(
  ...
)

On donne enfin dans fit les paramètres qui permettent d’entrainer le modèle (taille des batchs, nombre d’epochs…)

p.sig <- percep.sig %>% fit(
  ...
)

La fonction plot permet de visualiser la perte et pa performance en fonction du nombre d’epochs :

plot(p.sig)
  1. Faire de même avec la fonction d’activation softmax. On utilisera pour cela 2 neurones avec une sortie \(Y\) possédant la forme suivante.
spamY1 <- to_categorical(as.numeric(spam$type)-1, 2)
appY1 <- spamY1[perm,]
validY1 <- spamY1[-perm,]
percep.soft <- keras_model_sequential() 
percep.soft %>% layer_dense(...)
summary(percep.soft)
percep.soft %>% compile(
  ...
)
p.soft <- percep.soft %>% fit(
  ...
)
plot(p.soft)
  1. Comparer les performances des deux perceptrons sur les données de validation à l’aide de la fonction evaluate.

  2. Construire un ou deux réseaux avec deux couches cachées. On pourra faire varier les nombre de neurones dans ces couches. Comparer les performances des réseaux construits.

LS0tCnRpdGxlOiAiUsOpc2VhdXggZGUgbmV1cm9uZXMgYXZlYyBLZXJhcyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IAojICAgIGNzczogc3R5bGVzLmNzcwotLS0KCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShrZXJhcykKI2luc3RhbGxfa2VyYXMoKSAxIHNldWxlIGZvaXMgc3VyIGxhIG1hY2hpbmUKYGBgCgpPbiBjb25zaWTDqHJlIGxlIGpldSBkZSBkb25uw6llcyAqKnNwYW0qKgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KbGlicmFyeShrZXJubGFiKQpkYXRhKHNwYW0pCnNwYW1YIDwtIGFzLm1hdHJpeChzcGFtWywtNThdKQojc3BhbVkgPC0gdG9fY2F0ZWdvcmljYWwoYXMubnVtZXJpYyhzcGFtJHR5cGUpLTEsIDIpCnNwYW1ZIDwtIGFzLm51bWVyaWMoc3BhbSR0eXBlKS0xCmBgYAoKcXVlIGwnb24gc8OpcGFyZSBlbiB1biDDqWNoYW50aWxsb24gZCdhcHByZW50aXNzYWdlIGV0IHVuIMOpY2hhbnRpbGxvbiB0ZXN0CgpgYGB7cn0Kc2V0LnNlZWQoNTY3OCkKcGVybSA8LSBzYW1wbGUoNDYwMSwzMDAwKQphcHBYIDwtIHNwYW1YW3Blcm0sXQphcHBZIDwtIHNwYW1ZW3Blcm1dCnZhbGlkWCA8LSBzcGFtWFstcGVybSxdCnZhbGlkWSA8LSBzcGFtWVstcGVybV0KYGBgCgoxLiBBIGwnYWlkZSBkZXMgZG9ubsOpZXMgZCdhcHByZW50aXNzYWdlLCBlbnRyYWluZXIgdW4gcGVyY2VwdHJvbiBzaW1wbGUgYXZlYyB1bmUgZm9uY3Rpb24gZCdhY3RpdmF0aW9uICoqc2lnbW/Dr2RlKiouIE9uIHV0aWxpc2VyYSAzMCBlcG9jaHMgZXQgZGVzIGJhdGNocyBkZSB0YWlsbGUgNS4KCgpPbiBkw6lmaW5pdCB0b3V0IGQnYWJvcmQgbGEgc3RydWN0dXJlIGR1IHLDqXNlYXUsIDEgc2V1bGUgY291Y2hlIGljaSBkZSAxIG5ldXJvbmUgOgpgYGB7cn0KcGVyY2VwLnNpZyA8LSBrZXJhc19tb2RlbF9zZXF1ZW50aWFsKCkgCnBlcmNlcC5zaWcgJT4lIGxheWVyX2RlbnNlKC4uLikKYGBgCgpgYGB7cn0Kc3VtbWFyeShwZXJjZXAuc2lnKQpgYGAKCk9uIGRvbm5lIGVuc3VpdGUgbGEgZm9uY3Rpb24gZGUgcGVydGUsIGwnYWxnb3JpdGhtZSBkJ29wdGltaXNhdGlvbiBhaW5zaSBxdWUgbGUgY3JpdMOocmUgcG91ciBtZXN1cmVyIGxhIHBlcmZvcm1hbmNlIGR1IHLDqXNlYXUgOgoKYGBge3J9CnBlcmNlcC5zaWcgJT4lIGNvbXBpbGUoCiAgLi4uCikKYGBgCgpPbiBkb25uZSBlbmZpbiBkYW5zICoqZml0KiogbGVzIHBhcmFtw6h0cmVzIHF1aSBwZXJtZXR0ZW50IGQnZW50cmFpbmVyIGxlIG1vZMOobGUgKHRhaWxsZSBkZXMgYmF0Y2hzLCBub21icmUgZCdlcG9jaHMuLi4pCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwLnNpZyA8LSBwZXJjZXAuc2lnICU+JSBmaXQoCiAgLi4uCikKYGBgCgpMYSBmb25jdGlvbiAqKnBsb3QqKiBwZXJtZXQgZGUgdmlzdWFsaXNlciBsYSBwZXJ0ZSBldCBwYSBwZXJmb3JtYW5jZSBlbiBmb25jdGlvbiBkdSBub21icmUgZCdlcG9jaHMgOgoKYGBge3J9CnBsb3QocC5zaWcpCmBgYAoKMi4gRmFpcmUgZGUgbcOqbWUgYXZlYyBsYSBmb25jdGlvbiBkJ2FjdGl2YXRpb24gKipzb2Z0bWF4KiouIE9uIHV0aWxpc2VyYSBwb3VyIGNlbGEgMiBuZXVyb25lcyBhdmVjIHVuZSBzb3J0aWUgJFkkIHBvc3PDqWRhbnQgbGEgZm9ybWUgc3VpdmFudGUuCgpgYGB7cn0Kc3BhbVkxIDwtIHRvX2NhdGVnb3JpY2FsKGFzLm51bWVyaWMoc3BhbSR0eXBlKS0xLCAyKQphcHBZMSA8LSBzcGFtWTFbcGVybSxdCnZhbGlkWTEgPC0gc3BhbVkxWy1wZXJtLF0KYGBgCgoKCmBgYHtyfQpwZXJjZXAuc29mdCA8LSBrZXJhc19tb2RlbF9zZXF1ZW50aWFsKCkgCnBlcmNlcC5zb2Z0ICU+JSBsYXllcl9kZW5zZSguLi4pCmBgYAoKYGBge3J9CnN1bW1hcnkocGVyY2VwLnNvZnQpCmBgYAoKCmBgYHtyfQpwZXJjZXAuc29mdCAlPiUgY29tcGlsZSgKICAuLi4KKQpgYGAKCgpgYGB7cn0KcC5zb2Z0IDwtIHBlcmNlcC5zb2Z0ICU+JSBmaXQoCiAgLi4uCikKYGBgCgpgYGB7cn0KcGxvdChwLnNvZnQpCmBgYAoKMy4gQ29tcGFyZXIgbGVzIHBlcmZvcm1hbmNlcyBkZXMgZGV1eCBwZXJjZXB0cm9ucyBzdXIgbGVzIGRvbm7DqWVzIGRlIHZhbGlkYXRpb24gw6AgbCdhaWRlIGRlIGxhIGZvbmN0aW9uICoqZXZhbHVhdGUqKi4KCgoKNC4gQ29uc3RydWlyZSB1biBvdSBkZXV4IHLDqXNlYXV4IGF2ZWMgZGV1eCBjb3VjaGVzIGNhY2jDqWVzLiBPbiBwb3VycmEgZmFpcmUgdmFyaWVyIGxlcyBub21icmUgZGUgbmV1cm9uZXMgZGFucyBjZXMgY291Y2hlcy4gQ29tcGFyZXIgbGVzIHBlcmZvcm1hbmNlcyBkZXMgcsOpc2VhdXggY29uc3RydWl0cy4KCgo=