Support de cour sur le langage python pour la data science
![Support de cour sur le langage python pour la data science](/images/remos_downloads/id-11456.11456.pdf_thumb_prev.jpg)
Chapitre 4
OUTILS PYTHON
POUR LA DATA SCIENCE L’écosystème Python pour les data scientists
import numpy as np from sklearn import datasets data = datasets.load_iris() X,Y = ,data.target # Mélange le jeu de données from sklearn.utils import shuffle X,Y = shuffle(X,Y) # Crée une forêt de 10 arbres from sklearn.ensemble import RandomForestClassifier forest = RandomForestClassifier(n_estimators = 10) # Découpe en jeu d'apprentissage et jeu de test Xa,Xt = X[:0.8*len(X)], X[0.8*len(X):] Ya,Yt = Y[:0.8*len(Y)], Y[0.8*len(Y):] # Apprend le modèle (Xa,Ya) # Prédit la sortie Yp = forest.predict(Xt) |
Modèle
Validation croisée
# Evalue le modèle (score par défaut) print("score = ", forest.score(Xt,Yt)) # Utilise une métrique from sklearn.metrics import zero_one_loss print("zero loss = ", zero_one_loss(Yt,Yp)) # Validation croisée avec fonction prédéfinie forest = RandomForestClassifier(n_estimators = 10) from sklearn import cross_validation as cv acc = cv.cross_val_score(forest,X,Y, cv = 10, scoring = "accuracy") print("accuracy = ", ()) # Validation croisée avec fonction de perte spécifique from sklearn.metrics import make_scorer cout = np.array([3,1,2]) def myloss(yreel, ypred): return cout[yreel[yreel != ypred]].sum() myloss = cv.cross_val_score(forest,X,Y,cv = 10, scoring = make_scorer(myloss)) print("myloss = ", ()) |
import pandas as pd import numpy as np # Création d'un "DataFrame" data = { "site" : [ "Musée d'Art Moderne", "Musée du Louvres", "Musée d'Orsay", "Centre Pompidou", "Centre Pompidou", "Musée des Beaux-Arts" ], "type" : [ "Contemporain", "Classique", "Impressionisme", "Contemporain", "Contemporain", "Classique" ], "ville" : [ "Strasbourg", "Paris", "Paris", "Paris", "Metz", "Nancy" ], "visite" : [ 2011, 2012, 2012, 2012, 2015, 2011 ] } frame = pd.DataFrame(data, index = ["Str1", "Par1", "Par2", "Par3", "Mtz1", "Ncy1"]) # Sélections de colonnes et de lignes print(frame[[1,2]].ix[1:3]) print(frame[['site','ville']].ix['Str1':'Mtz1']) ![]() sample = (np.random.randint(0, len(frame), size = 2)) # Ajout, suppression de lignes, de colonnes frame['nbr'] = [2,2,3,3,4,1,] del frame['nbr'] ('Mtz1') |
# Statistiques print(frame.describe()) print(frame['visite'].mean()) # Histogrammes et discrétisation (frame.visite,2) frame['periode'](frame.visite,2) # Aggrégation groups = frame.groupby(frame['type']) print(()) print((lambda g : (g.min(), g.max()))) # Nettoyage et préparation frame.drop_duplicates() frame['code'] = frame['type'].map({ "Contemporain": 1, "Classique" : 2 }) frame = frame.dropna() # Jointure frame2 = pd.DataFrame({ "ville" : [ "Strasbourg", "Paris","Metz", "Nancy" ], "dept" : [ 67, 75, 57, 54 ] }) frame3 = pd.merge(frame, frame2, on='ville') |
Matplotlib et les projections cartographiques
|
Validation croisée
But : évaluer la capacité à généraliser
– Risque de sur-apprentissage ? besoin d’un jeu d’exemples et de test indépendant – Nombre d’échantillons limité
Solution : validation croisée 3-fold, 10-fold, …, m-fold (leave-one-out)
Evaluation d’une méthode de régression
Problème : mesurer les écarts entre prédictions et valeurs cibles réelles
Mesure | Définition |
Corrélation entre et | |
Erreur absolue (L1) moyenne ![]() | 1 1 =? ? ? ??? ? 1???? |
Evaluation d’une méthode de classification binaire :
Les 4 catégories de prédiction d’un classifieur binaire :
Taux d’erreur : estimation du risque moyen ? où est l’erreur valant 0 ou 1
Taux de réussite / de prédiction (accuracy) :
Généralisation au problème multi-classe :
Matrice de confusion
Taux de réussite :
Confiance sur les mesures (1)
Problème 1 : quelle confiance accorder à une mesure calculée sur un ensemble fini d’exemples de test ?
Réponse : calculer un intervalle de confiance
Exemple du taux d’erreur calculé sur m exemples :
1. Hypothèse : exemples indép. ident. distribués (apprent. et test)
? Si la probabilité de commettre une erreur est p, le nombre d’erreurs
??=1 ?? ?? ? suit une distribution binomiale de prob. p, telle que
2. converge vers une loi normale car m >> 100 (loi des grands nombres)
Ne ?1??
?? =1??? = ? ?,
? ??+? ?
Confiance sur les mesures (2)
3. Normalisation de la distribution :
?? ??
??? ?(0,1)
?1?? ??+?
?
4. Calcul d’un intervalle de confiance de risque ? sur ?0,1 :
? ? >??~?0,1 =???=?????? 0,1 ?
5. Déduction d’un intervalle de confiance sur p fonction de ? et m :
Application numérique :
Exemple des données « Glass » (identification de verres en criminologie)
![](/images/remos_downloads/detail/114/id-11456.11456.pdf-004.jpg)
1. Nbr d’exemples : ? =214
2. Marge d’erreur de ?=1%??=2,58 , ?=5%??=1,96
3. Test en validation croisée. Mesure de ??. Ex C4.5 : ?? =66%
4. Calcul de l’intervalle de confiance
?? | ? =?% ???? ???? | ? =?% ???? ???? | ||
66 % | 57 % | 73 % | 59 % | 72 % |
90 % | 83 % | 94 % | 85 % | 93 % |
99 % | 95 % | 99,8 % | 96,6 % | 99,7 % |
Confiance sur les mesures (3)
Problème :
comment comparer deux méthodes (A et B) selon une mesure calculée sur différents jeux de données ?
Exemple d’un score s calculé sur k jeux de m exemples :
1. Hypothèse : exemples indép. ident. distribués et m élevé >> 100
? et suivent des lois normales (loi des grands nombres) pour le jeu i ? suit une loi normale (loi des grands nombres) indépendante de i :
2. Distribution de la mesure globale :
3. Estimation des paramètres :
![](/images/remos_downloads/detail/114/id-11456.11456.pdf-005.jpg)
Confiance sur les mesures (4)
Problème : la variance n’est pas connue (loi du ) :
1. La distribution normalisée suit une loi de Student de degré k-1:
2. Test d’hypothèse nulle : A et B sont équivalentes si
3. Calcul d’un intervalle de confiance de risque sur S(k) :
? ? >?=???=????????1(?)
4. Test statistique :
– Si alors A et B sont statistiquement équivalents
– Sinon si , A est meilleur que B
– Sinon B est meilleur que A
Problème des classes déséquilibrées
• Compromis optimal entre sensibilité et spécificité :
Exemples :
• classifieur « toujours positif » ??? = 1, ??é = 0
• classifieur « toujours négatif » ??? = 0, ??é = 1
• classifieur aléatoire « positif de prob. ? » ??? = ?, ??é = 1 ? ?
• Biais du taux de réussite (accuracy) par le taux de positif :
• Taux de réussite non biaisé :
Courbe ROC
(receiver operating characteristic)
Courbe ROC
(receiver operating characteristic)
0 Taux de faux positif = 1 - spécificité 1
Lien avec les courbes lift (lift chart)
• Outil utilisé en « marketing » (démarchage, etc)
– Tri des exemples par score décroissant
– Abstraction du score
– Lift chart : nombre de oui versus taille de l’échantillon
|
Erreur de classification à coût variable et aide à la décision
Application où le coût de l’erreur est asymétrique
Exemples : diagnostic médical, diagnostic de pannes, etc…
Cas des classifieurs probabilistes
• Sortie : probabilité d’appartenance à chaque classe ? = ? ?=?? ?
?
• Minimisation de l’espérance du coût :
= ? ?=?? ? ???,?
?
? ?|? =??,? = ?? ×?
?
?? =argmin ? ?|? =??,?
![](/images/remos_downloads/detail/114/id-11456.11456.pdf-136.jpg)
??
• Paradoxe : la plus grande probabilité n’est pas forcément la meilleure
?102 CTP ? ??105 ?108 ? | 103 104 108 | 104?T 104?? 105?? | ? 0,95 ? ? 1 ? ??0,049? ?105 ?? 1 ? ? yˆ ? critique ? ? ? ? ??0,001?? ??0,1?? |
Mesures entropiques
Entropie :
• Positive ou nulle. Nulle si nulle p.p
• Quantifie l’incertitude d’une distribution
Distance ou divergence de Kullback-Leibler
??? ?,?=??
• Positive ou nulle. Nulle si p.p
• Pseudodistance entre distributions
Entropie croisée
• Quantifie l’incertitude qui s’ajoute à représenter p par q Logloss :
Estimation de l’entropie croisée entre les classes réelles () et la probabilité des classes prédites ()
? ?
1
???????=? ??? =?log(? ?,?)
?
?=1 ?=1