Vous êtes sur la page 1sur 5

066_070_184 18/03/15 21:59 Page66

Vos premiers pas en Machine Learning


The goal is to turn data into information, and information into insight.
Thomas OUNNAS,
Data scientist chez Xebia
Le Clustering en pratique :
Chargement dune image

Carly Fiorina

Chargeons maintenant une image pour mieux se rendre compte du problme.


Yoann BENOIT,
Data scientist from PIL import Image # Image loading
chez Xebia
im = Image.open('perroquet.jpeg', 'r')
Au travers de cet article, nous vous proposons une initiation au Machine width, height = im.size
Learning, qui est un sous-ensemble de l'Intelligence Artificielle. Cette disci- print width, height
pline permet lanalyse et la construction dalgorithmes capables dap-
prendre partir de donnes dentre. Grce deux Use Cases simples Limage a pour dimensions 1024x768 pixels, elle comporte 238135 cou-
reprsentant deux cas de figure classiques, nous allons vous dcrire la leurs distinctes et sa taille est de 122 Ko au format .jpeg Fig.1.

Coco le Perroquet
dmarche de rsolution dun problme dans ce domaine via deux
branches principales : Cration du
a L'apprentissage supervise, dataset en lien
a L'apprentissage non-supervise. avec limage
Sachant le rsultat dun phnomne, lapprentissage supervis permet de Pour rduire le nombre
comprendre son mcanisme afin dtre capable de bien prdire les rsul- de couleurs, regroupons
tats venir et de prendre des dcisions pertinentes. celles qui se ressem-
Par phnomne, on peut envisager plusieurs choses, par exemple si le fait blent dans les 238135
quun e-mail soit un spam ou non, le prix du mtre carr dans une ville don- prsentes. Pour ce faire,

Fig.1
ne, lidentification dun code postal, la probabilit quun client achte tel il nous faut donc
ou tel produit, etc. construire un dataset
Derrire cette ide, on identifie une variable Y (prix, label spam/non-spam, qui va reprsenter la couleur de chaque pixel. En utilisant la codification
etc.) reprsentant le rsultat que lon cherche prdire et que lon appelle RGB, il nous faut donc trois colonnes dans notre dataset et autant de
la cible. On dispose aussi dun ensemble de variables dites features, qui lignes quil y a de pixel, soit 1024*768 = 786432 lignes. Ce dataset se
permet de capter et dcrire le phnomne tudi. construit rapidement partir de limage charge en appelant la fonction
Lapprentissage non-supervis, quant lui, ne suppose pas la connaissan- getdata() :

import numpy as np # Manipulate arrays


ce dune variable cible. Lide nest donc pas de comprendre ou prdire

image_array = np.array(im.getdata()) / 255.


une cible prcdemment identifie mais plutt de trouver une structure, un
pattern dans les donnes. On parle alors de clustering : lide est de former
des groupes de points homognes, sachant quun point est dfini par un On obtient un tableau de la forme suivante :
ensemble de features. La manire de regrouper ces points reste tre dfi- R G B
0.266667 0.364706 0.756863
0.262745 0.360784 0.752941
nie et correspond au choix dune mtrique. Il est courant dutiliser la distan-

0.282353 0.380392 0.772549


ce euclidienne, mais il existe une multitude de choix possibles, souvent
associs des cas dtudes prcis.
Notez que lon a divis les donnes du tableau par 255 simplement pour
A - Clustering pour la compression dimage avoir des donnes comprises entre 0 et 1 (on parle alors de rescaling), car
Le clustering est un type dapprentissage non-supervis permettant de cest un pr-requis de la fonction qui va permettre dafficher les images par
trouver des patterns dans les donnes en les segmentant en plusieurs la suite.
groupes homognes. Nous avons donc notre disposition un dataset
compos de plusieurs features, sans target. Il sagit alors, dans la plupart Une mthode de clustering : K-Means
des algorithmes de clustering, de choisir le nombre de groupes K que lon Nous allons maintenant pouvoir regrouper les couleurs proches grce
veut crer, et de rassembler les donnes en K groupes distincts. Les don- une mthode de clustering appele K-Means.
nes au sein dun mme groupe doivent tre proches, en relation avec la Avant de tenter de former des groupes, il est ncessaire de dfinir la notion
mtrique choisie. de proximit entre des points, cest--dire de se fixer une distance adapte
Un exemple dutilisation du clustering consiste compresser la taille dune au sujet. Dans notre cas, la distance la plus intuitive utiliser est la distance
image, compose de plusieurs milliers de couleurs, en rduisant leur euclidienne. Deux points vont donc tre considrs comme proches
nombre travers des regroupements. Typiquement, il peut y avoir plu- lorsque leur distance sera faible. En considrant deux points A(xA, yA, zA)
sieurs tons de rouge dans une image, le but est alors de reprer ces diff- et B(xB, yB, zB), elle est dfinie de la manire suivante :
rents tons et de les regrouper en seulement quelques groupes de rouges Lalgorithme du K-Means va chercher construire des centrodes pour
(voir un seul groupe). chaque groupe dtermin. Ces centrodes ne sont pas des points apparte-
Attention, nous sommes loin ici des techniques de compression classiques nant au dataset, mais des points fictifs reprsentant les barycentres de
utilises dans le traitement dimage. Nous cherchons simplement dimi- chaque groupe de points form.
nuer le nombre de couleurs dans une image, tout en gardant un aspect Le K-Means est un algorithme itratif, cest dire quen partant de cen-
visuel correct, pour diminuer sa taille en mmoire. trodes initialiss alatoirement, on va mettre jour chaque itration leurs

