lundi 11 juin 2018

Analyses factorielles sous Python avec fanalysis

Je concluais mon précédent tutoriel sur l’ACP sous Python en espérant voir un jour des packages Python permettant de réaliser plus simplement (que sous ''scikit-learn''), plus efficacement, les analyses factorielles : ACP [analyse en composantes principales], mais pourquoi pas aussi l’AFC [analyse factorielle des correspondances] et l’ACM [analyse des correspondances multiples].

Mes voeux ont été devancés. Un de mes anciens étudiants du Master SISE, Olivier Garcia (SISE 1999-2000, ça remonte à quelques années …), m’indique qu’il a mis en ligne récemment un package qui permettent de réaliser ces analyses, avec toutes les fonctionnalités attendues de l’analyse de données à la française décrite dans les publications francophones qui font référence. Un grand Merci à lui !

Le package intitulé "fanalysis" est sous licence BSD-3 et peut se télécharger simplement en tapant en ligne de commande :

pip install fanalysis

Voici le lien vers le repo GitHub : https://github.com/OlivierGarciaDev/fanalysis

Ce package fanalysis poursuit un double objectif :

1) Permettre de réaliser des analyses factorielles dans un but descriptif. Il permet de produire simplement les statistiques principales : valeurs propres, coordonnées, contributions, cos2. Ces statistiques peuvent être exportées vers un DataFrame Pandas. En outre, divers outils graphiques sont proposés : valeurs propres, mapping factoriels, graphiques permettant de voir quelles lignes/colonnes présentent les plus fortes contributions/cos2 pour un axe donné...

2) Permettre d'utiliser les analyses factorielles en tant que méthodes de pre-processing dans des pipelines scikit-learn. On peut ainsi, par exemple,  enchaîner une AFC multiple puis une régression logistique, et optimiser le nombre de facteurs pris en compte par validation croisée.

La docstring est en écrite globish, mais 3 tutos sont disponibles en français sur le repo GitHub, sous forme de notebooks :
Le package met à disposition des tests unitaires dont la philosophie générale est de comparer les sorties de ses méthodes avec celles du package R FactoMineR. Ouf, les tests s'avèrent concluant !

Le package fanalysis fonctionne avec des matrices denses en entrée.

Sur le plan technique, c'est la fonction svd() (décomposition en valeurs singulières) de numpy qui est au coeur des calculs.

Mots-clés : package fanalysis, python, acp, analyse en composantes principales, afc, analyse factorielle des correspondances, acm, analyse des correspondances multiples

vendredi 8 juin 2018

ACP avec Python

J’ai déjà beaucoup donné pour l’analyse en composantes principales, sous forme de support de cours (ACP), de tutoriels pour Tanagra, pour Excel, pour R, ... mais jamais pour Python.

Il est temps d’y remédier. D’autant plus que l’affaire n’est pas si évidente finalement. J’ai choisi d’utiliser le package "scikit-learn" maintes fois cité sur le web. Je me suis rendu compte que la classe PCA effectuait les calculs essentiels effectivement, mais il nous appartenait ensuite de programmer tout le post-traitement, notamment les aides à l’interprétation. Je me suis retrouvé un peu dans la même situation qu’il y a presque 10 ans où je m’essayais à l’ACP sous R en utilisant la fonction basique princomp() du package "stats" (Mai 2009). Le tutoriel associé ainsi que notre support de cours nous serviront de repères tout au long de ce document.

Mots-clés : analyse en composantes principales, ACP, package scikit-learn, PCA
Didacticiel : ACP sous Python
Données et programme : Autos Python
Références :
Tutoriel Tanagra, "ACP avec Tanagra - Nouveaux outils", Juin 2012.
Tutoriel Tanagra, "Analyse en Composantes Principales avec R", Mai 2009.
Tutoriel Tanagra, "ACP avec R - Détection du nombre d'axes", Juin 2012.

jeudi 24 mai 2018

Régressions ridge et elasticnet sous R

Ce tutoriel fait suite au support de cours consacré à la régression régularisée (RAK, 2018). Il vient en contrepoint au document récent consacré à la Régression Lasso sous Python. Nous travaillons sous R cette fois-ci et nous étudions les régressions ridge et elasticnet.

Nous nous situons dans le cadre de la régression logistique avec une variable cible qualitative binaire. Le contexte n’est pas favorable avec un échantillon d’apprentissage constitué de n_train = 200 observations et p = 123 descripteurs, dont certains sont en réalité des constantes. Les propriétés de régularisation de ridge et elasticnet devraient se révéler décisives. Encore faut-il savoir / pouvoir déterminer les valeurs adéquates des paramètres de ces algorithmes. Ils pèsent fortement sur la qualité des résultats.

