dimanche 28 avril 2019

Multidimensional scaling sous R

Ce tutoriel vient illustrer mon support de cours consacré au positionnement multidimensionnel (Multidimensional Scaling en anglais, MDS). L'objectif est de représenter dans le plan les positions relatives des villes en prenant en entrée les distances kilométriques des routes qui les relient. C'est une application très parlante et/mais ressassée du MDS (exemple pour les villes de France). J'essaie d'être original ici en traitant les villes de Madagascar.

Mon idée initiale était de récupérer les informations directement sous R via les API des services de cartographie en ligne (Google Maps, Bing Maps, OpenStreetMap, etc.). Mais la tâche ne s'est pas avérée aussi triviale que je ne le pensais. J'en parle justement dans ce document où je montre comment  accéder aux données dans une application R à l'aide des packages spécialisés, en ce qui concerne OpenStreetMap tout du moins. Souhaitant traiter les villes principales des provinces de Madagascar, et leur nombre étant relativement retreint (6 provinces), j'ai finalement décidé de recueillir manuellement les distances sur Google Maps.

Mots-clés : positionnement multidimensionnel, mds classique, mds non-métrique, cmdscale, isoMds, package MASS, logiciel R, Madagascar, provinces
Données et programme R : MDS sous R
Références
R. Rakotomalala, "Positionnement multidimensionnel - Diapos", avril 2019.

samedi 27 avril 2019

OpenStreetMap sous R

Pour illustrer mon support de cours consacré au "multidimensional scaling" (MDS), je souhaitais reproduire le sempiternel exemple du positionnement des villes dans le plan à partir de leurs distances routières réciproques. Le choix d'un pays original me permettrait de me démarquer, à savoir Madagascar que je connais très bien.

Obtenir ces données en ligne sur Google Maps via un navigateur est très facile. Mais bon, tant qu'à faire, ce serait plus fun de les capter dans notre application R en faisant appel aux API dédiées, via les packages qui savent les manipuler (ex. mapsapi). Et patatras, j'apprends qu'il faut s'enregistrer pour obtenir une clé. L'accès reste gratuit certes tant qu'on reste en deçà d'une certaine limite, mais il faut – quoiqu'il en soit – fournir des informations bancaires lorsqu'on active son compte. Eh bien non ! Moi, je ne veux pas.

Je me suis tourné vers les alternatives gratuites, libres, sans enquiquinements. OpenStreetMap me semblait être une solution tout à fait valable. J'ai galéré ! Il y a certes de très nombreux tutoriels sur le net. Mais la majorité travaillent à partir de données préparées dans des formats spécifiques encapsulées dans des packages. Je n'ai pas trouvé un exemple clair et simple qui travaille exclusivement avec des données récupérées en ligne. J'ai cherché pourtant. J'ai donc remis à plus tard mon tutoriel sur les applications du MDS pour m'orienter vers la manipulation des données obtenues via l'API OpenStreetMap. La mission est simple : afficher la carte de Madagascar, obtenir la distance entre Antananarivo et Fianarantsoa, afficher le trajet en ces deux villes.

Mots-clés : R, package openstreetmap, package osrm, package jsonlite, package ggplot2, Madagascar, Antananarivo, Fianarantsoa
Références :

jeudi 25 avril 2019

Positionnement multidimensionnel - Diapos

Le positionnement multidimensionnel (multidimensional scaling en anglais, MDS) est une technique de visualisation qui permet de visualiser dans un repère euclidien (à p = 2 ou p = 3 dimensions le plus souvent) les positions relatives d'objets décrits par une matrice de distances, de dissimilarités ou de similarités.

Ce support décrit les arcanes de la méthode. Il met l'accent sur le MDS classique dans un premier temps, avant de généraliser la présentation aux approches métriques et non-métriques. Les aspects pratiques sont détaillés avec force exemples : l'évaluation de la qualité de la représentation, le rapprochement avec l'ACP (analyse en composantes principales), le problème des valeurs propres négatives, le positionnement des individus supplémentaires, le traitement d'une matrice de corrélations,…

Mots-clés : positionnement multidimensionnel, multidimensional scaling, MDS, matrice de distance, stress, distance euclidienne, dissimilarité, similarité, principal coordinates analysis, PCoA, ACP, analyse en composantes principales, matrice de corrélations, MDS métrique, MDS non-métrique, produit scalaire
Support : MDS
Données : autos_mds
Références :
Debois D., "Une introduction au positionnement multidimensionnel", Revue MODULAD, n°32, p.1-28, 2005.

mercredi 17 avril 2019

Programmer efficacement sous Python

J'avais écrit récemment un document à propos de l'optimisation des programmes sous R ("Programmer efficacement sous R", février 2019). Dans ce tutoriel, nous étudierons cette fois-ci comment déboguer, analyse et optimiser du code en Python, via l'EDI (Environnement de Développement Intégré) SPYDER livré avec la distribution ANACONDA.

D'autres environnements de développements existent pour Python ("Here are the most popular Python IDEs / Editors", KDnuggets, Décembre 2018) mais, pour ma part, SPYDER me convient très bien au jour le jour. Je le conseille souvent à mes étudiants, en partie à cause de sa similitude avec RStudio. L'interface leur étant familière, le passage d'un langage à l'autre est moins abrupt.