66 Programmez! a Avril 2015


066_070_184 18/03/15 21:59 Page67

coordonnes, comme reprsentes dans limage ci-dessous : Fig.2. def recreate_image(cluster_centers, labels, width, height):
Limage (a) montre les donnes de dpart qui sont visiblement sparables # Dimension of a center (3 in our case)
en deux groupes distincts. Deux centrodes vont alors tre initialiss de d = cluster_centers.shape[1]
faon alatoire (figure (b)). Les points sont alors affects son centrode le # Initialization of the compressed image
plus proche, formant des clusters (figure (c)). Les centrodes se replacent image_comp = np.zeros((height, width, d))
en calculant la distance moyenne de tous les points qui lui sont affects # Initialization of a counter on the pixels indexes
(figure (d)). Au fil des mises jour, certains points seront certainement plus label_idx = 0
proches dautres centrodes, ce qui modifiera leur appartenance aux clus- # Reconstruction of the image, pixel by pixel
ters (figure (e)).. Le processus de mise jour des centrodes et daffecta- for i in range(height):
tion des points dans les clusters est itr plusieurs fois jusqu ce que les for j in range(width):
clusters ne changent plus (ou trs peu). On obtient alors nos groupes de image_comp[i][j] = cluster_centers[labels[label_idx]]
points finaux, comme montr sur la figure (f). label_idx += 1
return image_comp
Clustering des couleurs de limage
Tout est maintenant notre disposition pour reconstruire limage avec un
Maintenant que nous savons comment fonctionne lalgorithme du K-
nombre de couleurs rduit.
# Recreation of the array with the initial images dimensions
Means, appliquonsle sur le dataset reprsentant notre image initiale.

image_comp = recreate_image(kmeans.cluster_centers_, labels, width, height)


Comme beaucoup dautres algorithmes de Machine Learning, le K-Means
est implment dans scikit-learn, et son utilisation devient trs simple. Un

# Plotting the image


seul paramtre reste dfinir : le nombre de groupes souhait, cest--dire

plt.figure(2)
le nombre de couleurs que lon va utiliser dans limage.

plt.clf()
Limplmentation se fait alors de la manire suivante :

# Selection of the desired number of colors ax = plt.axes([0, 0, 1, 1])


n_colors = 64 plt.axis('off')
# Taking a random sample of points of the data plt.title('Compressed Image (K=64)')
image_array_sample = shuffle(image_array, random_state=0)[:10000] plt.imshow(image_comp);
# Fitting the K-Means
kmeans = KMeans(n_clusters=n_colors,random_state=0).fit(image_array_sample) Coco le perroquet, 64
# Affecting each pixel to a cluster couleurs
Voici le rsultat obtenu

