XD blog

blog page

~technical


2018-05-26 Democracy - La ruée vers les datas

Je vous recommande le visionnage du documentaire Democracy - La ruée vers les datas sur Arte qui relate l'histoire de la création de la loi sur le Règlement général sur la protection des données, un peu comme Villani l'avait fait avec sa médialle Fields dans Théorème vivant. Il relate le temps de la réflexion qui a précédé le vote de la loi en 2016 pour une entrée en vigueur le 25 mai 2018. Le documentaire insiste peu sur les amendements proposés par les lobbyistes ni la pression qu'ils ont exercée - un seul a apparemment accepté d'être filmé -, elle n'est qu'esquissée, au contraire, il insiste sur l'immense travail de réflexion et de discussion fournis par les auteurs du texte qui a été adopté. Il faut remercier son auteur opiniâtre Jan Philipp Albrecht, forçat du RGPD.

Un des interlocuteur donne un exemple de ce qu'on peut trouver comme enseignements dans les données. Je suppose qu'il a trouvé un accueil favorable dans l'oreille du réalisateur puisqu'il a conservé. Je la transcris également car elle traduit à mon sens ce que l'école oublie parfois d'être, un endroit où on doit rêver : Students who took creative litterature course in 9th grade have a better chance to pass algebra in the 10th grade. Ce n'est pas moi qui le dit, ce sont les données. (9th = troisième).

Je termine par une métaphore initiée par Albrecht lui-même. Si les données étaient du pétrole, la loi RGPD serait une loi de protection de l'environnement. On attend la suivante.

La loi s'applique à toute donnée transitant par l'Europe. Ceci explique pourquoi Facebook déplace les données des utilisateurs non Européens Données personnelles : Facebook met 1,5 milliard d‘utilisateurs hors de portée du droit européen.

La loi RGPD est sortie mais pas la loi sur les voitures ou les pesticides. Il faut croire que les lobby des GAFA ne sont pas aussi méchants que ça en tout cas moins persistants. On a plus de contrôle sur ce qui est fait de nos données et pas encore ce qui arrive dans notre assiette La fabrique du silence : retour à Glomel.

2018-05-23 Un livre à lire sur le Big Data

Big Data, penser l'homme et le monde autrement, de Gilles Babinet de Gilles Babinet. Les données sont peut-être dangereuses mais on peut faire un grand nombre de choses utiles avec. Le livre cite de nombeux exemples, évoque aussi le passage d'une société au numérique. Quelques extraits...


more...

2018-05-03 Régression logistique et diagramme de Voronoï

Je retombe régulièrement sur le jeu de données Iris très souvent utilisé pour illustrer car il marche bien. J'aime bien aussi cette image :

Elle me fait penser à un diagramme de Voronoï, le graphe qui dessine les zones d'influences de points dans un plan et plus généralement dans un espace vectoriel. Je me suis alors demandé s'il n'y avait pas d'équivalence entre les deux... La réponse est non dans le cas général mais cela n'empêche pas une petite promenade pour comprendre deux ou trois petites choses sur les problèmes que peut modéliser une régression logistique : Régression logistique, diagramme de Voronoï, k-Means. Vous y verrez une image comme celle-ci :

2018-03-31 Mettre un modèle de machine learning en production

