Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Apprendre l'apprentissage automatisé

161 views

Published on

Vous en avez entendu parler et maintenant vous voulez en apprendre un peu plus, mais vous n’avez pas un doctorat en informatique. Pas de problèmes ! Dans cette présentation, vous apprendrez les bases de l’apprentissage automatisé (machine learning) à travers différents exemples. Vous connaîtrez les classificateurs Bayes, l’analyse de sentiment et les algorithmes génétiques. À la fin de cette présentation, vous en saurez un peu plus sur l’apprentissage automatisé, et comment les implémenter dans vos propres projets.

Published in: Internet
  • Be the first to comment

  • Be the first to like this

Apprendre l'apprentissage automatisé

  1. 1. www.spiria.com Apprendre l’apprentissage automatisé Présenté par JOEL LORD Web à Québec 4 avril, 2017
  2. 2. @joel__lord #WAQ17 JOEL LORD À propos de moi • Adorateur de Javascript • Bidouilleur • Enthousiaste des technologies
  3. 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. 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. 5. Intelligence Articielle et Apprentissage automatisé UN PEU PLUS AU SUJET DE…
  6. 6. @joel__lord #WAQ17 Intelligence artificielle QU’EST CE QUI EN EST
  7. 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. 8. @joel__lord #WAQ17 Intelligence Artificielle EXEMPLES CONCRETS
  9. 9. @joel__lord #WAQ17 Intelligence Artificielle EXEMPLES CONCRETES • Filtres de pouriels
  10. 10. @joel__lord #WAQ17 Intelligence Artificielle EXEMPLES CONCRETES • Filtres de polluriels • Prévention de la fraude
  11. 11. @joel__lord #WAQ17 Intelligence Artificielle EXEMPLES CONCRETES • Filtres de polluriels • Prévention de la fraude • Reconnaissance faciale
  12. 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. 13. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents
  14. 14. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google
  15. 15. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google • Chat Bots
  16. 16. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google • Chat Bots
  17. 17. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google • Chat Bots
  18. 18. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google • Chat Bots
  19. 19. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google • Chat Bots
  20. 20. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google • Chat Bots
  21. 21. @joel__lord #WAQ17 Apprentissage automatisé EXEMPLES CONCRETS • Thermostats intelligents • Cortana, Siri et Ok Google • Chat Bots
  22. 22. Big Data et apprentissage profond ENCORE UN PEU DE THÉORIE
  23. 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. 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. 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. 26. Supervisé vs non-supervisé UNE DERNIÈRE PETITE CHOSE…
  27. 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. 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. 29. Apprentissage automatisé DE RETOUR À LA PROGRAMMATION NORMALE
  30. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 42. Montrez moi ! CLASSIFICATION NAÏVE BAYÉSIENNE
  43. 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. 44. @joel__lord #WAQ17 Analyse de sentiments EXEMPLE DE CODE var twit = require("twit"); var sentiment = require("sentiment");
  45. 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. 46. @joel__lord #WAQ17 Analyse de sentiments EXEMPLE DE CODE stream1.on("tweet", function (tweet) { });
  47. 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. 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. 49. Montrez moi ! ANALYSE DE SENTIMENTS
  50. 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. 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. 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. 53. @joel__lord #WAQ17 Algorithmes génétiques L’IMPORTANCE DES MUTATIONS
  54. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 64. Faut le voir pour le croire ALGORITHMES GÉNÉTIQUES
  65. 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. 66. @joel__lord #WAQ17 Question IMPACT OF PARAMETERS ON GENETIC ALGORITHMS

×