SlideShare ist ein Scribd-Unternehmen logo
1 von 66
Downloaden Sie, um offline zu lesen
www.spiria.com
Apprendre
l’apprentissage
automatisé
Présenté par
JOEL LORD
Web à Québec
4 avril, 2017
@joel__lord
#WAQ17
JOEL LORD
À propos de moi
• Adorateur de Javascript
• Bidouilleur
• Enthousiaste des
technologies
@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
@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
Intelligence Articielle et
Apprentissage automatisé
UN PEU PLUS AU SUJET DE…
@joel__lord
#WAQ17
Intelligence artificielle
QU’EST CE QUI EN EST
@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.
@joel__lord
#WAQ17
Intelligence Artificielle
EXEMPLES CONCRETS
@joel__lord
#WAQ17
Intelligence Artificielle
EXEMPLES CONCRETES
• Filtres de pouriels
@joel__lord
#WAQ17
Intelligence Artificielle
EXEMPLES CONCRETES
• Filtres de polluriels
• Prévention de la fraude
@joel__lord
#WAQ17
Intelligence Artificielle
EXEMPLES CONCRETES
• Filtres de polluriels
• Prévention de la fraude
• Reconnaissance faciale
@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».
@joel__lord
#WAQ17
Apprentissage automatisé
EXEMPLES CONCRETS
• Thermostats intelligents
@joel__lord
#WAQ17
Apprentissage automatisé
EXEMPLES CONCRETS
• Thermostats intelligents
• Cortana, Siri et Ok Google
@joel__lord
#WAQ17
Apprentissage automatisé
EXEMPLES CONCRETS
• Thermostats intelligents
• Cortana, Siri et Ok Google
• Chat Bots
@joel__lord
#WAQ17
Apprentissage automatisé
EXEMPLES CONCRETS
• Thermostats intelligents
• Cortana, Siri et Ok Google
• Chat Bots
@joel__lord
#WAQ17
Apprentissage automatisé
EXEMPLES CONCRETS
• Thermostats intelligents
• Cortana, Siri et Ok Google
• Chat Bots
@joel__lord
#WAQ17
Apprentissage automatisé
EXEMPLES CONCRETS
• Thermostats intelligents
• Cortana, Siri et Ok Google
• Chat Bots
@joel__lord
#WAQ17
Apprentissage automatisé
EXEMPLES CONCRETS
• Thermostats intelligents
• Cortana, Siri et Ok Google
• Chat Bots
@joel__lord
#WAQ17
Apprentissage automatisé
EXEMPLES CONCRETS
• Thermostats intelligents
• Cortana, Siri et Ok Google
• Chat Bots
@joel__lord
#WAQ17
Apprentissage automatisé
EXEMPLES CONCRETS
• Thermostats intelligents
• Cortana, Siri et Ok Google
• Chat Bots
Big Data et apprentissage
profond
ENCORE UN PEU DE THÉORIE
@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
@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
@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
Supervisé vs non-supervisé
UNE DERNIÈRE PETITE CHOSE…
@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
@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
Apprentissage automatisé
DE RETOUR À LA PROGRAMMATION NORMALE
@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
@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
@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) {
};
@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;
}
});
};
@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;
};
@joel__lord
#WAQ17
Classification naïve bayésienne
CATÉGORISATION
Classifier.prototype.categorize = function(text) {
var self = this;
var probabilities = {};
var groups = [];
var finals = {};
};
@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 = {};
};
@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;
}};
@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];
}};
@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]]);
}
};
@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;
};
@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;
};
Montrez moi !
CLASSIFICATION NAÏVE BAYÉSIENNE
@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.
@joel__lord
#WAQ17
Analyse de sentiments
EXEMPLE DE CODE
var twit = require("twit");
var sentiment = require("sentiment");
@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});
@joel__lord
#WAQ17
Analyse de sentiments
EXEMPLE DE CODE
stream1.on("tweet", function (tweet) {
});
@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"));
@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"));
});
Montrez moi !
ANALYSE DE SENTIMENTS
@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
@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!
@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!
@joel__lord
#WAQ17
Algorithmes génétiques
L’IMPORTANCE DES MUTATIONS
@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;
@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;
}
@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;
}
@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;
}
@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;
}
@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;
}
@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());
}
}
}
@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;
@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();
@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);
Faut le voir pour le croire
ALGORITHMES GÉNÉTIQUES
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
@joel__lord
#WAQ17
Question
IMPACT OF PARAMETERS ON GENETIC ALGORITHMS

Weitere ähnliche Inhalte

Ähnlich wie Apprendre l'apprentissage automatisé

