aiguille dans botte de foin: scikit-learn et joblib

30
Aiguille et botte de foin : scikit-learn et joblib pour explorer des donn´ ees volumeuses G. Varoquaux Neurospin + INRIA

Upload: gaelvaroquaux

Post on 21-Jun-2015

1.319 views

Category:

Technology


4 download

DESCRIPTION

Présentation à Pycon FR 2010 sur l'apprentissage statistique effiace en Python avec scikit-learn et joblib.

TRANSCRIPT

Page 1: Aiguille dans botte de foin: scikit-learn et joblib

Aiguille et botte de foin :scikit-learn et joblib pour explorer des donnees volumeuses

G. VaroquauxNeurospin + INRIA

Page 2: Aiguille dans botte de foin: scikit-learn et joblib

Explosion de la quantite de donnees

Page 3: Aiguille dans botte de foin: scikit-learn et joblib

Explosion de la quantite de donnees

Page 4: Aiguille dans botte de foin: scikit-learn et joblib

Traitement statistique de donnee (apprentissage)

Resumer l’information

Predire de nouvelles informations

Statistiquement optimal

Algorithmiquement rapide

Page 5: Aiguille dans botte de foin: scikit-learn et joblib

1 Predire – scikit-learn

2 Resumer – scikit-learn

3 Etre faineant (et efficace) – joblib

Page 6: Aiguille dans botte de foin: scikit-learn et joblib

1 Predire – scikit-learn

Page 7: Aiguille dans botte de foin: scikit-learn et joblib

1 Reconnaissance de visage

Andre Bernard Charles Didier

Page 8: Aiguille dans botte de foin: scikit-learn et joblib

1 Reconnaissance de visage

Andre Bernard Charles Didier

?

Page 9: Aiguille dans botte de foin: scikit-learn et joblib

1 Methode naıve

1 Estimer les visages typiques a partird’images connues (bruitees).

2 A partir d’une photo (bruitee aussi), trouverle visages typique qui lui ressemble le plus.

Page 10: Aiguille dans botte de foin: scikit-learn et joblib

1 Une botte de foin

La fraction d’information interessante est faible :Il y a du bruitL’image est grande

0.0 0.5 1.0 1.5 2.0 2.5 3.0Niveau de bruit

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1.0

Taux d

e p

redic

tion

1 2 3 4 5 6 7

Fraction utile du cadre

0.40

0.45

0.50

0.55

0.60

0.65

0.70

Taux d

e p

redic

tion

Page 11: Aiguille dans botte de foin: scikit-learn et joblib

1 Les vrais donnees sont pourries

http://cswww.essex.ac.uk/mv/allfaces100 individus, 10 photos par individu,a peu pres alignees

Page 12: Aiguille dans botte de foin: scikit-learn et joblib

1 Validation croisee

1 Choisir une fraction des photos pour les visagesconnus (jeu d’apprentissage).

2 Apprendre les visages typiques et la fonction deprediction dessus.

3 Tester la prediction en essayant de nommer lesphotos non utilisees pour l’apprentissage (jeu detest) et en mesurant le taux d’erreur.

Page 13: Aiguille dans botte de foin: scikit-learn et joblib

1 Du code : scikit-learn

Objets avec fit/predict prenant des tableaux numpye = E s t i m a t o r ()e . f i t ( known f a c e s , known names )g u e s s e d n a m e s = e . p r e d i c t ( u n k o w n f a c e s )

Generateurs de validation croisee renvoyant des masquesfrom s c i k i t s . l e a r n import c r o s s v a lcv = c r o s s v a l . S t r a t i f i e d K F o l d ( names )for t r a i n , t e s t in cv :

e . f i t ( f a c e s [ t r a i n ], names [ t r a i n ])e . p r e d i c t ( f a c e s [ t e s t ])

Ingredients de base d’un framework d’apprentissage

Page 14: Aiguille dans botte de foin: scikit-learn et joblib

1 Au final : .5% d’erreur de prediction

Utiliser les k plus proches voisin (kNN) :import numpy as npfrom s c i k i t s . l e a r n import c r o s s v a lfrom s c i k i t s . l e a r n . n e i g h b o r s import N e i g h b o r s

cv = c r o s s v a l . S t r a t i f i e d K F o l d ( l a b e l s , k =5)e = N e i g h b o r s (k =5)e r r o r s = c r o s s v a l . c r o s s v a l s c o r e (e , data ,

l a b e l s , cv = cv )print ’score ’, np.sum( e r r o r s )/ f l o a t ( l e n ( da t a ))