Nous verrons comment faire avec les outils à notre disposition. Nous utiliserons les packages ‘’glmnet’’  et ‘’tensorflow / keras’’. Ce dernier tandem a été présenté plus en détail dans un précédent document (Avril 2018). Il faut s’y référer notamment pour la partie installation qui n’est pas triviale.

Mots-clés : régression ridge, régression elasticnet, package glmnet, package tensorflow, package keras, ridge path, elasticnet path, coefficient de pénalité, validation croisée
Didacticiel : Ridge et elasticnet sous R
Données et programme : Adult dataset
Références :
Rakotomalala R., "Régression régularisée - Ridge, Lasso, Elasticnet", Mai 2018.

vendredi 18 mai 2018

Régression Lasso sous Python

Ce tutoriel fait suite au support de cours consacré à la régression régularisée. Nous travaillons sous Python avec le package « scikit-learn ».

Au-delà de la simple mise en oeuvre de la Régression Lasso, nous effectuons une comparaison avec la régression linéaire multiple usuelle telle qu’elle est proposée dans la librairie « StatsModels » pour montrer son intérêt. Nous verrons entres autres ses apports en termes de sélection de variables et d’optimisation des performances prédictives.

L’exemple est à vocation pédagogique, il s’agit avant tout de décortiquer les mécanismes de l’approche. J’ai par conséquent fait le choix d’utiliser une base de taille réduite (p = 16 variables explicatives) pour que les graphiques soient lisibles (le « Lasso path » par exemple). Dans ce contexte, les propriétés de régularisation de la Régression Lasso ne se démarquent pas vraiment.

Mots-clés : régression lasso, package scikit-learn, package statsmodels, lasso path, coefficient de pénalité, validation croisée
Didacticiel : Lasso Python
Données et programme : Baseball dataset
Références :
Rakotomalala R., "Régression régularisée - Ridge, Lasso, Elasticnet", Mai 2018.

vendredi 11 mai 2018

Ridge - Lasso - Elasticnet

La régression est la méthode la plus populaire auprès des data scientists (KDnuggets Polls, « Top 10 Data Science, Machine Learning Methods Used in 2017 », Décembre 2017). Elle existe depuis la nuit des temps (j’exagère un peu) et fait référence. Elle est de ces approches que l’on doit systématiquement essayer lorsqu’il s’agit de mettre en concurrence plusieurs algorithmes dans un problème d’analyse prédictive.

La régression doit faire face à de nouveaux enjeux ces dernières années, avec notamment la profusion des données à très forte dimensionnalité lors du traitement des données non-structurées. Un grand nombre de descripteurs sont automatiquement générés avec pour caractéristiques le bruit et la colinéarité. Les approches et implémentations classiques de la régression souffrent de ces situations. La régularisation devient une nécessité vitale pour éviter les phénomènes de surapprentissage.

Dans ce support de cours, nous présentons les approches Ridge, Lasso et Elasticnet dans le cadre de la régression linéaire multiple. Nous les étendons par la suite à la régression logistique. Les exemples utilisant les packages spécialisés pour R et Python permet de comprendre concrètement le comportement de ces algorithmes de machine learning.

Mots-clés : diapos, régression régularisée, régression pénalisée, ridge, lasso, elasticnet, descente de gradient, régression linéaire multiple, régression logistique, packages R, packages python, glmnet, lars, mass, scikit-learn, tensorflow, keras
Support de cours : Régression régularisée
Références :
Hastie T., Tibshirani R., Friedman J., "Elements of statistical learning", Springer, corrected 12th, January 2017.
PennStat Eberly College of Science, "STAT 897D - Applied Data Mining and Statistical Learning".

mardi 1 mai 2018

Descente de gradient stochastique sous Python

Ce tutoriel fait suite au support de cours consacré à l’application de la méthode du gradient en apprentissage supervisé. Nous travaillons sous Python. Un document similaire a été écrit pour le logiciel R dans le cadre de la régression linéaire multiple.

Nous travaillons sur un problème de classement cette-fois. Nous souhaitons estimer les paramètres de la régression logistique à partir d’un ensemble de données étiquetées. Nous utilisons le package « scikit-learn » particulièrement populaire auprès des aficionados de Python . Nous étudierons l’influence du paramétrage sur la rapidité de la convergence de l’algorithme d’apprentissage et, de manière plus générale, sur la qualité du modèle obtenu. Nous en profiterons pour détailler une petite curiosité, parce que peu mise en avant dans les supports, que constitue la construction de la courbe ROC (Receiver Operating Characteristic) en validation croisée.