labels = kmeans.predict(image_array)
en se restreignant 64
couleurs sur limage :
Le paramtre random_state=0 nest pas obligatoire et permet de rgler Fig.3.
linitialisation alatoire. En se restreignant 64
couleurs, limage garde
Reconstruction de limage compresse donc une bonne quali-
Nous avons alors disposition les coordonnes RGB de chaque centrode t. Le perroquet est
(prsentes dans lattribut kmeans.cluster_centers_), ainsi que le label du
Fig.3
bien reproduit grce
groupe dans lequel chaque pixel est affect (prsent dans labels). des couleurs trs mar-
A prsent, nous devons reconstruire un tableau de mme dimension que ques, la diffrence du fond (mer et nuages) du fait de limportance de la
limage originale, car pour le moment nous avons simplement un tableau continuit des couleurs (du bleu clair au bleu fonc). De ce fait, en se
de trois colonnes et dautant de lignes que de pixels. Nous allons donc restreignant un plus petit nombre de couleurs, limpression de continuit
construire une fonction permettant de reconstruire limage avec ces diff- entre les couleurs est plus difficilement ralisable, do ces coupures
rentes contraintes. Elle a donc pour paramtres les centrodes, les labels entre chaque couleur.
de chaque pixel, ainsi que la largeur et la hauteur de limage. Si on compare les tailles des images, limage originale faisait 122 Ko, alors
que limage compresse rduite 64 couleurs ne fait plus que 52 Ko.
Fig.2 Voici les rsultats obtenus pour plusieurs K. On peut voir que notre oeil a
rapidement limpression que limage est loriginale ( partir de 64 ou 128),
alors que le nombre de couleurs est beaucoup plus faible Fig.4.
Nous avons ici illustr un algorithme de clustering dans le cadre dune
rduction de nombre de couleurs dans une image. Il y a cependant de
nombreuses autres applications au clustering, comme par exemple cher-
cher regrouper des utilisateurs dun site Internet selon leur comporte-
ment sur celui-ci, ou bien crer des zones pour optimiser les circuits de
distribution dune entreprise. Pour plus dinformations, se rfrer au tuto-
riel sur le mme sujet sur le site de scikit-learn.

B - Rgression pour la prdiction de location


de vlos
Une application typique dans un contexte dapprentissage supervis
consiste faire de la prdiction (de ventes, de trafic, de pannes, etc.). Nous

Programmez! a Avril 2015 67


066_070_184 18/03/15 21:59 Page68

