Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Corr TP2

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 19

FOUILLE DE DONNÉES

CORRECTION TP2
PRÉSENTÉ PAR

M. Taoufik BEN ABDALLAH M. Ali BEN MRAD


 taoufik.benabdallah@iit.ens.tn  benmradali2@gmail.com
2022-2023 ⚫
Travaux pratiques n°2

Importation des bibliothèques


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

from sklearn.model_selection import train_test_split, cross_val_predict


from sklearn.preprocessing import OneHotEncoder
from sklearn.tree import DecisionTreeClassifier, export_graphviz, export_text
from sklearn.metrics import confusion_matrix, accuracy_score,
precision_score, recall_score

from graphviz import Source

import warnings
warnings.filterwarnings('ignore')

IIT-Sfax
Taoufik Ben Abdallah 2
Travaux pratiques n°2

1. Charger le jeu de donnée credits.csv dans une variable nommée 𝒅𝒂𝒕𝒂_𝒄𝒓𝒆𝒅𝒊𝒕


(utiliser la fonction read_csv de la bibliothèque pandas). Afficher les 𝟓 premières lignes
de 𝒅𝒂𝒕𝒂_𝒄𝒓𝒆𝒅𝒊𝒕

#Assemblage Google Drive dans Colaboratory


from google.colab import drive
drive.mount('/content/drive')

#Chargement du fichier

data_credit=pd.read_csv('/content/drive/MyDrive/credit.csv')
data_credit.head()

IIT-Sfax
Taoufik Ben Abdallah 3
Travaux pratiques n°2

2. Déterminer l’histogramme de la répartition des classes de 𝒅𝒂𝒕𝒂_𝒄𝒓𝒆𝒅𝒊𝒕 (utiliser la


fonction countplot de la bibliothèque seborn)

plt.title("Répartition des classes")


sns.countplot(x='C',data=data_credit)

# Autre solution
plt.title("Répartition des classes")
plt.hist(data_credit['C'], bins=2,rwidth = 0.5)
positions = (0.25, 0.75)
labels = ('+','-')
plt.xticks(positions, labels)
plt.show()

IIT-Sfax
Taoufik Ben Abdallah 4
Travaux pratiques n°2

3. Transformer les attributs discrets avec 𝒎 modalités en 𝒎 attributs binaires en un


dataframe nommé 𝒅𝒂𝒕𝒂_𝒕
(utiliser la classe OneHotEncoder de la bibliothèque sklearn.preprocessing).Afficher les
5 premières lignes de 𝒅𝒂𝒕𝒂_𝒕
𝑨𝟏 : b, a 𝑨𝟓 : g, p, gg 𝑨𝟗 : t, f 𝑨𝟏𝟑 : g, p, s
𝑨𝟐 : numérique 𝑨𝟔 : c, d, cc, i, j, k, m, r, q, w, x, e, aa, ff 𝑨𝟏𝟎 : t, f 𝑨𝟏𝟒 : numérique
𝑨𝟑 : numérique 𝑨𝟕 : v, h, bb, j, n, z, dd, ff, o 𝑨𝟏𝟏 : numérique 𝑨𝟏𝟓 : numérique
𝑨𝟒 : u, y, l, t 𝑨𝟖 : numérique 𝑨𝟏𝟐 : t, f 𝑪 : + ou -
col_cat = [0, 3, 4, 5, 6, 8, 9, 11, 12]

X_cat=data_credit.iloc[:,col_cat]

enc = OneHotEncoder(sparse=False)
arr=enc.fit_transform(X_cat)
data_t=pd.DataFrame(arr)

data_t.head()

IIT-Sfax
Taoufik Ben Abdallah 5
Travaux pratiques n°2

IIT-Sfax
Taoufik Ben Abdallah 6
Travaux pratiques n°2

4. Construire le dataframe 𝒅𝒇_𝒄𝒓𝒆𝒅𝒊𝒕 en concaténant les colonnes de 𝒅𝒂𝒕𝒂_𝒕 avec les


colonnes des attributs continus de 𝒅𝒂𝒕𝒂_𝒄𝒓𝒆𝒅𝒊𝒕 (y compris la classe 𝑪).
Afficher les 3 premières lignes de 𝒅𝒇_𝒄𝒓𝒆𝒅𝒊𝒕

col_num = [1, 2, 7, 10,13, 14]

df_credit=pd.concat([data_t,
data_credit.iloc[:,col_num],
data_credit['C']], axis=1,ignore_index=True)

for i in range(df_credit.shape[1]-1):
df_credit=df_credit.rename(columns={i: 'A'+str(i+1)})
df_credit=df_credit.rename(columns={df_credit.shape[1]-1: 'C'})

df_credit.head(3)

IIT-Sfax
Taoufik Ben Abdallah 7
Travaux pratiques n°2

5. Transformer 𝒅𝒇_𝒄𝒓𝒆𝒅𝒊𝒕 en deux tableaux (ndarray) 𝑿 et 𝒀; 𝑿 contient les valeurs