Mots-clés : descente de gradient stochastique, package scikit-learn, sklearn, régression logistique, python
Didacticiel : Descente de gradient stochastique
Données et programmes : sonar dataset
Références :
Rakotomalala R., "Descente de gradient - Diapos", avril 2018.
Tutoriel Tanagra, "Descente de gradient sous R", avril 2018.

jeudi 26 avril 2018

Descente de gradient sous R

Ce tutoriel fait suite au support de cours consacré à l’application de la méthode du gradient en apprentissage supervisé. Nous travaillons sous R. Un document consacré à Python viendra par la suite.

Nous nous plaçons dans le cadre de la régression linéaire multiple. Dans un premier temps, nous traiterons un jeu de données réduit qui nous permettra d’étudier en détail le comportement des algorithmes de descente de gradient, stochastique ou non. L’idée est de comparer les coefficients estimés et les valeurs de la fonction de perte obtenues à l’issue du processus d’apprentissage. Dans un second temps, nous traiterons un fichier réaliste de classement de protéines où le nombre de variables est élevé, son ratio par rapport au nombre d’observations est largement supérieur à 1. Dans ce cas, l’implémentation usuelle de la régression sous R, lm() du package « stats », même si elle est solide, n’est pas opérationnelle. Seules les approches basées sur la descente de gradient permettent de produire un résultat exploitable.

Nous utiliserons les packages ‘gradDescent’ et ‘tensorflow / keras’. Ce dernier tandem a été présenté plus en détail dans un précédent document (Avril 2018). Il faut s’y référer notamment pour la partie installation qui n’est pas triviale.

Mots-clés : descente de gradient, algorithme du gradient, gradient stochastique, logiciel R, package gradDescent, packages tensorflow, keras, régression, régression linéaire multiple, classement de protéines
Didacticiel : Descente de gradient sous R
Données et programmes : artificial + protein
Références :
R. Rakotomalala, "Descente de gradient - Diapos", avril 2018.
Tutoriel Tanagra, "Deep learning - Tensorflow et Keras sous R", avril 2018.
Tutoriel Tanagra, "Descente de gradient stochastique sous Python", mai 2018.

vendredi 20 avril 2018

Descente de gradient - Diapos

Application du principe de la descente de gradient à l’apprentissage supervisé. Exemples avec la régression linéaire multiple et la régression logistique.

La volumétrie est un problème récurrent du machine learning. La majorité des algorithmes reposent sur la formulation d’une optimisation. Il devient très difficile de les mettre en œuvre sur les bases actuelles qui sont parfois aussi larges (si ce n’est plus) que longues. L’algorithme du gradient connaît un regain d’intérêt certain dans ce contexte. En effet, d’une part, il permet de revisiter les méthodes statistiques existantes comme la régression, d’autre part, il devient incontournable dans les méthodes très populaires aujourd’hui telles que le deep learning.

Ce support de cours présente le principe descente de gradient. Il montre concrètement son implémentation dans le cadre de la régression linéaire multiple et la régression logistique binaire et multinomiale. Quelques packages pour Python (scikit-learn, tensorflow / keras) et R (gradDescent) sont mis en avant.

Mots-clés : gradient descent, stochastic gradient descent, descente de gradient stochastique, régression linéaire multiple, régression logistique, python, logiciel R, tensorflow, keras, scikit-learn, gradDescent, perceptron
Support de cours : Descente de gradient
Références :
Wikipedia, "Gradient descent".
Wikipedia, "Stochastic gradient descent".

vendredi 13 avril 2018

Deep Learning - Tensorflow et Keras sous R

Python et R sont les deux mamelles généreuses de la fertilité intellectuelle du data scientist. Parfois elles sont interchangeables, parfois elles se complètent. En tous les cas, elles nourrissent la pratique de la data science. Et, finalement, le choix entre ces fontaines de jouvence est avant tout affaire de goûts personnels, de circonstances, d’environnements de travail, de disponibilité des packages…

Ce tutoriel fait suite à un document récent consacré au deep learning via les librairies Tensorflow et Keras sous Python. Nous en reprenons les étapes point par point, mais sous R cette fois-ci. Nous verrons que la transposition est particulièrement simple.

Mots-clés : deep learning, tensorflow, keras, perceptron simple, perceptron multicouche, logiciel R
Didacticiel : Tensorflow et Keras sous R
Données et programmes : 2D
Références :
Tutoriel Tanagra, "Deep Learning avec Tensorflow et Keras (Python)", avril 2018.

