Journal
Ce journal contient 19 entrées.
Computing linear regression in one pass
Dans le même ordre d'idée que le lien précédent, sauf qu'il s'agit cette fois d'effectuer une régression linéaire en continu. Comme beaucoup d'algorithmes continu, il présente l'avantage de travailler en mémoire constante.
Le thumbnail vient de XKCD : https://xkcd.com/1725

Le thumbnail vient de XKCD : https://xkcd.com/1725
Computing skewness and kurtosis in one pass
Comme vous l'avez peut être déjà remarqué, une bonne partie de mes travaux de thèse ont porté sur le traitement continu de flux de données : http://benjaminbillet.fr/media/benjaminbillet_memoire.pdf
De fait, je m'intéresse beaucoup aux techniques mathématiques permettant de réaliser des calculs en continu (c'est-à-dire sans mémoriser l'intégralité des résultats passés).
Cet article de blog décrit comment calculer en continu l'espérance, la variance, l'écart-type, le coefficient de dissymétrie et le coefficient d'aplatissement sur un flux d'échantillons. De manière plus générale il s'agit d'une méthode pour calculer les moments (https://fr.wikipedia.org/wiki/Moment_%28mathématiques%29). On pourrait imaginer donc l'utiliser pour calculer d'autres mesures statistiques d'ordre supérieur. J'essayerais d'ailleurs, si je parviens à bien tout comprendre, d'en faire une implémentation généralisée :)
Quelques références:
- B. P. Welford (1962)."Note on a method for calculating corrected sums of squares and products".
- Donald E. Knuth (1998). The Art of Computer Programming, volume 2: Seminumerical Algorithms, 3rd edn.

De fait, je m'intéresse beaucoup aux techniques mathématiques permettant de réaliser des calculs en continu (c'est-à-dire sans mémoriser l'intégralité des résultats passés).
Cet article de blog décrit comment calculer en continu l'espérance, la variance, l'écart-type, le coefficient de dissymétrie et le coefficient d'aplatissement sur un flux d'échantillons. De manière plus générale il s'agit d'une méthode pour calculer les moments (https://fr.wikipedia.org/wiki/Moment_%28mathématiques%29). On pourrait imaginer donc l'utiliser pour calculer d'autres mesures statistiques d'ordre supérieur. J'essayerais d'ailleurs, si je parviens à bien tout comprendre, d'en faire une implémentation généralisée :)
Quelques références:
- B. P. Welford (1962)."Note on a method for calculating corrected sums of squares and products".
- Donald E. Knuth (1998). The Art of Computer Programming, volume 2: Seminumerical Algorithms, 3rd edn.
7 techniques mathématiques
1. La descente de gradient
2. Le kdtree
3. La décomposition en valeurs singulières
4. La dimension de Vapnik-chervonenkis
5. Distributed Stochastic Neighboor Embedding
6. Radial basis Kernel trick
7. Affinity Propagation Clustering

2. Le kdtree
3. La décomposition en valeurs singulières
4. La dimension de Vapnik-chervonenkis
5. Distributed Stochastic Neighboor Embedding
6. Radial basis Kernel trick
7. Affinity Propagation Clustering
Une introduction aux arbres de décision
Résumé :
Les arbres de décision sont l’une des structures de données majeures de l’apprentissage statistique. Leur fonctionnement repose sur des heuristiques qui, tout en satisfaisant l’intuition, donnent des résultats remarquables en pratique (notamment lorsqu’ils sont utilisés en « forêts aléatoires »). Leur structure arborescente les rend également lisibles par un être humain, contrairement à d’autres approches où le prédicteur construit est une « boîte noire ».
L’introduction que nous proposons ici décrit les bases de leur fonctionnement tout en apportant quelques justifications théoriques. Nous aborderons aussi (brièvement) l’extension aux Random Forests. On supposera le lecteur familier avec le contexte général de l’apprentissage supervisé.1

Les arbres de décision sont l’une des structures de données majeures de l’apprentissage statistique. Leur fonctionnement repose sur des heuristiques qui, tout en satisfaisant l’intuition, donnent des résultats remarquables en pratique (notamment lorsqu’ils sont utilisés en « forêts aléatoires »). Leur structure arborescente les rend également lisibles par un être humain, contrairement à d’autres approches où le prédicteur construit est une « boîte noire ».
L’introduction que nous proposons ici décrit les bases de leur fonctionnement tout en apportant quelques justifications théoriques. Nous aborderons aussi (brièvement) l’extension aux Random Forests. On supposera le lecteur familier avec le contexte général de l’apprentissage supervisé.1
How Not To Sort By Average Rating
Une meilleure méthode pour la gestion des notations. Cette technique prend en compte à la fois la proportion de notes positives et la taille de l'échantillon.

Neural networks and deep learning
Les réseaux neuronaux ont connu une évolution difficile dans le domaine de l'intelligence artificielle (engouement, rejet, engouement, etc.). En très bref, il s'agit de réseaux formés par l'interconnexion d'entités appelées "perceptrons". Ces perceptrons miment grossièrement le fonctionnement d'un neurone en émettant un signal plus ou moins fort en fonction de leurs entrées.
Ils reviennent à la mode sous le nom de "deep learning". Je suis donc en train de lire ce livre en ligne sur le sujet. L'auteur maîtrise son sujet et parvient à l'expliquer (en anglais) dans sa globalité : il rentre de manière très progressive dans la formalisation mathématiques du problème puis dans les différents aspects fondamentaux :
- l'activation du réseau
- la descente de gradient
- l'algorithme de rétropropagation
- la régression softmax
- etc... (je n'ai pas encore fini de lire)
L'auteur utilise le cas de la reconnaissance de caractère comme fil rouge et illustre tout ceci avec des implémentations en Python.

Ils reviennent à la mode sous le nom de "deep learning". Je suis donc en train de lire ce livre en ligne sur le sujet. L'auteur maîtrise son sujet et parvient à l'expliquer (en anglais) dans sa globalité : il rentre de manière très progressive dans la formalisation mathématiques du problème puis dans les différents aspects fondamentaux :
- l'activation du réseau
- la descente de gradient
- l'algorithme de rétropropagation
- la régression softmax
- etc... (je n'ai pas encore fini de lire)
L'auteur utilise le cas de la reconnaissance de caractère comme fil rouge et illustre tout ceci avec des implémentations en Python.
How to build an Anti Aircraft Missile: Probability, Bayes’ Theorem and the Kalman Filter
Un article expliquant brièvement le théorème de Bayes et le filtre de Kalman.
http://en.wikipedia.org/wiki/Kalman_filter
http://en.wikipedia.org/wiki/Kalman_filter
De la place des mathématiques dans la programmation
J'entends souvent les développeurs débutants dire que les mathématiques ne sont pas utiles pour programmer.
En un sens ce n'est pas totalement faux, les mathématiques ne sont pas strictement nécessaires pour écrire des programmes. Toutefois, c'est uniquement car les programmes que nous écrivons font appel à des librairies qui résolvent la plupart des problèmes véritablement complexes que nous pourrions rencontrer. Ces librairies sont des boîtes noires qui nous masquent les détails mathématiques et algorithmiques sous-jacent, mais hélas ce n'est pas parce que nous ne manipulons pas ces détails qu'ils n'existent pas ;)
En fait, on retrouve des fondements mathématiques dans quasiment tous les domaines de l'informatique.
Retrouver des données "intéressantes" dans de grands ensembles (data mining, moteur de recherche) ? Des statistiques, des filtres, etc.
Les bases de données ? Théorie des ensembles, fonctions de hachage, etc.
L'encodage audio/vidéo ? Analyse numérique, mathématiques du signal, DFT, échantillonnage, statistiques, ...
La 3D ? Alors là c'est le pire je pense ; géométrie dans l'espace, physique, calcul vectoriel, calcul matriciel, calcul intégral, espaces, analyse numérique, algèbre, ...
Le chiffrement ? La compression ? La détection des erreurs ? Arithmétique modulaire, théorie des ensembles, théorie de l'information, ...
OCR ? Reconnaissance vocale ? Statistiques, réseaux bayésiens, réseaux de neurones, ...
Les réseaux ? Théorie de l'information, théorie des graphes, statistiques, ...
Ce n'est pas parce que nous ne manipulons pas toutes ces choses au quotidien qu'elles n'existent pas. Les ignorer revient à s'en remettre à des boîtes noires prétendument magiques, et à mal les utiliser.
En un sens ce n'est pas totalement faux, les mathématiques ne sont pas strictement nécessaires pour écrire des programmes. Toutefois, c'est uniquement car les programmes que nous écrivons font appel à des librairies qui résolvent la plupart des problèmes véritablement complexes que nous pourrions rencontrer. Ces librairies sont des boîtes noires qui nous masquent les détails mathématiques et algorithmiques sous-jacent, mais hélas ce n'est pas parce que nous ne manipulons pas ces détails qu'ils n'existent pas ;)
En fait, on retrouve des fondements mathématiques dans quasiment tous les domaines de l'informatique.
Retrouver des données "intéressantes" dans de grands ensembles (data mining, moteur de recherche) ? Des statistiques, des filtres, etc.
Les bases de données ? Théorie des ensembles, fonctions de hachage, etc.
L'encodage audio/vidéo ? Analyse numérique, mathématiques du signal, DFT, échantillonnage, statistiques, ...
La 3D ? Alors là c'est le pire je pense ; géométrie dans l'espace, physique, calcul vectoriel, calcul matriciel, calcul intégral, espaces, analyse numérique, algèbre, ...
Le chiffrement ? La compression ? La détection des erreurs ? Arithmétique modulaire, théorie des ensembles, théorie de l'information, ...
OCR ? Reconnaissance vocale ? Statistiques, réseaux bayésiens, réseaux de neurones, ...
Les réseaux ? Théorie de l'information, théorie des graphes, statistiques, ...
Ce n'est pas parce que nous ne manipulons pas toutes ces choses au quotidien qu'elles n'existent pas. Les ignorer revient à s'en remettre à des boîtes noires prétendument magiques, et à mal les utiliser.
Statistical Formulas For Programmers
Quelques formules propres aux statistiques (intervalle de confiance, test du X², comparer des distribution et déterminer des courbes de tendances), utiles pour les programmeurs.

Bloom filter
Un filtre de Bloom est une structure de données probabiliste qui permet de tester si un élément appartient à un ensemble.
Une telle structure est plus compacte (taille fixe) que l'ensemble lui même, et peut permettre de savoir avec certitude qu'un élément est absent de l'ensemble. Cependant, il existe une probabilité donnée d'obtenir des faux positifs lorsque l'on teste si un élément est présent dans l'ensemble.
EDIT : un exemple en python ici http://www.stavros.io/posts/bloom-filter-search-engine/?print
Une telle structure est plus compacte (taille fixe) que l'ensemble lui même, et peut permettre de savoir avec certitude qu'un élément est absent de l'ensemble. Cependant, il existe une probabilité donnée d'obtenir des faux positifs lorsque l'on teste si un élément est présent dans l'ensemble.
EDIT : un exemple en python ici http://www.stavros.io/posts/bloom-filter-search-engine/?print
Formule autoréférente de Tupper - Wikipédia
Lorsque l'on trace l'ensemble des couples (x,y) qui satisfont cette inégalité, une partie du plan représente la formule elle-même.
Description détaillée : http://p3.storage.canalblog.com/36/80/210892/67522113.png

Description détaillée : http://p3.storage.canalblog.com/36/80/210892/67522113.png
Functors, Applicatives, And Monads In Pictures
La programmation fonctionnelle emprunte un vocabulaire parfois obscur aux mathématiques, d'où cet intéressant petit article illustré qui revient sur les concepts de "fonctor" (foncteur), "monad" (monoïde) et "applicative" (foncteur applicatif).
Une autre explication, en français :
http://lyah.haskell.fr/foncteurs-foncteurs-applicatifs-et-monoides

Une autre explication, en français :
http://lyah.haskell.fr/foncteurs-foncteurs-applicatifs-et-monoides
Moyenne glissante
C'est impressionnant le nombre de gens qui travaillent sur les problèmes de stream processing et qui n'ont jamais entendu parler des moyennes glissantes.
C'est une formule très simple pour calculer une moyenne au fur et à mesure que les éléments sont reçus (pas besoin de conserver la somme totale, ce qui atténue les problèmes de débordement lorsque le nombre d'éléments devient très grand).
http://fr.wikipedia.org/wiki/Moyenne#Moyenne_glissante
C'est une formule très simple pour calculer une moyenne au fur et à mesure que les éléments sont reçus (pas besoin de conserver la somme totale, ce qui atténue les problèmes de débordement lorsque le nombre d'éléments devient très grand).
http://fr.wikipedia.org/wiki/Moyenne#Moyenne_glissante
Equations for Organic Motion
Quelques formules pour reproduire des mouvements "organiques".
Exotic Data Structures
Les structures de données, c'est probablement les éléments que l'on manipule le plus sans en avoir conscience, et ce dans n'importe que langage de programmation. Il en existe une quantité phénoménale, reposant souvent sur des fondements algorithmiques et mathématiques complexes.

Math for game programmers
Une série d'articles sur les fondamentaux mathématiques pour le développement 2D/3D. On ne dirait pas comme ça, mais quand on commence à bricoler en DirectX/OpenGL, ces bases mathématiques deviennent vraiment indispensables.
Ce journal est basé sur Ginger, un gestionnaire de lien minimaliste développé dans le cadre d'un stage de perfectionnement. Pour plus d'informations, consulter le wiki consacré à mes projets personnels.