vendredi 27 décembre 2019

Détection des anomalies - Diapos

La détection des anomalies consiste à repérer dans les données les observations qui s'écartent significativement des autres, soit par les valeurs de certaines variables prises individuellement (une personne faisant 2m20), soit par des combinaisons de valeurs incongrues (1m90 pour 50 kg). Ces observations sont par nature rares et éparses, elles peuvent être consécutives à l'intégration par inadvertance d'individus d'autres populations dans un échantillon de données (un basketteur intégré dans un fichier recensant des sumotoris).

Les  valeurs atypiques faussent souvent les résultats fournis par les algorithmes de machine learning. Leur identification et leur traitement sont des aspects importants de la pratique de la data science. Mais leur détection peut être également une finalité en soi, lorsqu'on pense par exemple qu'elles sont le fruit d'un comportement déviant générant des observations inhabituelles (tentative de fraude d'un opérateur lors d'un accès sur un serveur, etc.).

Dans ce support, je présente la méthode LOF (local outlier factor). Elle cherche à identifier les observations atypiques en comparant les densités locales des points dans un voisinage dont le périmètre (le nombre de voisins) est un paramètre de l'algorithme. Je détaille les calculs et je montre le comportement de l'approche sur un jeu de données en faisant appel à la librairie Rlof pour R. Un tutoriel sous Python suivra.

Mots-clés : anomalies, points atypiques, points aberrants, nouveautés, anomaly detection, outlier detection, novelty detection, local outlier factor, logiciel R, package rlof, reachability distance
Support de cours : Local Outlier Factor
Références :
Breunig, M. M.; Kriegel, H.-P.; Ng, R. T.; Sander, J. (2000). LOF: Identifying Density-based Local Outliers. Proceedings of the 2000 ACM SIGMOD International Conference on Management of Data. SIGMOD. pp. 93–104.
Tutoriel Tanagra, "Détection univariée des points aberrants", mai 2008.
Rakotomalala R., "Pratique de la régression", chapitre 2 "Points aberrants et influents", mai 2015.

mardi 24 décembre 2019

Implémentation du Naive Bayes sous R

J'ai fait travailler mes étudiants sur la programmation sous R du classifieur bayésien naïf récemment. Schématiquement, la méthode est relativement simple à implémenter, surtout lorsque toutes les variables explicatives sont qualitatives. Il en est de même lorsqu'elles sont toutes quantitatives. Il y a en revanche des choix stratégiques à mettre en place lorsqu'elles sont mixtes. Je pensais que la principale difficulté viendrait de cette partie. Non en réalité. Je me suis rendu compte après coup que le principal écueil était de développer une implémentation performante du déploiement, lorsque nous appliquons le modèle sur des individus supplémentaires. Parce que R possède des caractéristiques qui lui sont propres, les temps d'exécution peuvent varier dans des proportions très importantes selon notre habilité à en tirer profit.

Dans ce tutoriel, nous nous penchons sur la programmation des fonctions fit() - construction du modèle sur un jeu de données - et predict() - application du modèle en prédiction sur un jeu de données - du Naive Bayes. La variable cible est forcément qualitative. Nous nous en tiendrons au cas des variables explicatives qualitatives. L'objectif n'est pas de proposer une resucée du naive bayes. Plusieurs packages disponibles sur le CRAN s'en chargent très bien. Il s'agit surtout pour nous d'étudier l'impact des choix d'implémentation sur les temps d'exécution sous R.

Mots-clés : programmation R, logiciel R, modèle d'indépendance conditionnelle, naive bayes classifier, classification naïve bayésienne
Didacticiel : Naive Bayes sous R
Code source + Données : Heart - Large - Long
Références :
Tutoriel Tanagra, "Le classifieur Bayésien Naïf revisité", mars 2010.
Tutoriel Tanagra, "Programmer efficacement sous R", février 2019.

dimanche 8 décembre 2019

Word2Vec avec H2O sous Python

Ce tutoriel fait suite au support de cours consacré au prolongement lexical (word embedding) où nous avions étudié l'algorithme "Word2Vec" dans le cadre de la fouille de textes (text mining ; on parle aussi de NLP, natural language processing). Nous mettons en œuvre la technique sur un jeu de données jouet tiré de l'ouvrage de Coelho et Richert (2015). Le premier objectif est de représenter les termes du corpus dans un espace de dimension réduite en les contextualisant c.-à-d. en tenant compte de leur voisinage. Le second consiste à calculer les coordonnées des documents pour apprécier leurs proximités dans ce nouvel espace de représentation ainsi défini.

Nous nous appuyons sur la librairie H2O pour Python. Nous l'avions déjà exploré à plusieurs reprises précédemment (par ex. "Machine Learning avec H2O", janvier 2019). L'enjeu dans notre contexte est de savoir préparer correctement le corpus pour que l'on puisse faire appel aux fonctions dédiées. Cette tâche est quand-même assez particulière sous H20. Nous y porterons toute notre attention – de la manière la plus didactique possible, voire scolaire – pour ne pas perdre le lecteur en route.

Mots-clés : word2vec, word embedding, prolongement des mots, prolongement lexical, deep learning, python, package h2o, package nltk, text mining, nlp
Didacticiel : Word2Vec avec H2O
Code source + données : H2O + NLTK - Prog. Python
Références :
Tutoriel Tanagra, "Deep learning : l'algorithme Word2Vec", décembre 2019.

samedi 7 décembre 2019

Deep learning : l'algorithme Word2Vec

Le prolongement lexical ou word embedding est une technique de text mining qui permet de décrire les termes d'un corpus à l'aide d'un vecteur de valeurs numériques (de taille paramétrable), de manière à ce que les termes qui apparaissent dans des contextes similaires soient proches (au sens d'une distance quelconque, la distance cosinus par exemple).

Dans ce support,  je présente la méthode word2vec basée sur un algorithme de deep learning (réseau de neurones multicouche). Elle traduit la notion de contexte par le voisinage des mots dont on peut moduler l'amplitude. De la description des termes, nous pouvons dériver une description matricielle des documents, tableau de données à partir de laquelle nous pouvons appliquer les techniques usuelles de machine learning (catégorisation, clustering, etc.).

Mots-clés : word embedding, prolongement de mots, prolongement lexical, word2vec, text mining, réduction de la dimensionnalité, deep learning
Support de cours : Word2Vec – Deep Learning
Références :
Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. "Efficient Estimation of Word Representations in Vector Space." In Proc. of Workshop at ICLR. (Sep 2013).

dimanche 1 décembre 2019

Deep learning avec PyTorch sous Python

Dans ce document, nous nous attelons à l'instanciation, l'apprentissage et l'évaluation de perceptrons simples et multicouches avec PyTorch. Nous travaillons à partir d'un fichier de données que nous devons importer et préparer au préalable. Toutes les étapes seront détaillées. J'insisterai sur la manipulation des "tensor", le format de vecteurs et matrices qu'utilise la librairie pour ses manipulations internes. Je m'attarderai également sur la construction un peu particulière des réseaux qui nécessite une connaissance (très basique, n'exagérons rien) des mécanismes de classes (l'héritage et la surcharge des méthodes) sous Python.

Mots-clés : deep learning, perceptron simple et multicouche, réseau de neurones, pytorch, python
Didacticiel : PyTorch for deep learning
Code source + données : Breast PyTorch
Références :
PyTorch, https://pytorch.org/
Tutoriel Tanagra, "Deep learning : perceptrons simples et multicouches", novembre 2018.