mercredi 11 avril 2018

Deep Learning avec Tensorflow et Keras (Python)

Tensorflow est une bibliothèque open-source développée par l’équipe Google Brain qui l’utilisait initialement en interne. Elle implémente des méthodes d’apprentissage automatique basées sur le principe des réseaux de neurones profonds (deep learning). Une API Python est disponible. Nous pouvons l’exploiter directement dans un programme rédigé en Python. C’est faisable, il existe des tutoriels et des ouvrages à ce sujet. Pourtant, j’ai préféré passer par Keras parce que le formalisme imposé par Tensorflow est déroutant au possible pour un néophyte. Découvrir de nouveaux algorithmes devient vite rédhibitoire si on a du mal à se dépatouiller avec un outil que nous sommes censés utiliser pour les mettre en application.

Keras est une librairie Python qui encapsule l’accès aux fonctions proposées par plusieurs librairies de machine learning, en particulier Tensorflow. De fait, Keras n’implémente pas nativement les méthodes. Elle sert d’interface avec Tensorflow simplement. Mais pourquoi alors s’enquiquiner avec une surcouche supplémentaire direz-vous ? Parce qu’elle nous facilite grandement la vie en proposant des fonctions et procédures relativement simples à mettre en œuvre. Un apprenant qui a déjà assimilé les démarches types du machine learning, qui a pu par ailleurs utiliser des librairies qui font référence telles que scikit-learn, ne sera pas dépaysé lorsqu’il aura à travailler avec Keras. L’accès aux fonctionnalités de Tensorflow devenant transparentes, il pourra se focaliser sur la compréhension des méthodes.

Ce tutoriel a pour objectif la prise en main des outils. Pour aller à l’essentiel, nous implémenterons des perceptrons simples et multicouches dans des problèmes d’analyse prédictive. Ayant déjà nos repères concernant ces méthodes, nous pourrons nous consacrer pleinement à l’assimilation du mode de fonctionnement du tandem Tensorflow - Keras. Les supports de cours consacrés aux méthodes de Deep Learning suivront.

Mots-clés : deep learning, package keras, package tensorflow, python, anaconda, perceptron simple, perceptron multicouche
Didacticiel : Tensorflow Keras sous Python
Données et programmes : 2D et wine
Références :
Tutoriel Tanagra, "Paramétrer le perceptron multicouche", avril 2013.
Tutoriel Tanagra, "Deep Learning - Tensorflow et Keras sous R", avril 2018.

jeudi 5 avril 2018

Machine learning avec caret

La profusion des packages est à la fois une force et une faiblesse de R. Une force parce que cette richesse permet de couvrir une très large fraction de la pratique des statistiques et du machine learning. Aujourd’hui, face à tout type de problème, la première question que l’on se pose est : “est-ce qu’il n’y a pas déjà un package qui permet de le faire simplement ?”. Mais c’est aussi une faiblesse parce qu’il y a une très forte hétérogénéité des pratiques et modes opératoires des packages. Et la documentation n’est pas toujours explicite malheureusement. Il m’arrive d’aller voir dans le code même pour comprendre réellement ce qui est implémenté. L’affaire se corse d’autant plus que nous devons souvent combiner (jongler entre) plusieurs packages pour mettre en place une analyse complète.

Le package “caret” (Classification And REgression Training) est une librairie pour R. Il couvre une large fraction de la pratique de l’analyse prédictive (classement et régression). Un peu à la manière de “scikit-learn” pour Python, il intègre dans un ensemble cohérent les étapes clés de la modélisation : préparation des données, sélection, apprentissage, évaluation. La standardisation des prototypes des fonctions d’apprentissage et de prédiction notamment permet de simplifier notre code, facilitant les tâches d’optimisation et de comparaison des modèles.

Dans ce tutoriel, à partir d’un exemple d’identification de “spams”, nous montrons quelques facettes du package “caret”.

Mots-clés : analyse prédictive, classement, régression, régression logistique, svm, support vector machine, optimisation des paramètres, techniques de rééchantillonnage, validation croisée, courbe lift, courbe roc
Didacticiel : Machine learning avec "caret"
Données : spam_caret.txt
Référénces :
Max Kuhn, "The caret Package", 2017.

jeudi 29 mars 2018

ACP sous Excel avec Xnumbers

Tout le monde l’a bien compris, le tableur est pour moi avant tout un outil pédagogique pour l’enseignement de la statistique et du data mining. Les étudiants ne peuvent pas entrer des commandes ou cliquer frénétiquement au petit bonheur la chance. Ils doivent regarder de près les formules pour pouvoir les comprendre et les reproduire. Il n’y a pas mieux pour les amener à décortiquer les différentes étapes du calcul quelle que soit la méthode étudiée.