AUTOMATED DATA EXPLORATION - Building efficient analysis pipelines with Dask
AUTOMATED DATA EXPLORATION - Building efficient analysis pipelines with DaskAUTOMATED DATA EXPLORATION - Building efficient analysis pipelines with Dask
AUTOMATED DATA EXPLORATION - Building efficient analysis pipelines with Dask
Víctor Zabalza
 
Apache lucene - full text search
Apache lucene - full text searchApache lucene - full text search
Apache lucene - full text search
Marcelo Cure
 
07-Classification.pptx
07-Classification.pptx07-Classification.pptx
07-Classification.pptx
Shree Shree
 

Ähnlich wie Apprendre l'apprentissage automatisé (20)

State of Play. Data Science on Hadoop in 2015 by SEAN OWEN at Big Data Spain ...
State of Play. Data Science on Hadoop in 2015 by SEAN OWEN at Big Data Spain ...State of Play. Data Science on Hadoop in 2015 by SEAN OWEN at Big Data Spain ...
State of Play. Data Science on Hadoop in 2015 by SEAN OWEN at Big Data Spain ...
 
FIFA fails, Guy Kawasaki and real estate in SF - find out about all three by ...
FIFA fails, Guy Kawasaki and real estate in SF - find out about all three by ...FIFA fails, Guy Kawasaki and real estate in SF - find out about all three by ...
FIFA fails, Guy Kawasaki and real estate in SF - find out about all three by ...
 
Big Data Analytics: Finding diamonds in the rough with Azure
Big Data Analytics: Finding diamonds in the rough with AzureBig Data Analytics: Finding diamonds in the rough with Azure
Big Data Analytics: Finding diamonds in the rough with Azure
 
Object Oriented Programming
Object Oriented ProgrammingObject Oriented Programming
Object Oriented Programming
 
AUTOMATED DATA EXPLORATION - Building efficient analysis pipelines with Dask
AUTOMATED DATA EXPLORATION - Building efficient analysis pipelines with DaskAUTOMATED DATA EXPLORATION - Building efficient analysis pipelines with Dask
AUTOMATED DATA EXPLORATION - Building efficient analysis pipelines with Dask
 
Elasticsearch - Zero to Hero
Elasticsearch - Zero to HeroElasticsearch - Zero to Hero
Elasticsearch - Zero to Hero
 
Apache lucene - full text search
Apache lucene - full text searchApache lucene - full text search
Apache lucene - full text search
 
Querying your database in natural language by Daniel Moisset PyData SV 2014
Querying your database in natural language by Daniel Moisset PyData SV 2014Querying your database in natural language by Daniel Moisset PyData SV 2014
Querying your database in natural language by Daniel Moisset PyData SV 2014
 
Quepy
QuepyQuepy
Quepy
 
The Road to Data Science - Joel Grus, June 2015
The Road to Data Science - Joel Grus, June 2015The Road to Data Science - Joel Grus, June 2015
The Road to Data Science - Joel Grus, June 2015
 
To scale or not to scale: Key/Value, Document, SQL, JPA – What’s right for my...
To scale or not to scale: Key/Value, Document, SQL, JPA – What’s right for my...To scale or not to scale: Key/Value, Document, SQL, JPA – What’s right for my...
To scale or not to scale: Key/Value, Document, SQL, JPA – What’s right for my...
 
Leveraging NLP and Deep Learning for Document Recommendations in the Cloud
Leveraging NLP and Deep Learning for Document Recommendations in the CloudLeveraging NLP and Deep Learning for Document Recommendations in the Cloud
Leveraging NLP and Deep Learning for Document Recommendations in the Cloud
 
Get connected with python
Get connected with pythonGet connected with python
Get connected with python
 
SQL vs NoSQL
SQL vs NoSQLSQL vs NoSQL
SQL vs NoSQL
 
07-Classification.pptx
07-Classification.pptx07-Classification.pptx
07-Classification.pptx
 
Penerapan text mining menggunakan python
Penerapan text mining menggunakan pythonPenerapan text mining menggunakan python
Penerapan text mining menggunakan python
 
Cool bonsai cool - an introduction to ElasticSearch
Cool bonsai cool - an introduction to ElasticSearchCool bonsai cool - an introduction to ElasticSearch
Cool bonsai cool - an introduction to ElasticSearch
 
From keyword-based search to language-agnostic semantic search
From keyword-based search to language-agnostic semantic searchFrom keyword-based search to language-agnostic semantic search
From keyword-based search to language-agnostic semantic search
 
Harnessing The Power of Search - Liferay DEVCON 2015, Darmstadt, Germany
Harnessing The Power of Search - Liferay DEVCON 2015, Darmstadt, GermanyHarnessing The Power of Search - Liferay DEVCON 2015, Darmstadt, Germany
Harnessing The Power of Search - Liferay DEVCON 2015, Darmstadt, Germany
 
Compass Framework
Compass FrameworkCompass Framework
Compass Framework
 

