Advertisement
Advertisement

More Related Content

Similar to Apprendre l'apprentissage automatisé(20)

Advertisement

Apprendre l'apprentissage automatisé

  1. www.spiria.com Apprendre l’apprentissage automatisé Présenté par JOEL LORD Web à Québec 4 avril, 2017
  2. @joel__lord #WAQ17 JOEL LORD À propos de moi • Adorateur de Javascript • Bidouilleur • Enthousiaste des technologies
  3. @joel__lord #WAQ17 Agenda • Intelligence articifielle vs Apprentissage automatisé • Big Data et apprentissage profond • Les algo de base • Naïve Bayes Classifier • Sentiment Analysis • Genetic Algorithm
  4. @joel__lord #WAQ17 Agenda • Intelligence articifielle vs Apprentissage automatisé • Big Data et apprentissage profond • Les algo de base • Naïve Bayes Classifier • Sentiment Analysis • Genetic Algorithm • Le tout parsemé de démos
  5. Intelligence Articielle et Apprentissage automatisé UN PEU PLUS AU SUJET DE…
  6. @joel__lord #WAQ17 Intelligence artificielle QU’EST CE QUI EN EST
  7. @joel__lord #WAQ17 L'intelligence artificielle (IA) est l'intelligence fournie par les machines. En informatique, le domaine de la recherche sur l'IA se définit comme l'étude des «agents intelligents»: tout dispositif qui perçoit son environnement et prend des mesures qui maximisent ses chances de succès à un but.
  8. @joel__lord #WAQ17 Intelligence Artificielle EXEMPLES CONCRETS
  9. @joel__lord #WAQ17 Intelligence Artificielle EXEMPLES CONCRETES • Filtres de pouriels
  10. @joel__lord #WAQ17 Intelligence Artificielle EXEMPLES CONCRETES • Filtres de polluriels • Prévention de la fraude
  11. @joel__lord #WAQ17 Intelligence Artificielle EXEMPLES CONCRETES • Filtres de polluriels • Prévention de la fraude • Reconnaissance faciale
  12. @joel__lord #WAQ17 L'apprentissage automatisé est le sous- domaine de l'informatique qui donne aux «ordinateurs la possibilité d'apprendre sans être explicitement programmés».
  13. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents
  14. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google
  15. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google • Chat Bots
  16. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google • Chat Bots
  17. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google • Chat Bots
  18. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google • Chat Bots
  19. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google • Chat Bots
  20. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google • Chat Bots
  21. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google • Chat Bots
  22. Big Data et apprentissage profond ENCORE UN PEU DE THÉORIE
  23. @joel__lord #WAQ17 Big Data QU’EST-CE QUE C’EST? • Croissance exponentielle des données digitales • Trop complexe à traiter de façon traditionnelle • Principalement utilisée pour de la prédiction ou analyse des comportements des utilisateurs
  24. @joel__lord #WAQ17 Apprentissage profonD (Deep learning) QU’EST-CE QUE C’EST • Utilise des réseaux neuronaux pour traiter les données • Idéal pour des classsificateurs complexes • Un moyen de traiter le big data
  25. @joel__lord #WAQ17 Réseaux Neuronaux EUH…. WHAT? • Une collection de couches d’opérations • Déconstruction d’une problème complexe en tâches plus simples
  26. Supervisé vs non-supervisé UNE DERNIÈRE PETITE CHOSE…
  27. @joel__lord #WAQ17 Apprentissage supervisé QU’EST-CE QUE C’EST • Requiert une rétroaction • Débute avec aucune connaissance et augmente sa compréhension • Inutile lorsque les données sont de mauvaise qualité • Cas pratiques • Classification
  28. @joel__lord #WAQ17 Apprentissage non-supervisé CONTRAIRE DE SUPERVISÉ? • Besoin d’aucun feedback • Pratique lorsqu’il n’y a pas de bonne ou mauvais réponse • Aide à trouver des patterns ou structures de données • Cas pratiques • “Vous pourriez aussi être intéressé par…” • Grouper des clients selon leur comportement
  29. Apprentissage automatisé DE RETOUR À LA PROGRAMMATION NORMALE
  30. @joel__lord #WAQ17 Classification naïve bayésienne DÉFINITION • Algorithme supervisé • Un simple moyen de classifier et identifier l’information var classifier = new Classifier(); classifier.classify("J'adore le Javascript", POSITIVE); classifier.classify('WebStorm est génial', POSITIVE); classifier.classify('Non, Javascript est mauvais', NEGATIVE); classifier.classify("Je n'aime pas le brocoli", NEGATIVE); console.log(classifier.categorize("Javascript est génial")); // "positive" console.log(classifier.categorize("J'aime WebStorm")); // undefined
  31. @joel__lord #WAQ17 Classification naïve bayésienne DÉFINITION • Algorithme supervisé • Un simple moyen de classifier et identifier l’information • Mathématiquement exprimé par la fonction suivante
  32. @joel__lord #WAQ17 Classification naïve bayésienne DÉFINITION DE LA STRUCTURE var Classifier = function() { this.dictionaries = {}; }; Classifier.prototype.classify = function(text, group) { }; Classifier.prototype.categorize = function(text) { };
  33. @joel__lord #WAQ17 Classification naïve bayésienne CRÉATION DE LA CLASSIFICATION Classifier.prototype.classify = function(text, group) { var words = text.split(" "); this.dictionaries[group] ? "" : this.dictionaries[group] = {}; var self = this; words.map((w) => { if (self.dictionaries[group][w]) { self.dictionaries[group][w]++; } else { self.dictionaries[group][w] = 1; } }); };
  34. @joel__lord #WAQ17 Classification naïve bayésienne ET LE RESTE… Classifier.prototype.categorize = function(text) { var self = this; var probabilities = {}; var groups = []; var finals = {}; //Find the groups for (var k in this.dictionaries) {groups.push(k);} var sums = {}; var probs = {}; //Loop through the groups to calculate the sums of found text for (var j = 0; j < groups.length; j++) { if (!sums[text]) sums[text] = 0; if (!this.dictionaries[groups[j]][text]) this.dictionaries[groups[j]][text] = 0; sums[text] += this.dictionaries[groups[j]][text]; probs[groups[j]] = (this.dictionaries[groups[j]][text]) ? this.dictionaries[groups[j]][text] : 0; } // Perform calculations for (var j = 0; j < groups.length; j++) { (!probabilities[text]) ? probabilities[text] = {} : ""; (!probs[groups[j]]) ? probabilities[text][groups[j]] = 0 : probabilities[text][groups[j]] = probs[groups[j]]/sums[text]; } //Average out the probabilities for (var j = 0; j < groups.length; j++) { if (!finals[groups[j]]) finals[groups[j]] = []; finals[groups[j]].push(probabilities[text][groups[j]]); } for (var i = 0; i < groups.length; i++) { finals[groups[i]] = average(finals[groups[i]]); } //Find the largest probability var highestGroup = ""; var highestValue = 0; for (var group in finals) { if (finals[group] > highestValue) { highestGroup = group; highestValue = finals[group]; } } return highestGroup; };
  35. @joel__lord #WAQ17 Classification naïve bayésienne CATÉGORISATION Classifier.prototype.categorize = function(text) { var self = this; var probabilities = {}; var groups = []; var finals = {}; };
  36. @joel__lord #WAQ17 Classification naïve bayésienne CATÉGORISATION Classifier.prototype.categorize = function(text) { … //Find the groups for (var k in this.dictionaries) {groups.push(k);} var sums = {}; var probs = {}; };
  37. @joel__lord #WAQ17 Classification naïve bayésienne CATÉGORISATION Classifier.prototype.categorize = function(text) { … //Loop through the groups to calculate the sums of found text for (var j = 0; j < groups.length; j++) { if (!sums[text]) sums[text] = 0; if (!this.dictionaries[groups[j]][text]) this.dictionaries[groups[j]][text] = 0; sums[text] += this.dictionaries[groups[j]][text]; probs[groups[j]] = (this.dictionaries[groups[j]][text]) ? this.dictionaries[groups[j]][text] : 0; }};
  38. @joel__lord #WAQ17 Classification naïve bayésienne CATÉGORISATION Classifier.prototype.categorize = function(text) { … // Perform calculations for (var j = 0; j < groups.length; j++) { (!probabilities[text]) ? probabilities[text] = {} : ""; (!probs[groups[j]]) ? probabilities[text][groups[j]] = 0 : probabilities[text][groups[j]] = probs[groups[j]]/sums[text]; }};
  39. @joel__lord #WAQ17 Classification naïve bayésienne CATÉGORISATION Classifier.prototype.categorize = function(text) { … //Average out the probabilities for (var j = 0; j < groups.length; j++) { if (!finals[groups[j]]) finals[groups[j]] = []; finals[groups[j]].push(probabilities[text][groups[j]]); } for (var i = 0; i < groups.length; i++) { finals[groups[i]] = average(finals[groups[i]]); } };
  40. @joel__lord #WAQ17 Classification naïve bayésienne CATÉGORISATION Classifier.prototype.categorize = function(text) { … //Find the largest probability var highestGroup = ""; var highestValue = 0; for (var group in finals) { if (finals[group] > highestValue) { highestGroup = group; highestValue = finals[group]; } } return highestGroup; };
  41. @joel__lord #WAQ17 Classification naïve bayésienne SOMMAIRE Classifier.prototype.categorize = function(text) { var self = this; var probabilities = {}; var groups = []; var finals = {}; //Find the groups for (var k in this.dictionaries) {groups.push(k);} var sums = {}; var probs = {}; //Loop through the groups to calculate the sums of found text for (var j = 0; j < groups.length; j++) { if (!sums[text]) sums[text] = 0; if (!this.dictionaries[groups[j]][text]) this.dictionaries[groups[j]][text] = 0; sums[text] += this.dictionaries[groups[j]][text]; probs[groups[j]] = (this.dictionaries[groups[j]][text]) ? this.dictionaries[groups[j]][text] : 0; } // Perform calculations for (var j = 0; j < groups.length; j++) { (!probabilities[text]) ? probabilities[text] = {} : ""; (!probs[groups[j]]) ? probabilities[text][groups[j]] = 0 : probabilities[text][groups[j]] = probs[groups[j]]/sums[text]; } //Average out the probabilities for (var j = 0; j < groups.length; j++) { if (!finals[groups[j]]) finals[groups[j]] = []; finals[groups[j]].push(probabilities[text][groups[j]]); } for (var i = 0; i < groups.length; i++) { finals[groups[i]] = average(finals[groups[i]]); } //Find the largest probability var highestGroup = ""; var highestValue = 0; for (var group in finals) { if (finals[group] > highestValue) { highestGroup = group; highestValue = finals[group]; } } return highestGroup; };
  42. Montrez moi ! CLASSIFICATION NAÏVE BAYÉSIENNE
  43. @joel__lord #WAQ17 Analyse de sentiments COMMENT ÇA FONCTIONNE • Approche similaire aux classificateurs • Utilise une liste de mots (AFINN-165) et parfois les emoticons pour donner un score.
  44. @joel__lord #WAQ17 Analyse de sentiments EXEMPLE DE CODE var twit = require("twit"); var sentiment = require("sentiment");
  45. @joel__lord #WAQ17 Analyse de sentiments EXEMPLE DE CODE var keyword = "#waq17"; var t = new twit(require("./credentials")); var stream1 = t.stream("statuses/filter", {track: keyword});
  46. @joel__lord #WAQ17 Analyse de sentiments EXEMPLE DE CODE stream1.on("tweet", function (tweet) { });
  47. @joel__lord #WAQ17 Analyse de sentiments EXEMPLE DE CODE var score = sentiment(tweet.text); console.log("--- n New Tweetn" + tweet.text + "n" + (score > 0 ? "Positive" : "Negative"));
  48. @joel__lord #WAQ17 Analyse de sentiments EXEMPLE DE CODE var twit = require("twit"); var sentiment = require("sentiment"); var keyword = "#waq17"; var t = new twit(require("./credentials")); var stream1 = t.stream("statuses/filter", {track: keyword}); stream1.on("tweet", function (tweet) { var score = sentiment(tweet.text); console.log("--- n New Tweetn" + tweet.text + "n" + (score > 0 ? "Positive" : "Negative")); });
  49. Montrez moi ! ANALYSE DE SENTIMENTS
  50. @joel__lord #WAQ17 Algorithmes génétiques ÇA MANGE QUOI EN HIVER • Moyen de trouver une solution idéale en utilisant des solutions aléatoires • Cas pratiques • Moteurs d’avion • Hackrod
  51. @joel__lord #WAQ17 Algorithmes génétiques COMMENT ÇA FONCTIONNE • On crée une population d’individus aléatoires • On garde les plus proches de la solution • On garde des individus aléatoires • On introduit des mutations aléatores • On crée aléatoirement des “enfants” • On arrive magiquement à une solution!
  52. @joel__lord #WAQ17 Algorithmes génétiques COMMENT ÇA FONCTIONNE • On crée une population d’individus aléatoires • On garde les plus proches de la solution • On garde des individus aléatoires • On introduit des mutations aléatores • On crée aléatoirement des “enfants” • On arrive magiquement à une solution!
  53. @joel__lord #WAQ17 Algorithmes génétiques L’IMPORTANCE DES MUTATIONS
  54. @joel__lord #WAQ17 Algorithmes génétiques EXEMPLE DE CODE var population = []; const TARGET = 200; const MIN = 0; const MAX = TARGET - 1; const IND_COUNT = 4; const POP_SIZE = 100; const CLOSE_ENOUGH = 0.001; var RETAIN = 0.02; var RANDOM_SELECTION = 0.05; var MUTATION_PROBABILITY = 0.01;
  55. @joel__lord #WAQ17 Algorithmes génétiques EXEMPLE DE CODE //Declare Consts function randomInt(min, max) { return Math.round(random(min, max)); } function random(min, max) { if (max == undefined) { max = min; min = 0; } if (max == undefined) { max = 100; } return (Math.random()*(max-min)) + min; }
  56. @joel__lord #WAQ17 Algorithmes génétiques EXEMPLE DE CODE //Declare Consts function randomInt(min, max) {…} function random(min, max) {…} function fitness(individual) { sum = individual.reduce((a,b) => a + b, 0); return Math.abs(TARGET - sum); } function sortByFitness(population) { population.sort((a, b) => { var fitA = fitness(a); var fitB = fitness(b); return fitA > fitB ? 1 : -1; }); return population; }
  57. @joel__lord #WAQ17 Algorithmes génétiques EXEMPLE DE CODE //Declare Consts function randomInt(min, max) {…} function random(min, max) {…} function fitness(individual) {…} function sortByFitness(population) {…} function randomIndividual() { var individual = []; for (var i = 0; i < IND_COUNT; i++) { individual.push(random(MIN, MAX)); } return individual; } function randomPopulation(size) { var population = []; for (var i = 0; i < size; i++) { population.push(randomIndividual()); } return population; }
  58. @joel__lord #WAQ17 Algorithmes génétiques EXEMPLE DE CODE //Declare Consts function randomInt(min, max) {…} function random(min, max) {…} function fitness(individual) {…} function sortByFitness(population) {…} function randomIndividual() {…} function randomPopulation(size) {…} function mutate(population) { for (var i=0; i < population.length; i++) { if (MUTATION_PROBABILITY > Math.random()) { var index = randomInt(population[i].length); population[i][index] = random(MIN, MAX); } } return population; }
  59. @joel__lord #WAQ17 Algorithmes génétiques EXEMPLE DE CODE //Declare Consts function randomInt(min, max) {…} function random(min, max) {…} function fitness(individual) {…} function sortByFitness(population) {…} function randomIndividual() {…} function randomPopulation(size) {…} function mutate(population) {…} function reproduce(father, mother) { var half = father.length / 2; var child = []; child = child.concat(father.slice(0, half), mother.slice(half, mother.length)); return child; }
  60. @joel__lord #WAQ17 Algorithmes génétiques EXEMPLE DE CODE //Declare Consts function randomInt(min, max) {…} function random(min, max) {…} function fitness(individual) {…} function sortByFitness(population) {…} function randomIndividual() {…} function randomPopulation(size) {…} function mutate(population) {…} function reproduce(father, mother) {…} function evolve(population) { var parents = []; //Keep the best solutions parents=sortByFitness(population).slice(0,Math.round(POP_SIZE*RETAIN)); //Randomly add new elements for (var i = parents.length; i < POP_SIZE - parents.length; i++) { if (RANDOM_SELECTION > Math.random()) { parents.push(randomIndividual()); } } }
  61. @joel__lord #WAQ17 Algorithmes génétiques EXEMPLE DE CODE //Declare Consts function randomInt(min, max) {…} function random(min, max) {…} function fitness(individual) {…} function sortByFitness(population) {…} function randomIndividual() {…} function randomPopulation(size) {…} function mutate(population) {…} function reproduce(father, mother) {…} function evolve(population) { //Random Stuff parents = mutate(parents); var rndMax = parents.length - 1; while (parents.length < POP_SIZE) { var father = randomInt(rndMax); var mother = randomInt(rndMax); if (father != mother) { father = parents[father]; mother = parents[mother]; parents.push(reproduce(father, mother)); } } return parents;
  62. @joel__lord #WAQ17 Algorithmes génétiques EXEMPLE DE CODE //Declare Consts function randomInt(min, max) {…} function random(min, max) {…} function fitness(individual) {…} function sortByFitness(population) {…} function randomIndividual() {…} function randomPopulation(size) {…} function mutate(population) {…} function reproduce(father, mother) {…} function evolve(population) {…} function findSolution() { var population = randomPopulation(POP_SIZE); var generation = 0; while (fitness(population[0]) > CLOSE_ENOUGH) { generation++; population = evolve(population); } return {solution: population[0], generations: generation}; } var sol = findSolution();
  63. @joel__lord #WAQ17 Algorithmes génétiques EXEMPLE DE CODE var population = []; const TARGET = 200; const MIN = 0; const MAX = TARGET - 1; const IND_COUNT = 4; const POP_SIZE = 100; const CLOSE_ENOUGH = 0.001; var RETAIN = 0.02; var RANDOM_SELECTION = 0.05; var MUTATION_PROBABILITY = 0.01; function randomInt(min, max) { return Math.round(random(min, max)); } function random(min, max) { if (max == undefined) { max = min; min = 0; } if (max == undefined) { max = 100; } return (Math.random()*(max-min)) + min; } function fitness(individual) { sum = individual.reduce((a,b) => a + b, 0); return Math.abs(TARGET - sum); } function sortByFitness(population) { population.sort((a, b) => { var fitA = fitness(a); var fitB = fitness(b); return fitA > fitB ? 1 : -1; }); return population; } function randomIndividual() { var individual = []; for (var i = 0; i < IND_COUNT; i++) { individual.push(random(MIN, MAX)); } return individual; } function randomPopulation(size) { var population = []; for (var i = 0; i < size; i++) { population.push(randomIndividual()); } return population; } function mutate(population) { for (var i=0; i < population.length; i++) { if (MUTATION_PROBABILITY > Math.random()) { var index = randomInt(population[i].length); population[i][index] = random(MIN, MAX); } } return population; } function reproduce(father, mother) { var half = father.length / 2; var child = []; child = child.concat(father.slice(0, half), mother.slice(half, mother.length)); return child; } function evolve(population) { var parents = []; //Keep the best solutions parents = sortByFitness(population).slice(0, Math.round(POP_SIZE*RETAIN)); //Randomly add new elements for (var i = parents.length; i < POP_SIZE - parents.length; i++) { if (RANDOM_SELECTION > Math.random()) { parents.push(randomIndividual()); } } //Mutate elements parents = mutate(parents); var rndMax = parents.length - 1; while (parents.length < POP_SIZE) { var father = randomInt(rndMax); var mother = randomInt(rndMax); if (father != mother) { father = parents[father]; mother = parents[mother]; parents.push(reproduce(father, mother)); } } return parents; } function findSolution() { var population = randomPopulation(POP_SIZE); var generation = 0; while (fitness(population[0]) > CLOSE_ENOUGH) { generation++; population = evolve(population); } return {solution: population[0], generations: generation}; } var sol = findSolution(); console.log("Found solution in " + sol.generations + " generations.", sol.solution);
  64. Faut le voir pour le croire ALGORITHMES GÉNÉTIQUES
  65. DOCUMENT CONFIDENTIEL, TOUT DROIT RÉSERVÉ PRESENTED BY That’s all folks ! Questions? JOEL LORD April 4th, 2017 TWITTER: @JOEL__LORD GITHUB: HTTP://GITHUB.COM/JOELLORD
  66. @joel__lord #WAQ17 Question IMPACT OF PARAMETERS ON GENETIC ALGORITHMS
Advertisement