Nous avions analysé la Régression Linéaire Multiple sous Excel récemment (Mars 2018). Dans ce tutoriel, nous explorons la mécanique d’une autre méthode phare de la data science (voir Top Data Science and Machine Learning Used in 2017) : l’analyse en composantes principales (ACP). J’en profiterai pour présenter Xnumbers, une librairie particulièrement performante pour le calcul scientifique sous Excel. Elle nous sera utile en particulier pour la factorisation des matrices à l’aide de la décomposition en valeurs singulières.

Mots-clés : analyse en composantes principales, acp, tableur excel, xnumbers
Didacticiel : ACP sous Excel
Classeur Excel : acp autos.xlsx
Références :
R. Rakotomalala, "Analyse en composantes principales - Diapos", Juillet 2013.

mardi 27 mars 2018

Autoformation avec swirl

L’autoformation est un des leviers essentiels de notre progression. J'essaie de contribuer moi-même à mon échelle à travers les supports de cours et les tutoriels. Une voie alternative est le tutoriel où on guide explicitement l'apprenant avec des systèmes de questions-réponses et des exercices contrôlés.

Le package swirl pour R fait partie de cette seconde catégorie. Une ancienne du Master SISE qui assure des formations sous R me l'a indiqué. Je la remercie pour cela. Malgré le temps que je passe sur le web à scruter ce qui se fait, beaucoup de choses m'échappent. Elle m'indiquait qu’elle l’utilisait avec succès pour ses séances de cours. Bien évidemment que je me suis rué dessus pour voir un peu ce qu'il en était, et le parti que je pourrais en tirer pour mes propres enseignements.

Dans ce tutoriel, nous essaierons de faire le tour de l'outil pédagogique en montrant son mode de fonctionnement sur un exemple de séance consacrée à la régression linéaire multiple. Nous en profiterons pour regarder un peu sous le capot et voir les éléments constitutifs des cours.

Mots-clés : autoapprentissage, autoformation, package R, logiciel R, régression linéaire multiple
Didacticiel : Apprendre R, sous R
Références :
Swirl : Learn R, in R -- http://swirlstats.com/

vendredi 23 mars 2018

Requêtes avec jointures sous R

Dans ma pratique usuelle, lorsque je dois traiter des bases multi-tables dans un processus de modélisation, j’effectue une partie du pre-processing avec des SGBD (système de gestion de base de données). Avec le langage SQL (structured query language), on y est à l’aise pour effectuer des requêtes mettant en œuvre des jointures complexes entre plusieurs sources. Au final, une table unique propice à l’analyse est produite, que j’importe ensuite dans le logiciel d’analyse statistique, que ce soit R ou Python.

Cette approche n’est pas toujours adaptée lorsque les sources initiales sont susceptibles de mises à jour fréquentes. Une modification des données nécessiterait la ré-exécution des requêtes en amont avant de pouvoir relancer le processus de modélisation. Dans ce cas, il est plus judicieux d’intégrer le code de la phase de requêtage dans le programme réalisant le traitement statistique.

Dans ce tutoriel, nous étudions les différentes solutions à notre disposition sous R pour effectuer des requêtes avec jointures. Elles ont toutes permis de répondre au cahier des charges, avec plus ou moins de facilité. Finalement, il nous appartient de choisir celle qui est la plus adaptée par rapport à notre cahier des charges.

Mots-clés : requêtes, jointures, SQL, package dplyr, fusion, tables, package sqldf
Didacticiel : Requêtes avec jointures
Données : Movies Dataset
Références :
Package "sqldf" ; package "dplyr".

vendredi 16 mars 2018

Régression linéaire sous Excel

Dans ce tutoriel, nous reprenons à partir d’un exemple traité sous Excel les principaux concepts présentés dans les documents accessibles sur ma page de cours d’Econométrie. Deux ouvrages en particulier seront mis à contribution (voir Références du document). Les principales formules seront explicitées pour chaque calcul. Elles seront mises en relation avec les opérations sous Excel. Puisque nous traitons de la régression linéaire multiple, nous ferons un usage intensif des fonctions matricielles du tableur.

Mots-clés : régression linéaire simple et multiple, excel, droitereg, fonctions matricielles
Didacticiel : Régression sous Excel
Classeur Excel : Données "cigarettes"
Références :
Cours Économétrie - Modèles linéaires
Tutoriel Tanagra, "Classeur Économétrie", avril 2015.