des variables descripteurs, et 𝒀 contient les valeurs de la variable à prédire.
Afficher 𝑿 et 𝒀

X = df_credit.iloc[:,:df_credit.shape[1]-1].values
Y = df_credit.iloc[:, df_credit.shape[1]-1].values

print("X=\n", X)
print("Y=\n", Y)

IIT-Sfax
Taoufik Ben Abdallah 8
Travaux pratiques n°2

6. Séparer les données en deux parties : 𝟕𝟎% sélectionnées aléatoirement sans


répétions pour l’apprentissage (𝑿_𝒕𝒓𝒂𝒊𝒏, 𝒀_𝒕𝒓𝒂𝒊𝒏), et les 𝟑𝟎% restantes pour le test
(𝑿_𝒕𝒆𝒔𝒕, 𝒀_𝒕𝒓𝒂𝒊𝒏) (appliquer la fonction train_test_split de la bibliothèque
sklearn.model_selection)

X_train, X_test, Y_train, Y_test = train_test_split(X, Y,


test_size=0.3, random_state=1) L’utilisation de train_test_split avec
random_state=1 donne des résultats similaires
chaque fois que vous exécutez le code
7. Générer un modèle, nommé 𝒄𝒍𝒔_𝒄𝒓𝒆𝒅𝒊𝒕𝟏, en appliquant l’algorithme d’arbre de
décision CART (utiliser la classe DecisionTreeClassifier de la bibliothèque sklearn.tree
sans modifier ses paramètres)
cls_credit1 = DecisionTreeClassifier()
cls_credit1.fit(X_train,Y_train)

cls_credit1.classes_

IIT-Sfax
Taoufik Ben Abdallah 9
Travaux pratiques n°2

8. Représenter graphiquement l’arbre de décision associé à 𝒄𝒍𝒔_𝒄𝒓𝒆𝒅𝒊𝒕𝟏 (utiliser la


fonction export_graphviz de la bibliothèque sklearn.tree et la fonction Source de la
bibliothèque graphviz)
features=list(df_credit)
dot_data = export_graphviz(cls_credit1,
feature_names=features[:len(features)-1],
class_names=cls_credit1.classes_)
Source(dot_data)

9. Générer les règles de décisions associées à 𝒄𝒍𝒔_𝒄𝒓𝒆𝒅𝒊𝒕𝟏 (utiliser la fonction


export_text de la bibliothèque sklearn.tree)

r = export_text(cls_credit1,
feature_names=features[:len(features)-1])
print(r)

IIT-Sfax
Taoufik Ben Abdallah 10
Travaux pratiques n°2

10. Représenter graphiquement la matrice de confusion associée aux données


d'apprentissage en utilisant le modèle 𝒄𝒍𝒔_𝒄𝒓𝒆𝒅𝒊𝒕𝟏 (utiliser la fonction heatmap de la
bibliothèque seaborn)

Y_p_train = cls_credit1.predict(X_train)

cm=confusion_matrix(Y_train, Y_p_train)
print(cm)

sns.heatmap(cm, annot=True, fmt="d",


xticklabels=['+','-'], yticklabels=['+','-'])

IIT-Sfax
Taoufik Ben Abdallah 11
Travaux pratiques n°2

11. Calculer le taux de classification correcte (Accuracy) associé aux données


d’apprentissage (utiliser la fonction accuracy_score de la bibliothèque sklearn.metrics)

accuracy_score(Y_train,Y_p_train)

12. Représenter la matrice de confusion associée aux données de test selon


𝒄𝒍𝒔_𝒄𝒓𝒆𝒅𝒊𝒕𝟏 . Puis, calculer le taux de classification correcte, la sensitivité, et la précision
de la classe "+"
Y_test_p1=cls_credit1.predict(X_test)
print(confusion_matrix(Y_test,Y_test_p1))

print("Accuracy (Test)= {:.3f}".format(accuracy_score(Y_test,Y_test_p1)))

print("recall (+)= {:.3f}".format(recall_score(Y_test,Y_test_p1,


pos_label="+")))
print("precision (+)= {:.3f}".format(precision_score(Y_test,Y_test_p1,
pos_label='+')))

IIT-Sfax
Taoufik Ben Abdallah 12
Travaux pratiques n°2

13. Générer un modèle, nommé 𝒄𝒍𝒔_𝒄𝒓𝒆𝒅𝒊𝒕𝟐, en appliquant l’algorithme d’arbre de


décision CART dont la profondeur maximale d’arbre est égal à 3 (max_depth=3), et le
nombre de descripteurs à examiner pour trouver la meilleure répartition est égal à
n_feat (max_features="sqrt")

cls_credit2 = DecisionTreeClassifier(max_depth=3,
max_features="sqrt")

"auto" (valeur par défaut) →max_features=sqrt(n_features)


"sqrt"→max_features=sqrt(n_features)
"log2"→max_features=log2(n_features)
None →max_features=n_features

int → max_features=the int given in parameter (≤ n_features).


float [0..1] → max_features= the flaot given in parameter × n_features