vous proposons ici dappliquer un modle de rgression pour prdire la Fig.5. Plusieurs features sont notre disposition pour lanalyse : certaines
demande de location de vlos dans une ville. Le but est alors de faire mer- correspondent la date (saison, anne, mois, etc.), dautres au temps
ger une variable cible (notre target), qui nest autre que le nombre de vlos (mto, temprature, humidit, etc.). Les trois dernires colonnes sont des
lous dans une journe, en prenant en compte diffrentes variables (jour variables cibles . Casual correspond au nombre de locations par des uti-
de la semaine, temprature, mto, etc.). Pour cela, nous allons appliquer lisateurs occasionnels, Registered au nombre de locations par des utili-
une dmarche systmatique en Data Science : sateurs enregistrs et Count au nombre total de locations. Pour la suite
a Exploration des donnes : comprhension et connaissance des don- de notre tude, nous allons nous concentrer sur les features season, mnth,
nes disposition. holiday, weekday, workingday, weathersit, temp, hum et windspeed, et ten-
a Feature Engineering : cration des features qui vont servir de base pour ter de prdire la target casual. Restreignons donc notre dataset :
nos modles.
a Splitting : sparation des donnes en trois jeux diffrents, un pour lap- target = data.casual
prentissage (training set), un pour le tunning des paramtres (validation list_features = ['season','mnth','holiday','weekday','workingday','weathersit','temp','hum','
set) et le dernier pour lvaluation du modle (test set). windspeed']
a Modelling: cration et paramtrage dun modle de Machine Learning X = data[list_features]
pour pouvoir raliser la prdiction.
Exploration des donnes et Feature Engineering
Chargement des donnes Deux types de variables sont notre disposition :
Avant toute chose, nous allons charger les donnes en allant les chercher a Des variables catgorielles : elles reprsentent un nombre fini de cas
leur source. possibles, sans quil ny ait forcment de relation dordre entre les tats

import pandas as pd
(typiquement les jours de la semaine)
a Des variables continues : le nombre de possibilits est infini et il existe une
from StringIO import StringIO
from zipfile import ZipFile
relation dordre entre les valeurs observes (typiquement la temprature)

from urllib import urlopen


Variables catgorielles

url = urlopen("https://archive.ics.uci.edu/ml/machine-learning-databases/00275/Bike-
Observons prsent les diffrentes modalits des variables catgorielles

Sharing-Dataset.zip")
notre disposition.

zipfile = ZipFile(StringIO(url.read()))
print "Nombre de modalits de la variable %s: %d" % ('season',len(X['season'].unique()))
data = pd.read_csv(zipfile.open("day.csv"), parse_dates = ['dteday'])
print "Nombre de modalits de la variable %s: %d" % ('mnth',len(X['mnth'].unique()))
Voyons quoi ressemblent les donnes pour mieux comprendre comment print "Nombre de modalits de la variable %s: %d" % ('holiday',len(X['holiday'].unique()))
les traiter par la suite : print "Nombre de modalits de la variable %s: %d" % ('weekday',len(X['weekday'].unique()))
print "Nombre de modalits de la variable %s: %d" % ('workingday',len(X['workingday']
data.head()
.unique()))
Fig.4 print "Nombre de modalits de la variable %s: %d" % ('weathersit',len(X['weathersit']
.unique()))

Nombre de modalits de la variable season: 4


Nombre de modalits de la variable mnth: 12
Nombre de modalits de la variable holiday: 2
Nombre de modalits de la variable weekday: 7
Nombre de modalits de la variable workingday: 2
Nombre de modalits de la variable weathersit: 3

Comme on peut le constater, les variables holiday et workingday ne poss-


dent que deux modalits : cest ce que lon appelle des dummies (ou
variables binaires). Ainsi, la variable workingday va prendre la valeur 1 sil
sagit dun jour ouvr en dehors des vacances, sinon la valeur 0.
Les autres variables possdent plusieurs modalits, sans relation dordre
entre elles : la valeur 1 de weekday nest en aucun cas infrieure la valeur
5. Il est donc ncessaire dencoder ces variables de manire diffrente afin
dviter une relation hirarchique implicite entre les modalits. On parle

Fig.5
68 Programmez! a Avril 2015
066_070_184 18/03/15 21:59 Page69

alors de dummisation (ou d'encodage disjonctif complet) : cest le procd Modelling


consistant rcrire une variable catgorielle en plusieurs variables Cette phase permet de construire un modle de rgression et de prdire
binaires (dummies). Par exemple, la variable season possde 4 modalits. la demande de vlos en fonction des features prsentes prcdem-
Nous allons donc crer 4 nouvelles variables season_1, season_2, sea- ment. Le modle tudi ici sera un arbre de dcision, dont le principe est
son_3 et season_4 qui vaudront 0 ou 1 suivant la valeur considre de sea- relativement intuitif et qui permet une bonne interprtation des rsultats.
son. Appliquons maintenant le processus de dummisation toutes les Il se construit au fur et mesure en se dfinissant des rgles, qui vont
variables catgorielles. soit nous donner un rsultat, soit nous mener une autre rgle. Prenons
un exemple : je prends mon lait le matin. Premire chose, je regarde sa
list_dummies = ['season', 'mnth', 'weekday', 'weathersit'] date de validit, si elle est bonne je peux le boire, sinon, je regarde sil
for v in list_dummies: est prim de moins dune semaine. Si oui, je peux le boire, sinon, je
dummies = pd.get_dummies(X[v], prefix=v+"_") louvre et regarde son aspect pour savoir si je peux le boire ou non.
X = pd.concat([X, dummies], axis=1) Lun des gros avantages de la librairie Scikit-Learn de Python est la sim-
del X[v] plicit dutilisation des diffrentes mthodes de Machine Learning. Ainsi,
pd.set_option('max_columns', None) une fois que les diffrents datasets sont construits, il devient relativement
X.head() simple de passer la phase dapprentissage et de prdiction.
Fig.7.
from sklearn.tree import DecisionTreeRegressor
model = DecisionTreeRegressor()
model.fit(X_train, target_train) # On fit le modle sur le training set
prediction = model.predict(X_test) # On effectue les prdictions sur le test set

Une fois que les prdictions sont faites, il est important de pouvoir
Variables continues mesurer leur qualit. Pour cela, il faut avant tout se fixer une mesure de
X[['temp','hum','windspeed']].describe()
lerreur. Dans notre cas, nous allons utiliser le Root Mean Squared Error.
Fig.8.
Cest une mesure classique de lerreur faite par un modle de rgression.
Nous allons donc pralablement dfinir la fonction de calcul de lerreur
Regarder la description statistique pour lappliquer ensuite aux prdictions faites sur le training set, ainsi
globale des variables continues dans que sur le test set.
notre dataset est une tape importan-
te car elle permet de lexplorer ou de le def rmse(obs, pred):
modifier lorsquil contient des valeurs return np.sqrt(np.mean((obs-pred)**2))
manquantes ou des valeurs aber-
rantes. Cela permet aussi d'avoir une rmse_train = rmse(target_train, model.predict(X_train))
ide des ordres de grandeur des rmse_test = rmse(target_test, prediction)
variables ainsi que de leur distribution.
print "Train Error: %.2f" % rmse_train
Splitting print "Test Error: %.2f" % rmse_test
Ce concept consiste sparer les donnes en au moins deux parties : une Train Error: 0.00
base dapprentissage nomme training set et une deuxime qui servira Test Error: 501.31

Remarque : il existe dj une implmentation du mse (sans la racine) dans sklearn mais nous
tester notre apprentissage sur des donnes nouvelles encore jamais
observes, on parle de test set. avons pris le parti de le rcrire dans un but didactique.
Il est aussi recommand dajouter une troisime partie, appele validation
set; il va tre utilis pour valider un modle et ses paramtres lors de sa Avec un Train Error faible et un Test Error lev, nous nous retrouvons
construction ( noter qu'il existe d'autres mthodes d'valuation qui ne dans une situation dlicate appele loverfitting. Du fait quil nexiste
ncessitent pas la prsence de ce validation set, parmi lesquelles la cross- aucune erreur sur le training set, loverfitting peut tre vu comme de lap-
validation ou encore le principe du Bootstrap, mais dont l'explication sorti- prentissage par coeur. Larbre de dcision, auquel nous navons donn
rait du cadre de cet article). Le test set servira alors pour la validation finale aucune restriction dans les paramtres, a russi trouver des combi-
du modle, nous donnant ainsi une estimation fiable de notre erreur. naisons de caractristiques lui permettant tous les coups de prdire
Construisons maintenant nos training, validation et test set : exactement la bonne valeur sur les donnes quil a apprises. Le problme
est que ds que de nouvelles donnes, encore jamais observes, sont
import numpy as np soumises au modle, il va trs souvent faire de fortes erreurs, comme ont
np.random.seed(seed=1234) peut le constater sur le rmse du test set. Afin dviter ce phnomne, il faut
ind_train = np.random.choice(len(X),0.5*len(X),replace=False) faire ce que lon appelle du tunning : trouver les paramtres donner au
ind_val_test = list(set(range(len(X))) - set(ind_train)) modle qui vont minimiser lerreur sur des donnes non observes. Pour
ind_val = np.random.choice(ind_val_test,0.7*len(ind_val_test),replace=False) notre arbre de dcision, lun des paramtres sur lesquels il est possible de
ind_test = list(set(ind_val_test) - set(ind_val)) jouer est sa profondeur maximale, soit son nombre de rgles. En effet, plus
un arbre est profond, moins il y a de donnes dans ses feuilles et plus il y
X_train, X_val, X_test, target_train, target_val, target_test = X.iloc[ind_train], X.iloc a de chance de faire de loverfitting. En fixant par exemple la profondeur
[ind_val], X.iloc[ind_test], target.iloc[ind_train], target.iloc[ind_val], target.iloc[ind_test] maximale 1, nous obtenons larbre suivant :

Programmez! a Avril 2015 69


066_070_184 18/03/15 21:59 Page70

tre plus robuste quun simple arbre de dcision. Pour chaque arbre de la
Random Forest, seulement une partie des variables vont lui tre pro-
poses, et les donnes sont slectionnes alatoirement avec remise.
Cela permet de rajouter plus dalatoire dans les donnes et dans la slec-
tion des features, ce qui est statistiquement plus viable dans le but davoir
une meilleure capacit de gnralisation. Encore une fois, il est ncessaire
Nous navons autoris ici quune profondeur de 1 : larbre a donc t con- de faire un bon tunning pour viter loverfitting. Pour une Random Forest,
traint de trouver la meilleure caractristique et son seuil, ceci pour spar- il est classique doptimiser la profondeur maximale de chaque arbre, ainsi
er en deux les donnes puis estimer la valeur donner. que le nombre minimal dlments par feuille. Cest ce que nous allons
Appliquons maintenant une dmarche complte de tunning qui va nous faire maintenant avec une Random Forest compose de 2000 arbres.

from sklearn.ensemble import RandomForestRegressor


permettre de dterminer quelle est la profondeur optimale de larbre nous

scores = []
permettant de minimiser lerreur sur le validation set.

for max_depth in [2, 4, 6]:


scores = []
for min_samples_leaf in [3, 5, 7]:
for max_depth in [1, 2, 3, 4, 5]:
model = RandomForestRegressor(n_estimators=2000, max_depth=max_depth,
model = DecisionTreeRegressor(max_depth=max_depth)
min_samples_leaf=min_samples_leaf)
model.fit(X_train, target_train)
model.fit(X_train, target_train)
pred = model.predict(X_val) # Prediction on the validation set
pred = model.predict(X_val)
scores.append((max_depth, rmse(target_val, pred)))
scores.append((max_depth, min_samples_leaf, rmse(target_val, pred)))
tab_scores = pd.DataFrame(scores, columns=['max_depth', 'rmse']).sort('rmse')
tab_scores = pd.DataFrame(scores, columns=['max_depth','min_samples_leaf', 'rmse'])
tab_scores
.sort('rmse')
Remarque: encore une fois, il existe une fonction tab_scores
(gridSearch) dj implmente dans sklearn qui peut, l'ai-
de du paramtre n_jobs, parallliser le tunning. Cependant Une fois les meilleurs paramtres dtermins, nous pouvons finalement
nous avons pris le parti d'en crire une version simplifie les utiliser pour construire notre modle et faire nos prdictions.
afin de mieux illustrer le principe sous-jacent. Maintenant que nous navons plus besoin de tester plusieurs jeux de
paramtres, nous pouvons encore plus augmenter le nombre darbres, ce
Une fois le tunning fait, nous pouvons recon- qui permet en gnral dobtenir de meilleurs rsultats.

max_depth_best = tab_scores.max_depth.iloc[0]
struire un arbre de dcision plus stable.

min_samples_leaf_best = tab_scores.min_samples_leaf.iloc[0]
model = DecisionTreeRegressor(max_depth=tab_scores.max_depth.iloc[0])
model.fit(pd.concat([X_train, X_val]), pd.concat([target_train,target_val]))
model = RandomForestRegressor(n_estimators=5000, max_depth=max_depth_best,
prediction = model.predict(X_test) # Prediction on the test set
min_samples_leaf=min_samples_leaf_best)
model.fit(pd.concat([X_train, X_val]), pd.concat([target_train, target_val]))
rmse_train = rmse(pd.concat([target_train,target_val]), model.predict(pd.concat([X_
prediction = model.predict(X_test)
train, X_val])))
rmse_test = rmse(target_test, prediction)
rmse_train = rmse(pd.concat([target_train, target_val]), model.predict(pd.concat([X_
train, X_val])))
print "Train Error: %.2f" % rmse_train
rmse_test = rmse(target_test, prediction)
print "Test Error: %.2f" % rmse_test

print "Train Error: %.2f" % rmse_train


Train Error: 319.07
print "Test Error: %.2f" % rmse_test
Test Error: 383.05

Train Error: 235.60


Test Error: 340.87
Comme on peut le constater, lerreur sur le train set a considrablement
augment en comparaison avec la prdiction sans tunning. En revanche,
lerreur constate sur le test set est largement infrieure, dmontrant ainsi Comme on peut le voir, lutilisation de modles plus complexes tels quune
la plus grande capacit de gnralisation de notre nouvel arbre. Il faut en Random Forest permet damliorer les scores de prdiction, la fois sur le
effet accepter de ne pas pouvoir prdire 100% les donnes sur lesquelles training set et sur le test set.
on a appris le modle pour pouvoir avoir un score correct sur de nouvelles
donnes. Nous sommes dornavant capables grce ce modle de faire Conclusion Gnrale
des prdictions correctes sur le nombre de vlos qui vont tre lous. Nous avons travaill travers cet article sur deux cas dapplications en
Data Science. Lun portait sur de lapprentissage non-supervis, et lautre
Pour aller plus loin sur de lapprentissage supervis. On peut toutefois citer un troisime volet
Maintenant que la dmarche globale en Data Science est bien comprise, il dapplication : Le Reinforcement Learning. Cela regroupe un ensemble
est possible dutiliser des modles plus complexes afin damliorer les dalgorithmes qui vont faire leurs prdictions en apprenant de leurs erreurs
scores de prdiction sur le test set. Une volution classique lorsque lon au fur et mesure, et sadapter aux ventuels changements. A noter
utilise un arbre de dcision est la Random Forest. Une Random Forest cependant que les deux premires branches de la Data Science sont les
consiste modliser plusieurs arbres et moyenner leurs rsultats pour plus sollicites. u
70 Programmez! a Avril 2015

Vous aimerez peut-être aussi