Chaque ligne du tableau data correspond la description dun film (le titre dans
id2titles, chaque colonne un attribut (dont la signification est donne par fields).
La plupart sont des genres (action, comdie, ...), la valeur 1 indique lappartenance du
film au genre, 0 sinon. Les dernires colonnes concernent lanne de production, la
dure du film, le budget, le nombre de vote et la note moyenne attribu au film. On
binarise la note moyenne afin davoir deux classes, les films de note suprieure 6.5,
et les autres ( vecteur datay).
3. Calculer pour chaque attribut lentropie et lentropie conditionnelle du vote binaris
par rapport lattribut. Calculez galement la diffrence entre ces 2 valeurs pour
chaque attribut. A quoi correspond une valeur de 0 ? une valeur de 1 pour les attributs
binaires ?
ARF ARF 2017fev page 2
Tous les modles dapprentissage que nous tudierons seront sur le mme schema : soit
par exemple la classe Classifieur :
cration du classifieur : mon_classifieur=Classifier()
rglage des paramtres, par exemple dans la suite la profondeur maximale : mon_classifieur.max_
= 5
apprentissage du classifieur : mon_classifieur.fit(data,labels), data un ta-
bleau de taille (nombre dexemple, nombre de dimension) et labels un vecteur de
labels
prediction pour de nouveaux exemples : mon_classifieur.predict(data)
score du classifieur (prcision, pourcentage dexemples bien classs) :mon_classifieur.score(dat
Tlcharger larchive sur le site de lUE. Le code suivant permet de crer, dapprendre un
arbre de dcision et de lutiliser :
from decisiontree import
import cPickle
[data, id2titles, fields]=cPickle.load(file("imdb_extrait.pkl"))
datax=data[:,:32]
datay=np.array([1 if x[33]>6.5 else -1 for x in data])
dt = DecisionTree()
dt.max_depth = 5 #on fixe la taille de larbre a 5
dt.fit(datax,datay)
dt.predict(datax[:5,:])
print dt.score(datax,datay)
dt.to_pdf("/tmp/test_tree.pdf",fields) # dessine larbre dans un fichier pdf
Pour obtenir une meilleure estimation de lerreur du classifieur appris, il est usuel dutiliser
deux ensembles dexemples tiquets :
lensemble dapprentissage : lapprentissage du classifieur ne se fait que sur ce sous-
ensemble dexemples ;
lensemble de test : cet ensemble sert valuer lerreur du classifieur.
Ces deux sous-ensembles sont tirs de manire alatoire en faisant une partition en 2
parties des exemples disponibles. Lerreur fate sur lensemble dapprentissage sappelle
lerreur dapprentissage, celle sur lensemble de test lerreur de test.
1. Pour diffrents partitionnement, (faites varier le nombre dexemples de chaque en-
semble, par exemple un partage (0.2/0.8), (0.5, 0.5), (0.8, 0.2)), tracez les courbes de ler-
reur en apprentissage et de lerreur en test en fonction de la profondeur du modle.
ARF ARF 2017fev page 3
Il est rare de disposer en pratique dun ensemble de test (on prfre inclure le plus grand
nombre de donnes dans lensemble dapprentissage). Pour slectionner un modle tout
en considrant le plus grand nombre dexemples possible pour lapprentissage, on utilise
gnralement une procdure dite de slection par validation croise. Pour chaque param-
trisation de lalgorithme, une estimation de lerreur empirique du classifieur appris est fate
selon la procdure suivante :
lensemble dapprentissage Eapp est partitionn en n ensembles dapprentissage {Ei }
Pour i = 1..n
I larbre est appris sur Eapp Ei
I lerreur en test err(Ei ) est value sur Ei (qui na pas servi lapprentissage cette
itration) P
I lerreur moyenne err = n1 ni=1 err(Ei ) est calcule, le modle slectionn est celui
qui minimise cette erreur
Refaites les expriences prcdentes avec cette fois de la validation croise (pensez la
fonction np.random.shuffle).