Revue: Programming Collective intelligence

Encore une revue d'un livre anglophone, technique et en plus plutôt vieux suivant les standards du web; standards qui s'appliquent d'autant mieux qu'il s'agit d'un livre sur les technologies du web2.0.

Ce livre, Programming Collective Intelligence par Toby Segaran a été publié en 2007 et explique chapitre après chapitre chacun des algorithmes d'apprentissage statistique (aka machine learning) qui sous-tendent les plus gros services web comme le moteur de recherche de Google, Facebook, et e-bay.

Bien qu'il se vende comme un ouvrage centré autour du web social, il pourrait, selon moi, servir aussi bien d'introduction générale au machine learning.

Par conséquent, mais aussi parce qu'on en trouve déjà pas mal de revues détaillées sur le web, je vais essayer ici d'en faire une sorte de revue-croisée en expliquant en quoi ce livre peut faire un excellent manuel d'accompagnement au cours en ligne (et gratuit (et aussi en anglais)) Machine Learning d'Andrew Ng.

Avant tout un avertissement: j'ai passé les 4 dernières années au sein d'une petite entreprise où j'étais littéralement entouré d'experts en machine learning. C'est là qu'avec d'autres collègues j'ai eu l'occasion de suivre les cours d'Andrew Ng en guise de rattrapage mais il se peut aussi qu'au hasard des conversations et, à l'insu de mon plein gré, certaines idées aient perfusées me rendant plus accessible les ouvrages sur le sujet. Méfiance donc lorsque je dis que tel ouvrage est super simple à comprendre :)

Les mêmes algorithmes

Le cours et le livre couvrent grosso modo la même gamme d'algorithmes qui inclue pèle mêle:

  • Classifieur Bayésien
  • Régression linéaire multi-dimensionelle
  • Régression logistique
  • Réseaux de neurones
  • Arbre de décision
  • Méthodes à noyau
  • SVM
  • k-NN
  • k-Means
  • Clustering hiérarchique

Il est possible que le livre Programming Collective intelligence couvre quelques algorithmes en plus que le cours en ligne, mais je ne suis pas allé revisionner les vidéo du cours pour vérifier.

Des méthodes différentes

Le cours et le livre ont cependant des façons très différentes de présenter les algorithmes abordés.

Le cours en ligne Machine Learning, même s'il requiert peu de connaissances mathématiques pour être suivi, s'attarde toutefois autour de l'aspect mathématique des algorithmes qui sont globalement introduits de la façon suivante:

  1. un nouveau problème est défini et expliqué par sa représentation géométrique
  2. la mise en équation est ensuite rapidement expliquée de façon très intuitive
  3. les grandes étapes de l'algorithme correspondant sont expliquées encore une fois de façon très simple
  4. les participants sont ensuite invités à expérimenter l'algorithme en l'implémentant avec octave
  5. en guise de conclusion, les applications pratiques dans divers domaines (médecine, web etc) sont listées rapidement

Le livre Programming Collective Intelligence suit son propre chemin et encadre chaque nouvel algorithme par une description d'une tâche à accomplir qui est évidemment très liées aux problématiques web2.0 (modélisation d'un prix, regroupement de personnes, recherche de la meilleur réponse à une requête...) et par l'implémentation d'un programme résolvant le problème. Pour résumer les étapes sont les suivantes:

  1. définition d'un problème typique du web social
  2. discutions sur les possibilités d'utiliser un des algorithmes vus précédemment et bien entendu sur leurs limites
  3. introduction d'un nouvel algorithme avec quelques schémas explicatifs
  4. présentation du code Python implémentant le nouvel algorithme
  5. résumé des autres cas typiques d'utilisation de cet algorithme

Des points forts complémentaires ?

Au final j'ai trouvé le livre aussi bien que le cours en ligne très réussis sur le plan didactique: leurs lecteurs et spectateurs sont amenés en douceur à connaître les algorithmes importants du domaine et jusqu'à savoir les implémenter. Cependant il me semble que chacun d'eux a des points forts qui manquent à l'autre.

La force du livre Programming Collective Intelligence est tout simplement qu'il propose des programmes entiers écrit avec le langage Python qui est lui-même largement utilisé dans les applications web2.0 ((Je dois quand même préciser que plusieurs revues trouvées sur le web soulignent que le code serait assez buggé mais comme je n'ai lu le code que comme du pseudo-code sans trop aller dans les détails je ne peux laisser les lecteurs attentifs juger par eux-même)) et aussi de montrer comment intégrer les APIs de web-services très connus. A souligner aussi que les deux derniers chapitres ont la bonne idée de résumer l'ensemble des algorithmes présentés dans le livre ainsi que les formules mathématiques importantes.

Le point fort du cours en ligne de machine learning c'est de donner des conseils pratiques sur la meilleur façon d'utiliser chacun des algorithmes présentés en allant ainsi bien au-delà de leur simple implémentation. A titre d'exemple (et aussi comme un mémo personnel) voici un résumé très grossier des techniques proposées pour contrôler la qualité d'un apprentissage:

  • les courbes d'apprentissages peuvent être calculées en traçant l'évolution de la fonction de coût en fonction d'un paramètre donné (nombre d'itérations, nombre d'exemples etc) en séparant les données en 3 ensembles: 60% pour l'apprentissage (train), 20% pour la validation croisée (cross-validation) et en gardant les 20% restant pour obtenir une mesure fiable de la performance du système.
  • Analyser ces courbes permet de détecter les problèmes de biais et de variance
  • La qualité de l'apprentissage peut être améliorée en suivant les recettes suivantes:
    • contre le biais, utiliser un modèle plus flexible et des contraintes plus souples: plus de caractéristiques, construire des polynômes à partir des caractéristiques, diminuer les paramètres de régularisation, utiliser un modèle plus complexe (polynômes de plus haut degrés, réseaux avec plus de neurones etc)
    • contre la variance, utiliser un modèle plus restrictif et des contraintes plus strictes: utiliser plus de données, moins de caractéristiques, augmenter la valeur des paramètres de régularisation et utiliser des modèles plus simples (polynômes de plus petits degrés, réseaux avec moins de neurones...)