Choisir k pour optimiser le score.Attention 2 boucles imbriquees de validation croisee1 choisir k2 evaluer l’erreur sur des donnees inconnues

Page 15: Aiguille dans botte de foin: scikit-learn et joblib

2 Resumer – scikit-learn

Page 16: Aiguille dans botte de foin: scikit-learn et joblib

2 Reduire la taille des donnees

Botte de foin : la taille des donnees nuit a laperformance

Les images contiennent beaucoupd’information redondante

Comment la reduire de facon optimale ?

Page 17: Aiguille dans botte de foin: scikit-learn et joblib

2 Former des groupes

Pays associes a une devise majeureLa correlation des taux de changes fournit

une mesure d’affinite

Page 18: Aiguille dans botte de foin: scikit-learn et joblib

2 Former des groupes

Qui se ressemble s’assemble

Page 19: Aiguille dans botte de foin: scikit-learn et joblib

2 Former des groupes sur une image

Lena

4 8 16 32

Page 20: Aiguille dans botte de foin: scikit-learn et joblib

2 Former des groupes sur les 1000 visages

k=30 k=50 k=100 k=200Choisir k pour maximiser la prediction(encore une boucle de validation croisee)

Page 21: Aiguille dans botte de foin: scikit-learn et joblib

2 scikit-learn

Apprentissage statistique en PythonEfficace

Bons algorithmes, numpy + scipy,C + Cython + Python

PythonesqueLicense BSD, objets simples,pas de dependences autres que numpy + scipy

Facile a utiliserAPI uniforme, documentation,parametres par default

Page 22: Aiguille dans botte de foin: scikit-learn et joblib

3 Etre faineant (et efficace) –joblib

Page 23: Aiguille dans botte de foin: scikit-learn et joblib

3 Evaluation faineante

On calcule toujours la meme choseBoucles de imbriquees avec transformationssuccessivesCalculs en variant les parametres

DifficultesConnaıtre les dependances entre les etapesSuivre les parametres

Evaluation faineante : ne pas recalculer cequ’on a deja calcule

Page 24: Aiguille dans botte de foin: scikit-learn et joblib

3 pipeline/data flow programming

Page 25: Aiguille dans botte de foin: scikit-learn et joblib

3 joblib

Philosophie

Simple ne changez pas vos programmesn’apprenez pas de nouveau paradigmes

Minimal pas de dependances, embarquablepeu de fonctionnalites

Performant grosses donneescalcul parallele

Robuste tolerant aux erreursdebuggable

Page 26: Aiguille dans botte de foin: scikit-learn et joblib

3 joblib

Evaluation faineante>>> from j o b l i b import Memory>>> mem = Memory( c a c h e d i r =’/tmp/ joblib ’)>>> import numpy as np>>> a = np. v a n d e r (np. a r a n g e (3))>>> s q u a r e = mem. cache (np. s q u a r e )>>> b = s q u a r e (a)

[Memory] C a l l i n g s q u a r e ...s q u a r e ( a r r a y ([[0 , 0, 1],

[1, 1, 1],[4, 2, 1]]))

s q u a r e - 0.0 s>>> c = s q u a r e (a)>>> # Pas de re - evaluation

Page 27: Aiguille dans botte de foin: scikit-learn et joblib

3 joblib

Evaluation faineante

Hash MD5 des parametres d’entrees (efficace)⇒ pas de modele de donnees et d’execution

Stockage sur disk dans des repertoires separes(efficace – memmap)

Table globale sqlite (verrous :( )

Nettoyage de cache a la volee (beta)

Page 28: Aiguille dans botte de foin: scikit-learn et joblib

3 joblib

Calcul parallele>>> from j o b l i b import P a r a l l e l , d e l a y e d>>> from math import s q r t>>> P a r a l l e l ( n j o b s =1)( d e l a y e d ( s q r t )( i **2)... for i in r a n g e (7))[0.0 , 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]

La syntaxe est importante

Le debugage aussi

⇒ Fork agressif

Page 29: Aiguille dans botte de foin: scikit-learn et joblib

3 joblib

Le futur

Meilleur branchement parallele/memoire

Meilleurs bases de donnees/datastore

2 niveaux de cache (memoire/disk)

Suivit d’execution

Page 30: Aiguille dans botte de foin: scikit-learn et joblib

3 Traitement de donnees performant. . .

Scikit Learn :Algorithmes etat de l’artProjet jeune

joblibMieux calculerPas que scientifique

http://scikits-learn.sf.nethttp://packages.python.org/joblib