J'écrivais un article il y a peu sur le sujet ONNX : apprendre et prédire sur différentes machines où j'évoquais deux pistes pour mettre en production un modèle de machine learning, essentiellement via une application web. Il n'y a pas d'ordre de préférence, certaines sont plus abouties que d'autres. La première tensorflow-serving propose tout clé en main mais elle repose sur l'utilisation de tensorflow. La seconde ONNX, onnxmltools, winmltools convertit un modèle dans un format commun. Il est ensuite exploité là où une librairie de prédiction (un runtime) existe (liste des runtime disponibles). Ce format commun n'est pas encore exploitable en C++ ou javascript mais ces options sont envisageables également. Tensorflow encore propose une façon d'exploiter les modèles en javascript directement avec tensorflow.js (voir https://js.tensorflow.org/tutorials/import-keras.html). ONNX réfléchit à une extension pour le langage C/C++ ONNX in C/C++ qu'il est possible de faire pour le moment pour un modèle de deep learning en convertissant un modèle appris pour la librairie caffe2 avec ONNX : ONNX: deploying a trained model in a C++ project. C'est une direction choisie par le module sklearn-porter qui propose des codes en Java, C++, Go, PhP, Ruby, Javascript pour certains des modèles implémenté par scikit-learn. Cela couvre nettement plus de modèles que ce que j'avais commencé à faire avec mlprodict. Il existe d'autres options comme Seldon, à moitié open source, à moitié tourné vers une proposition de services.

2018-03-19 ONNX : apprendre et prédire sur différentes machines

J'écrivais sur onnx il y a peu de temps. onnx, onnxmltools sont deux librairies qui permettent de convertir des modèles de deep learning mais aussi des modèles entraînés avec scikit-learn en un format unique. Lorsque cela est possible, cela permet d'utiliser avec une librairie un modèle appris avec une autre. C'est pratique si vous trouvez un modèle de deep learning appris avec Caffe et que vous souhaitez l'associé avec un autre appris avec pytorch. La suite n'a pas tardé, il est maintenant possible d'utilser ce format unique sur une machine qui dispose de l'algorithme de prédiction associé. Concrètement, on peut maintenant apprendre un modèle avec scikit-learn et l'utiliser depuis un programme écrit en C# sans faire appel à Python : How Three Lines of Code and Windows Machine Learning Empower .NET Developers to Run AI Locally on Windows 10 Devices. Quelques informations techniques supplémentaires : Windows Machine Learning overview.

On ne se pose plus la question de savoir s'il faut utiliser du deep learning mais plutôt comment le mettre en production. TensorFlow-Serving est une solution assez aboutie qui implémente certains besoins : prédiction temps réel, adaptation à un trafic élevé, capables de conserver de vieilles versions de modèles, de le comparer, de faire de l'A/B testing. Certains ont partagé leur expérience How Zendesk Serves TensorFlow Models in Production/ L'inconvénient est d'être plus ou moins lié à TensorFlow et personnellement je préfère PyTorch. La librairie est plus intuitive et séduit beaucoup les chercheurs : PyTorch or TensorFlow?. Elle est aussi rapide que TensorFlow voire un peu plus : Deep Learning Framework Examples. Il reste le problème de la mise en production. C'est là que le projet ONNX intervient en proposant de séparer l'apprentissage et l'exploitation en production. D'un côté l'apprentissage avec une librairie, une de celle supportée par ONNX, de l'autre une autre librairie ou runtime spécifique au la machine qui fera tourner les prédictions. Le reste du site web est composée de briques classiques. C'est une approche plus modulaire est moins dépendante d'un composant en particulier.

2018-03-13 Visualiser un arbre de décision

Je me suis amusé à essayer des libraires javascript pour représenter un arbre de décision. Amuser n'est pas vraiment le bon mot. C'est le genre de trucs que je n'aime pas faire plusieurs fois. Je l'ai emballé dans une fonction : Visualiser un arbre de décision. Le seul truc est que cela ne marche pas dans jupyterlab car l'exécution de javascript customisé est désactivée à moins d'en faire une extension ert mon courage s'est arrêté là.

2018-03-12 OpenFoodFacts et Google Summer of Code

La belle aventure de OpenFoodFacts continue. Elle fait partie des élus de Google Summer of Code. C'est un beau projet qui a permis de construire une base de données sur de nombreux produits alimentaires dans le monde entier. Si vous souhaitez connaître la qualité de ce que vous achetez, les produits équivalents mais sans additifs, c'est là qu'il faut aller. Les données sont accessibles et chacun peut imaginer une application. Et OpenFoodFacts cherche à automatiser la collecte et l'enrichissement de cette base. Vous trouverez de nombreux défis à résoudre : Student projects/GSOC/Proposals et certains requièrent l'utilisation du deep learning. Parfait pour un stage.

2018-03-03 onnx

onnx est un outil qui permet de convertir des modèles de deep learning venant de plusieurs librairies différentes dans un format commun. Cela d'une certaine façon de passer d'une librairie à l'autre mais aussi de pouvoir exécuter des prédictions sur un système différent de celui ayant servi à l'apprentissage. Ordinateur, tablettes, téléphones, objets connectés... C'est l'idée. Apprendre sur un ordinateur dédié à cette usage et optimisé pour cela et prédire sur une machine de moindre puissance mais plus adaptée. onnxmltools étend la liste des librairies à celle du machine learning classique, comme bien évidemment scikit-learn. Et il se trouve que j'y ai contribué.

Cela m'a permis de redécouvrir le site de chainer qui a récemment évolué et casser quelques-uns de mes tests vérifiant mes supports de cours. Le design est similaire à celui de pytorch mais la partie GPU a été placée dans un module séparé cupy qui s'apparente à un numpy pour GPU. Je garde malgré tout une préférence pour le premier même si l'installation sous Windows est encore assez confuse et repose soit sur votre propre compilation soit sur celle disponible ici : anaconda/peterjc123. cupy est disponible quant à lui sur le site Unofficial Windows Binaries for Python Extension Packages.

03/07 : les modèles convertis par ONNX deviendra très bientôt facilement utilisables sur Windows 10 : ONNX Models to be Runnable Natively on 100s of Millions of Windows Devices.

2018-02-17 Machine learning sans diagonale

La plupart de mes cours se font sous la forme de notebooks, plus ou moins indépendant, des exercices en pagaille qui manquent de cohérence et de continuité. Pour l'instant, ça s'appelle Petit voyage au pays du machine learning, ça n'est pas parfait mais ça a un début et une fin.

2018-01-17 Montage vidéo avec Python

La programmation peut aussi servir à faire du montage vidéo. C'est du moins ce que j'ai essayé de construire en imaginant l'atelier pour Lille - Devoxx4Kid - 13 janvier 2018. Pour un néophite, le module moviepy n'est pas si évident que ça à manipuler. J'ai donc commencé à imaginer une interface avec uniquement des fonctions : Vidéos et Sons. J'y ai fait mon premier trucage vidéo :

Si on ajoute des modules tels que fcn qui permet de séparer les personnages du fond d'une image, on peut commencer à fabriquer des vidéos assez trafiquées.

2018-01-03 Small change and potentially big impact (pandas)

pandas updated its interface in its version 0.22. More particularly v0.22.0 (December 29, 2017),

print(pd.Series([]).sum())
0.0  # It was nan in 0.21.

This is typically the kind of change which could have a huge impact on many functions if you don't have unit tests to capture that. According to the documentation of sum, the previous behaviour can be retrieved by adding min_count=1.

print(pd.Series([]).sum(min_count=1))
nan

And in 10 days, computers might slow down: Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign. See also KASLR is Dead: Long Live KASLR.

2017-12-21 Les vélib changent, les données aussi

JCdecaux arrêtera de fournir les données velib au 31 décembre. Le nouveau format des données suivrait le format General Bikeshare Feed Specification (GBFS). Il y a fort à craindre que quelques applications de vélib cessent de fonctionner pendant quelques temps. Je ne parle pas des applications pour les téléphones Windows qui ne seront probablement pas mise à jour.

2017-12-18 Intelligence artificielle : hope and despair

Le machine learning dans sa conception qui s'appuie sur des bases d'apprentissage et de test est une façon de synthétiser un savoir puis de le restituer. Ce savoir est une liste d'évènements passés, ce que l'on sait d'une manière plus ou moins structurée, il est restitué le plus souvent sous la forme d'une aide à la décision pour les décisions futures. Le machine learning ne fait rien d'autre que de dire, sur la base des éléments passés, qu'il se passerait probablement ceci pour ces nouveaux éléments. A vous de vous en servir au mieux.

Cela dit, cela dit, ... Je viens de voir l'épisode 7 de la saison 7 de The Good Wife sur l'intelligence artificielle (S7E7).


more...

2017-11-11 Hackaton ENSAE : 3ème édition

J'en dirais plus bientôt mais ces deux articles devraient vous mettre sur la voie : Emmaüs se lance dans le e-commerce solidaire, Label-emmaus.co veut être un « Leboncoin solidaire ». Le troisième hackathon de l'ENSAE aura lieu les 24 et 25 novembre. Il proposera trois sujets, un sujet deep learning, un machine learning, un dernier créatif, plus économique que les années précédentes. Trois sujets inspirés des problématiques rencontrées par Label Emmaüs qui a accepté de contribuer à l'événement. Ernst & Young sponsorise à nouveau l'événement, côté étudiants, Genius contribue de nouveau à l'organisation. En attendant les prochaines informations, il faudra vous contenter du résumé des deux précédentes éditions : Hackathon Microsoft / ENSAE / Croix-Rouge / DataForGood - 2015, Hackathon Ernst & Young / ENSAE / Croix-Rouge / Crésus - 2016.

2017-11-05 streaming pandas dataframe

pandas is widely used by data scientists. It is one of the modules which contributed a lot to the Python ecosystem to manipulate data. It is not perfect, a dataset takes in memory three times the space it takes on disk in average and reading a couple of gigabytes is necessarily fast. However, a couple of gigabytes is not enough to think about stronger approaches such parallelization (dask, ...) but with a little bit of overhead for such size. All I wanted was the same functionalities as pandas but implemented in a streaming way. No need to load the whole datasets in memory, no need to wait for the data to be fully loaded in memory. That's why I started pandas_streaming.

import pandas
df = pandas.DataFrame([dict(cf=0, cint=0, cstr="0"),
                       dict(cf=1, cint=1, cstr="1"),
                       dict(cf=3, cint=3, cstr="3")])

from pandas_streaming.df import StreamingDataFrame
sdf = StreamingDataFrame.read_df(df)

for df in sdf:
    # process this chunk of data
    # df is a dataframe
    print(df)

The module will continue to grow probably not as fast as I would like it to.


<-- -->

Xavier Dupré