Mehr von Joel Lord

Mehr von Joel Lord (20)

From Ceasar Cipher To Quantum Cryptography
From Ceasar Cipher To Quantum CryptographyFrom Ceasar Cipher To Quantum Cryptography
From Ceasar Cipher To Quantum Cryptography
 
I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)
 
I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)
 
I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)
 
Forgot Password? Yes I Did!
Forgot Password? Yes I Did!Forgot Password? Yes I Did!
Forgot Password? Yes I Did!
 
I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)
 
Mot de passe oublié? Absolument!
Mot de passe oublié? Absolument!Mot de passe oublié? Absolument!
Mot de passe oublié? Absolument!
 
Asynchronicity: concurrency. A tale of
Asynchronicity: concurrency. A tale ofAsynchronicity: concurrency. A tale of
Asynchronicity: concurrency. A tale of
 
Learning Machine Learning
Learning Machine LearningLearning Machine Learning
Learning Machine Learning
 
Forgot Password? Yes I Did!
Forgot Password? Yes I Did!Forgot Password? Yes I Did!
Forgot Password? Yes I Did!
 
WTH is a JWT
WTH is a JWTWTH is a JWT
WTH is a JWT
 
I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)
 
Forgot Password? Yes I Did!
Forgot Password? Yes I Did!Forgot Password? Yes I Did!
Forgot Password? Yes I Did!
 
I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)
 
WTH is a JWT
WTH is a JWTWTH is a JWT
WTH is a JWT
 
Asynchonicity: concurrency. A tale of
Asynchonicity: concurrency. A tale ofAsynchonicity: concurrency. A tale of
Asynchonicity: concurrency. A tale of
 
I Don't Care About Security
I Don't Care About Security I Don't Care About Security
I Don't Care About Security
 
I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)
 
I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)
 
Secure your SPA with Auth0
Secure your SPA with Auth0Secure your SPA with Auth0
Secure your SPA with Auth0
 

Kürzlich hochgeladen

一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
ayvbos
 
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdfpdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
JOHNBEBONYAP1
 
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girlsRussian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Monica Sydney
 
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
ydyuyu
 
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi EscortsIndian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Monica Sydney
 
75539-Cyber Security Challenges PPT.pptx
75539-Cyber Security Challenges PPT.pptx75539-Cyber Security Challenges PPT.pptx
75539-Cyber Security Challenges PPT.pptx
Asmae Rabhi
 

Kürzlich hochgeladen (20)

Nagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime Nagercoil
Nagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime NagercoilNagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime Nagercoil
Nagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime Nagercoil
 
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
 
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
 
Meaning of On page SEO & its process in detail.
Meaning of On page SEO & its process in detail.Meaning of On page SEO & its process in detail.
Meaning of On page SEO & its process in detail.
 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirt
 
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdfpdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
 
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girlsRussian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
 
Power point inglese - educazione civica di Nuria Iuzzolino
Power point inglese - educazione civica di Nuria IuzzolinoPower point inglese - educazione civica di Nuria Iuzzolino
Power point inglese - educazione civica di Nuria Iuzzolino
 
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
 
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
 
Vip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac Room
Vip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac RoomVip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac Room
Vip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac Room
 
Trump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts SweatshirtTrump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts Sweatshirt
 
best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...
best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...
best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...
 
20240507 QFM013 Machine Intelligence Reading List April 2024.pdf
20240507 QFM013 Machine Intelligence Reading List April 2024.pdf20240507 QFM013 Machine Intelligence Reading List April 2024.pdf
20240507 QFM013 Machine Intelligence Reading List April 2024.pdf
 
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrStory Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
 
Best SEO Services Company in Dallas | Best SEO Agency Dallas
Best SEO Services Company in Dallas | Best SEO Agency DallasBest SEO Services Company in Dallas | Best SEO Agency Dallas
Best SEO Services Company in Dallas | Best SEO Agency Dallas
 
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi EscortsIndian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
 
75539-Cyber Security Challenges PPT.pptx
75539-Cyber Security Challenges PPT.pptx75539-Cyber Security Challenges PPT.pptx
75539-Cyber Security Challenges PPT.pptx
 
20240508 QFM014 Elixir Reading List April 2024.pdf
20240508 QFM014 Elixir Reading List April 2024.pdf20240508 QFM014 Elixir Reading List April 2024.pdf
20240508 QFM014 Elixir Reading List April 2024.pdf
 
Microsoft Azure Arc Customer Deck Microsoft
Microsoft Azure Arc Customer Deck MicrosoftMicrosoft Azure Arc Customer Deck Microsoft
Microsoft Azure Arc Customer Deck Microsoft
 

Apprendre l'apprentissage automatisé

  • 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…
  • 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.
  • 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».
  • 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!
  • 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