machine learning pour tous
Post on 13-Jan-2017
1.457 Views
Preview:
TRANSCRIPT
MACHINE LEARNING POUR TOUSL'éducation a des racines amères, mais ses fruits sont doux
Forum AFUP, Paris, 2015
AGENDA
Comment enseigner à un ordinateur
Application à la recherche de code dans les commentaires
Des apprentissages complexes
INTERVENANT
Damien Seguy
Directeur technique à Exakat
Services d'analyse de code
APPLICATIONS
Detection de fraude et estimation du risque
Traduction automatique ou la transcription automatique
Reconnaissance de caractères ou de visages
Les diagnostics médicaux
La reconnaissance de bon code PHP
MACHINE LEARNING
Machine : l'ordinateur
Learning : apprentissage
Il se bâtit un modèle tout seul : phase d'entrainement
Il propose alors des prédictions : phase d'utilisation
APPRENTISSAGE SURPERVISÉ
DonnéesHistoriques Apprentissage
ModèleDonnées réelles
Résultat
APPLICATION PRATIQUE
Détecter du code dans les commentaires
Un problème classique
Un bon problème de machine learning
Complexe, pas de solution simple
Permet de faire des tests avec beaucoup de données
THE FANN EXTENSION
ext/fann (https://pecl.php.net/package/fann)
Fast Artificial Neural Network
http://leenissen.dk/fann/wp/
Réseaux Neuronaux en PHP
RÉSEAUX NEURONAUX
Imitation de la nature
Couche d'entrée
Couche de sortie
Neurones intermédiaires et couches de neurones
RÉSEAUX NEURONAUX
Imitation de la nature
Couche d'entrée
Couche de sortie
Neurones intermédiaires et couches de neurones
INITIALISATION<?php
$num_layers = 1; $num_input = 5; $num_neurons_hidden = 3; $num_output = 1; $ann = fann_create_standard($num_layers, $num_input, $num_neurons_hidden, $num_output);
// fonction d'activation fann_set_activation_function_hidden($ann,
FANN_SIGMOID_SYMMETRIC); fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);
EXPERTISE// Test if the if is in a compressed format
// none need yet
// icon
// There is a parser specified in `Parser::$KEYWORD_PARSERS`
// Show generated config file in a <textarea>
// numGlyphs + 1
// $a && $b and multidimensional
// $result should exist, regardless of $_message
// if(ob_get_clean()){
//$annots .= ' /StructParent ';
// $cfg['Servers'][$i]['controlpass'] = 'pmapass';
VECTEUR D'ENTRÉE
'length' : taille du commentaire
'countDollar' : présence du $
'countEqual' : présence du =
'countObjectOperator' présence du ->
'countSemicolon' : présence de ;
DONNÉES D'ENTRÉE46 5 1 825 0 0 0 1 0 37 2 0 0 0 0 55 2 2 0 1 1 61 2 1 3 1 1 ...
* This file is part of Exakat. * * Exakat is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Exakat is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Exakat. If not, see <http://www.gnu.org/licenses/>. * * The latest code can be found at <http://exakat.io/>. * */
// $x[3] or $x[] and multidimensional
//if ($round == 3) { die('Round '.$round);}
//$this->errors[] = $this->language->get('error_permission');
APPRENTISSAGE$max_epochs = 500000; $desired_error = 0.001;
// apprentissage lui-même if (fann_train_on_file($ann, 'leçon.data', $max_epochs, $epochs_between_reports, $desired_error)) { fann_save($ann, 'appris.out'); }fann_destroy($ann); ?>
APPRENTISSAGE
47 leçons
5 caractéristiques
3 neurones
Durée d'exécution : 5,711 s
EXPLOITATION
DonnéesHistoriques Apprentissage
ModèleDonnées réelles
Résultat
EXPLOITATION<?php
$ann = fann_create_from_file('appris.out');
$commentaire = "//$gvars = $this->getGraphicVars();";
$input = makeVector($commentaire); $resultats = fann_run($ann, $input);
if ($resultats[0] > 0.8) { print "\"$commentaire\" : -> $resultats[0] %\n"; }
?>
DONNÉES RÉELLES
Testé sur 14093 cas
Durée d'exécution 367.01ms
Trouvé 665 cas (5%)
99.999893 // $cfg['Servers'][$i]['controlhost'] = '';
99.999928 //$_SESSION['Import_message'] = $message->getDisplay();
/* 99.999928 if (defined('SESSIONUPLOAD')) { // write sessionupload back into the loaded PMA session
$sessionupload = unserialize(SESSIONUPLOAD); foreach ($sessionupload as $key => $value) { $_SESSION[$key] = $value; }
// remove session upload data that are not set anymore foreach ($_SESSION as $key => $value) { if (mb_substr($key, 0, mb_strlen(UPLOAD_PREFIX)) == UPLOAD_PREFIX && ! isset($sessionupload[$key]) ) { unset($_SESSION[$key]); } } }
98.780382 //LEAD_OFFSET = (0xD800 - (0x10000 >> 10)) = 55232
99.361396 // We have server(s) => apply default configuration 98.383027 // Duration = as configured
99.999928 // original -> translation mapping
97.590065 // = ( 59 x 84 ) mm = ( 2.32 x 3.31 ) in
Vrai positif Faux positif
Vrai négatif Faux négatif
Rapporté par le RN
Objectif
Vrai positif Faux positif
Vrai négatif Faux négatif
Rapporté par le RN
Objectif
// $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
//(isset($attribs['height'])?$attribs['height']: 1);
// if ($key != null) did not work for index "0"
// the PASSWORD() function
99.999923
73.295981
99.999851
2.104115
BILAN
665 code trouvés
72% de faux positifs
mais après nettoyage facile, il reste 23% de faux positif
Analyse de 14k commentaires en 367 ms// = ( 59 x 84 ) mm = ( 2.32 x 3.31 ) in
RETROACTION
Amélioration de la base d'entrainement
Ajout/retraits de caractéristiques
Changement de configuration du RN
Nouvel apprentissage
Nouvelle validation
Données réelles
DonnéesHistoriques
Apprentissage
Modèle Résultat
Rétraction
AMÉLIORATION DE LA BASE
Augmentation de la taille
Variété des situations
Inclusion des cas particuliers rencontrés
Accumulation d'expérience
REVUE DES CARACTÉRISTIQUES
Ajouts de nouvelles caractéristiques
Retrait des caractéristiques moins pertinentes
CONFIGURATION DU RN
Vecteurs d'entrée
Couches intermédiaires et neurones cachés
Fonction d'activation
Vecteur de sortie
PILOTAGE AUTOMATIQUE
Tester sur différentes configurations
Identifier les résultats
Idéalement, retirer les faux positifs
RésultatsNombre de couches
Nombre de neurones
SYNOPSIS
Selection d'une base de données d'apprentissage
Configuration du RN
Apprentissage
Validation sur des données de tests
Retroaction
AUTRES TECHNIQUES
Réseaux Bayésiens
Algorithmes génétiques
Apprentissage par renforcement
APPRENTISSAGE PAR RENFORCEMENT
Logiciel
Monde réel
RécompenseActionRéaction
FILTRES BAYESIENS
ALGORITHMES GÉNÉTIQUES
Population
Population
Selection
Reproduction
PopulationVariations
QUELQUES OUTILS
PHP ext/fann
Langage R
https://github.com/kachkaev/php-r
Scikit-learn
https://github.com/scikit-learn/scikit-learn
Mahout
https://mahout.apache.org/
MERCI@exakat
http://joind.in/talk/view/15265
AUTRES CONFIGURATIONS
Fonction d'activation
FANN_SIGMOID_SYMMETRIC
FANN_LINEAR
FANN_THRESHOLD
FANN_SIN_SYMMETRIC
Linéaire Seuil
Tangeante
Gaussienne Quadratique
Sigmoide
QUELLES APPLICATIONS?
Non-déterministe
Elimination de tout ce qui est systématique à trouver
Accès à l'expertise et aux vecteurs de caractéristiques
Couche finale après les résultats
Classification, priorisation, approximation rapide
top related