Master 2 DAC

Fouille de Donnée et Média Sociaux (FDMS)

Tutoriel sklearn

sklearn est une une bibliothèque python très utilisée en machine learning. Il est nécessaire d'être à l'aise dans la manipulation des matrices numpy pour profiter de sklearn.

Un tutoriel numpy est disponible ici

Chargement des données

Etape numéro 1 de tout processus de traitement de données, il faut charger les données.

Les bonnes sources de données:

Pour le chargement:
SOLUTION 1 utiliser les outils intégrés [vraiment très simple !]

import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.decomposition import PCA

# import some data to play with
iris = datasets.load_iris()
X = iris.data[:, :2]  # we only take the first two features.
Y = iris.target

Reste de la démo: ici

SOLUTION 2 les données sont en csv (numérique seulement)

import matplotlib.pyplot as plt
import numpy as np

# import some data to play with
iris = np.loadtxt('filename.csv')
X = iris[:, :2]  # we only take the first two features.
Y = iris[:, -1] # dernière colonne

SOLUTION 3 faire une partie des traitement à la main...

  • Cf module csv lien
  • Sinon, il reste la gestion de fichier lien
    • readline -> le mieux pour lire rapidement une table
    • split -> pour séparer les cases sur chaque ligne

Mise en forme et sauvegarde intermédiaire

La mise en forme des données, normalisation... Repose sur le tutoriel numpy ici

Mais vous devez avoir le réflexe de sauver les traitements effectués, notamment les plus lourds (pour éviter de les refaites)... Utiliser pickle (ou cPickle pour aller plus vite): c'est la serialization standard python qui est très efficace.

Voici les syntaxes usuelles:

import numpy as np
import pickle as pkl
import os.path


fnamePkl = "monFichierSauve.pkl"
if not os.path.isfile(fnamePkl):
    f = open(fnamePkl,"wb")
    [....] # tous les traitements utiles !

    f = open(fnamePkl,"wb")
    pkl.dump([data,labs],f) # sauvegarde
    f.close() # bien penser à fermer le fichier !
    print "data processed and saved"

else:
    f = open(fnamePkl,"rb")
    data,labs = pkl.load(f)
    print "file loaded"
    f.close()

Construction d'un classifieur

La force de sklearn réside dans le nombre de classifieurs efficaces implémentés (ou wrappé) accessible directement via une syntaxe unifiée:

  • Naive Bayes
  • SVM
  • Arbre de décision
  • forêts aléatoires
  • ...

Tous les classifieurs disposent d'un paramétrage par défaut mais il est vivement conseillé de vérifier ce paramétrage.

L'interface d'aide est disponible en ligne ici

from sklearn import svm

X = [[0, 0], [1, 1]]
y = [0, 1]
clf = svm.SVC() # definition du classifieur
clf.fit(X, y) # apprentissage
clf.predict([[2., 2.]]) # usage sur une nouvelle donnée

Evaluation des performances

L'évaluation des modèles présente autant d'enjeux que leur apprentissage. C'est aussi une force de sklearn.

Solution 1 Calcul de score seul

La syntaxe fonctionnelle de python permet de donner un classifieur en argument de la validation croisée: tout se fait tout seul!

from sklearn import svm
from sklearn import cross_validation

# usage en boucle implicite
# le classifieur est donné en argument, tout ce fait implicitement (possibilité de paralléliser avec @@n_jobs@@)
scores = cross_validation.cross_val_score( clf, iris.data, iris.target, cv=5)

Solution 2 Split simplifié

# usage basique: split train/test
X_train, X_test, y_train, y_test = cross_validation.train_test_split( iris.data, iris.target, test_size=0.4, random_state=0)

# apprentissage + test sur les ensembles...

Solution 3 Boucle de validation croisée simplifiée

# boucle explicite (pour les traitements plus complexe)
skf = cross_validation.StratifiedKFold(labels, nFolds)
for train, test in skf:
    train # contient les indices de train
    test # contient les indices de test