IIT-Sfax
Taoufik Ben Abdallah 13
Travaux pratiques n°2

14. Représenter la matrice de confusion associée 𝒄𝒍𝒔_𝒄𝒓𝒆𝒅𝒊𝒕𝟐 en appliquant 10-validations


croisées (utiliser la fonction cross_val_predict de la bibliothèque sklearn.model_selection).
Déduire l’Accuracy de 𝒄𝒍𝒔_𝒄𝒓𝒆𝒅𝒊𝒕𝟐

y_pred = cross_val_predict(cls_credit2, X, Y, cv=10)

print(confusion_matrix(Y,y_pred))

print("Accuracy: {:.3f}".format(accuracy_score(Y,y_pred)))

#ou bien
from statistics import mean
scores=cross_val_score(cls_credit2, X, Y, cv=10)
print(scores)
print("Accuracy: {:.3f}".format(scores.mean()))

IIT-Sfax
Taoufik Ben Abdallah 14
Travaux pratiques n°2

15. Générer un modèle, nommé 𝒄𝒍𝒔_𝒄𝒓𝒆𝒅𝒊𝒕𝟑, en appliquant l’algorithme de forêts


aléatoires (Random Forest). (utiliser la classe RandomForestClassifier de la
Spécifier bibliothèque sklearn.ensemble)
✓ Le nombre d’arbres à 120 (n_estimators=120)
✓ Le nombre de descripteurs à examiner pour trouver la meilleure répartition à 30
(max_features=30)
✓ Le nombre d’observations à tirer aléatoirement avec remise de la base
d’apprentissage (𝑿_𝒕𝒓𝒂𝒊𝒏, 𝒀_𝒕𝒓𝒂𝒊𝒏) dans la construction de chaque arbre à 63%
(max_samples=0.63)

from sklearn.ensemble import RandomForestClassifier

cls_credit3 = RandomForestClassifier(n_estimators=120,max_features=30,
bootstrap=True, max_samples=0.63)

cls_credit3.fit(X_train,Y_train)

IIT-Sfax
Taoufik Ben Abdallah 15
Travaux pratiques n°2

16. Calculer l’accuracy associé aux données d’apprentissage et de test en utilisant


𝒄𝒍𝒔_𝒄𝒓𝒆𝒅𝒊𝒕𝟑

Y_train_p=cls_credit3.predict(X_train)

Y_test_p=cls_credit3.predict(X_test)

print("Accuracy (Train)= {:.3f}".format(accuracy_score(Y_train,Y_train_p)))

print("Accuracy (Test)= {:.3f}".format(accuracy_score(Y_test,Y_test_p)))

IIT-Sfax
Taoufik Ben Abdallah 16
Travaux pratiques n°2

17. Représenter la courbe d’évaluation d’erreur de 𝒄𝒍𝒔_𝒄𝒓𝒆𝒅𝒊𝒕𝟑 en fonction du nombre d’arbres


(n_estimators= 𝟏𝟎. . 𝟐𝟎𝟎 , 𝐩𝐚𝐬 = 𝟐𝟎) sur les données out-of-bag (OOB) de la base d’apprentissage
extraites lors de la construction de chaque arbre du forêt. Déduire le nombre optimal d’arbres n_estimators

error_rate=[]
nbt=list(range(10, 200,20))
for i in nbt :
cls_credit3.set_params(n_estimators=i)
cls_credit3.fit(X_train,Y_train) #15
oob_error = 1 - cls_credit3.oob_score_ cls_credit3 = RandomForestClassifier(
error_rate.append(oob_error) n_estimators=120, max_features=30,
bootstrap=True, max_samples=0.63,
oob_score=True)
plt.plot(nbt, error_rate)
plt.xlim(10, 200)
plt.xlabel("n_estimators"); plt.ylabel("OOB error rate")
plt.show()

min_value = min(error_rate)
print ("n_estimators*=", nbt[error_rate.index(min_value)])
IIT-Sfax
Taoufik Ben Abdallah 17
‫الحصة الحادية عشر‬
Travaux pratiques n°2

18. Représenter la courbe ROC associée au modèle 𝒄𝒍𝒔_𝒄𝒓𝒆𝒅𝒊𝒕𝟑 sur les données de test, puis déduire
son AUC (utiliser les fonctions roc_curve et roc_auc_score de la bibliothèque sklearn.metrics)

from sklearn.metrics import roc_curve,roc_auc_score


#ar=cls_credit3.predict_proba(X)
ar=cls_credit3.predict_proba(X_test)[:,0] print(ar.shape) #(653, 2)

#print (cls_credit3.classes_) # ['+' '-']


fpr, tpr, thresholds =roc_curve(Y_test,ar,pos_label='+')

plt.plot(fpr, tpr)
plt.xlabel("False Positive Rate")
plt.ylabel("True Positive Rate")
plt.show()

auc_dt = roc_auc_score(Y_test,ar)
print("AUC=", auc_dt)

IIT-Sfax
Taoufik Ben Abdallah 19

Vous aimerez peut-être aussi