XD blog

blog page

~technical


2016-04-14 Retour sur le hackathon ENSAE / Microsoft / Croix-Rouge

Le hackathon ENSAE / Microsoft / Croix-Rouge s'est terminé depuis quelques temps déjà (novembre 2015). Je ne sais pas si une seconde édition aura lieu même si la question m'est régulièrement posée. En attendant, les photos sont disponibles, la vidéo tirée de l'événement ENSAE ParisTech - DSSC l'est aussi depuis peu. Un retour sur l'événement, plus complet, a récemment été publié dans la revue des anciens de l'ENSAE : Le premier hackathon organisé par l’ENSAE et Microsoft sur les données de la Croix-Rouge. Enfin, Microsoft sponsorise la seconde édition du Data Science Game (2016).

Les résultats des deux groups vainqueurs du hackathon ont été présentés lors du meet up de DataForGood en janvier 2016.

2016-04-02 Apprendre la programmation

C'est l'histoire de trois français qui montent une école de programmation dans la Silicon Valley. Holberton School, 40% de femmes parmi la première promotion, petite promotion de 32 étudiants, le cursus est gratuit, l'école se rémunère en prenant 17% du salaire sur les trois premières années de chaque étudiant une fois le premier job trouvé. Pas d'examen, apprentissage et évaluation par projet uniquement. Ces Français qui veulent apprendre aux Américains à coder. Dernier point : les mentors. Nombreux, de tous horizons professionnels, et pour la plupart, français.

2016-03-30 Create a video in Python from images

I was looking into making a short video based on images produced with matplotlib or pygame. Here is the results with a simple simulation used once in while in my teachings. Unfortunately, I was not able to directly produce a video I could see through the brower. I needed to convert it with MovieMaker.

And the code...


more...

2016-03-25 Les classes en programmation

Monsieur, c'est vraiment utile les classes ? On est obligé de les utiliser ? C'est le genre de questions que les étudiants posent alors qu'ils commencent leur projet. La réponse courte consiste à répondre que c'est plus pratique. Mais concrètement, ça veut dire quoi plus pratique ? D'une manière générale, on s'embarrasse rarement d'un concept s'il n'apporte rien. On peut écrire les mêmes programmes sans classes mais...


more...

2016-03-22 Accélérer Python

Python est très lent, c'est pratiquement son seul défaut avec le fait qu'il n'est pas vraiment un langage multi-thread à cause du GIL. Bref, pour accélérer le langage, on passe le plus souvent par du C et donc un langage compilé. Le plus simple est d'écrire ses calculs en C puis de s'interfacer avec le langage Python. C'est comme cela que fonctionne la librairie numpy. Une autre option consiste à écrire en pseudo langage C avec Cython. C'est l'option choisie par scikit-learn. Mais on ne réécrit pas tout, on utilise un profileur qui nous indique où le programme perd le plus de temps et on travaille spécifiquement sur cette partie. Et si on ne veut pas réécrire du code, on peut penser à changer d'interpréteur afin que le même code python soit exécuté plus rapidement. Sur ce point, il faut lire Les interpréteurs alternatifs de python. Une caractéristique des langages compilés (et non interprétés) et que les variables sont déclarées avec un type précis.

def addition(x, y):
    return x + y

La fonction précédente fonctionnera si l'addition de x et y au moment de l'exécution si cette addition à un sens ce qui ne requiert pas que ces deux variables soient du même type.

double addition(double x, double y) {
    return x + y;
}

En C, on est obligé de spécifier le type car on ne peut donner un sens au symbol + que si le type des variables est connu. Compiler le langage Python implique alors de faire de l'inférence de type... ce qu'il est parfois impossible d'accomplir à moins d'exécuter le programme. On se tourne alors vers les JIT qui propose de compiler certaines parties d'un programme en partant du code interprété lors de l'exécution.

2016-03-19 A few interesting links about Python

A few links about regular expressions, machine learning, automation:

The last page gives a list of python modules about machine learning. Among mlxtend has a really nice and detailed documentation. It includes formulas.

2016-03-13 Ranking python modules

I was puzzled was a new badge on matplotlib about Depsy. A link to dill on depsy, a link on the same module on pypi-ranking: dill. I checked pythonnet. The number of contributors is actually wrong and it is difficult to see when the last contribution was made which is one the first thing I look at before using a new module.

2016-03-03 Puzzle, Rubik's, Gaming

Here are a few link on the Rubik's cube. It started with an article on French MOOCs: French MOOC: Résoudre un Rubik’s cube grâce aux mathématiques. And I followed some links:

Lectures about how to program in Python, how to create a game: Program Arcade Games With Python And Pygame.

2016-02-28 Python 2.7 and Python 3, difference with multiple inheritance

There is a little difference in the way Python 3 and Python 2.7 handles multiple inheritance. Class Cl inherits from ClA and ClB. ClA defines method1, ClB defines suffix. The question is: Does method method1 from class ClA know about method suffix from class ClB? In Python 3, it does:

class C0:
    def suffix(self):
        raise NotImplementedError()

class ClA(C0):
    def method1(self):
        return "A.method1" + self.suffix()
        
class ClB(C0):
    def suffix(self):
        return "--B"
        
class Cl(ClA, ClB):
    pass

cl = Cl()
print(cl.method1())

[1]

A.method1--B

In Python 2.7?


more...

2016-02-26 Don't mix return and yield

When a function uses the keyword yield, it becomes a generator. A second function can accept this generator and produce another one as follows.

def generator(seq):
    for v in range(0,3):
        yield v+1
        
def generator2(gen):
    for r in gen:
        yield r

for v in generator2(generator(3)):
    print(v)

[1]

1
2
3

This is not the only way to write this function. Python 3.5 has introduction keyword yield from.


more...

2016-02-21 scikit-learn, dask and map reduce and examples on Python about machine learning

This is blog post about a couple of topics. The first one is about parallelizing a scikit-learn pipeline with dask. Pipelines and Reuse with dask. A little bit more and dask Introducing Dask Distributed. The module distributed distribute work on a local machine with syntax very close to map/reduce syntax. An example taken from the documentation:

def square(x): return x ** 2
def neg(x): return -x

from distributed import Executor
executor = Executor('127.0.0.1:8786')

A = executor.map(square, range(10))
B = executor.map(neg, A)
total = executor.submit(sum, B)
total.result()

I was being asked where to find examples, scripts about machine learning. Most of them happen to be written within a notebook such as the one posted on Kaggle: Python script posted on kaggle or examples from this blog: Yhat blog. Other examples can be found at ENSAE / Bibliography / Python for a Data Scientist. If you are looking for more examples of code, pick one kaggle competition and look for it on a search engine after adding the word "github", you may be able to find interesting projects. Just try kaggle github to begin with.

2016-02-05 Yann Le Cun au collège de France

Yann Le Cun au collège de France. Pour ceux qui découvrent : La leçon d’un maître de l'intelligence artificielle au Collège de France ou sur France Culture Le "Deep Learning", ou l'apprentissage profond des machines.

2016-02-03 Cancer, pesticides, Epidemium

A en croire l'émission Cash Investigation, la France est inondée de pesticides et beaucoup sont cancérigènes. Un article est même paru dans Le monde le lendemain : Pesticides : des substances toxiques, invisibles et omniprésentes. L'émission commence par la construction d'une carte qui recense les pesticides épandus sur le territoire français. Ces données sont a priori très difficiles à obtenir. Il seraient sans doute intéressant de les ajouter dans une version non agrégée aux jeux de données proposés par le challenge Epidemium. Les données que l'émission a regroupé semblent autrement plus détaillées que celles disponibles où la valeur Non renseigné semble assez fréquente.

Aujourd'hui, j'ai regardé les bouteilles de vin de façon différente. Au rayon bordeaux, la région la plus arrosée, j'ai cherché les vins bio.

2016-02-02 Leicester en tête du championnat grâce au Big Data

D'après l'article Football : il était une fois Leicester City..., le manager de Leicester a utilisé des statistiques pour recruter des joueurs méconnus mais prometteurs. Pour citer l'article : Selon lui, 200 000 euros d'investissement dans les algorithmes sont l'équivalent d'un budget de 10 millions d'euros en achat de joueurs. Leicester est premier du championnat aujourd'hui avec le meilleur buteur.

2015-12-22 Deep Learning and others readings

I came accross the following article Evaluation of Deep Learning Toolkits which studies a short list of libraries for deep learning: Caffe, CNTK, TensorFlow, Theano, Torch, and various angles: modeling capability, interfaces, model deployment, performance, architecture, ecosystem, cross-platform. It gives a nice overview and helps choosing the library which fits your needs. Once your deep models has been trained, how to use it? This question should be the first one to be answered.

As machine learning and big data become more and more popular, people look for ways to simplify the implementation of complex chains of processings. Python is quite popular so here is one suggestion in that language for deep learning: Blocks and Fuel: Frameworks for deep learning (Bart van Merriënboer, Dzmitry Bahdanau, Vincent Dumoulin, Dmitriy Serdyuk, David Warde-Farley, Jan Chorowski, Yoshua Bengio). It introduces Fuel which models pipelines of data processing.

Finally, a nice tutorial on machine learning with Python: PyData Seattle 2015 Scikit-learn Tutorial. The author's blog is nice too: Pythonic Perambulations. See Out-of-Core Dataframes in Python: Dask and OpenStreetMap. Some modules are hidden in his blog posts such as gatspy which plots timeseries in many ways or supersmoother to smooth timeseries or line_profiler in Optimizing Python in the Real World: NumPy, Numba, and the NUFFT. Two other readings to conclude: Why Python is Slow: Looking Under the Hood and Frequentism and Bayesianism: A Practical Introduction still from the same source.

01/06/2015 Comparative Study of Caffe, Neon, Theano, and Torch for Deep Learning


<-- -->

Xavier Dupré