Tout comme pour R, nous prétexterons de l'implémentation du leave-one-out (LOOCV – Leave-One-Out Cross-Validation) en modélisation prédictive (analyse discriminante linéaire) pour explorer les fonctionnalités proposées par SPYDER.

Mots-clés : débogueur, profileur, analyse de code, leave-one-out, python, scikit-learn
Didacticiel : Programmation efficace sous Python
Programme python et données : waveform
Références :
SPYDER: The Scientific Python Development Environment -- https://docs.spyder-ide.org/

samedi 13 avril 2019

Graphique de dépendance partielle - R et Python

Récemment, j'avais étudié les outils agnostiques (applicables à tous types de classifieurs) pour mesurer l'importance des variables dans les modèles prédictifs (Février 2019). Toujours inspiré par l'excellent ouvrage de Christopher Molnar, "Interpretable Machine Learning", je m'essaie à l'étude de l'influence des variables cette fois-ci. L'objectif est de répondre à la question : de quelle manière la variable pèse sur la prédiction du modèle ? Pour schématiser, je dirais que l'importance traduit l'intensité de l'impact global de la variable. L'influence, elle, s'intéresse au sens et à la forme de la relation avec la cible, mais toujours à travers le modèle.

Dans ce tutoriel nous étudierons le graphique de dépendance partielle ("partial dependence plot" en anglais, PDP) qui permet de caractériser, d'une certaine manière qu'on essaiera de délimiter, l'influence d'une variable dans un modèle. Nous travaillerons sous R dans un premier temps, je proposerai un programme pour le calculer, puis nous verrons si nos résultats concordent avec ceux du package "iml" pour R. Dans un deuxième temps, nous travaillerons sous Python, et nous explorerons cette fois-ci la procédure dédiée proposée par le package "scikit-learn".

Mots-clés : interprétation des modèles, partial dependence plot, gradient boosting machine, régression logistique, importance des variables, influence des variables, package iml, package scikit-learn
Données et programmes R & Python : autos
Références :
C. Molnar, "Interpretable Machine Learning - A Guide for Making Black Box Models Explainable", février 2019.

samedi 6 avril 2019

R - Machine learning avec mlr

La profusion des packages est à la fois une force et une faiblesse de R. Une force parce que nous disposons d'une richesse telle qu'il est possible de trouver un package qui réponde à nos besoins de traitements, quels qu'ils soient (presque). Une faiblesse parce que, en l'absence d'une coordination forte, ils adoptent souvent des modes opératoires disparates qui déroutent les utilisateurs. C'est en ces termes que j'introduisais le package "caret" qui se propose d'unifier la pratique du machine learning sous R dans un moule unique.

Je pourrais tenir exactement le même discours en ce qui concerne la librairie "mlr" que je présente dans ce tutoriel. Nous traiterons d'un exemple (assez amusant) de "football mining" tiré de l'excellent ouvrage de Zhao et Cen (2014) pour en détailler les fonctionnalités.

Mots-clés : analyse prédictive, régression logistique, arbre de décision, svm, support vector machine, k-plus proches voisins, gradient boosting, courbe ROC, AUC, filtrage des variables, importance des variables, football mining, série A italienne, holdout, validation croisée, benchmarking, tuning
Didacticiel : Machine learning sous R avec mlr
Données et programme : Package mlr - Football
Références :
Bischl et al., "Machine learning in R".

lundi 1 avril 2019

Interpréter un classement en analyse prédictive

Mon attention a été attirée récemment sur un post (mars 2019) du blog "Lovely Analytics" concernant l'interprétation du processus de classement à l'aide du package "lime" pour Python. Très peu souvent abordé dans les articles scientifiques, l'affaire est pourtant d'importance en pratique. En effet, quoi de plus naturel que d'essayer d'identifier les caractéristiques qui ont prédominé lors de l'attribution d'une classe à un individu en prédiction. Dans de nombreux domaines, cette justification est primordiale pour asseoir la crédibilité de la décision. On sait que le modèle refuse l'attribution d'un crédit à une personne parce qu'elle est au chômage, ou parce qu'elle a bouton sur le nez, ou, pire, parce qu'elle a un revers à deux mains, ou que sais-je encore… en tous les cas, on ne peut certainement pas se retrancher derrière la décision de l'ordinateur en invoquant l'infaillibilité de la data science et des fameux algorithmes.

Dans ce tutoriel, nous essayons d'expertiser les solutions avancées par "lime" en vérifiant leur adéquation avec l'interprétation usuelle que l'on peut faire du classement dans les situations où on sait le faire, à savoir lorsqu'on utilise les arbres de décision et les classifieurs linéaires.

Mots-clés : python, package scikit-learn, package lime, classement, prédiction, arbre de décision, régression logistique
Didacticiel : Décortiquer lime
Données et programmes : Lime avec Python
Références :
M.T. Ribeiro, S. Singh, C. Guestrin, "Local Interpretable Model-Agnostic Explanations (LIME) : An Introduction", https://www.oreilly.com/learning/introduction-to-local-interpretable-model-agnostic-explanations-lime