# TD 2 - 7 octobre 2015¶

### Introduction Scikit learn¶

tao.lri.fr/tiki-index.php?page=Courses : Module Apprentissage, TD 2en salle de tp : $cd /opt/anaconda3$ ./ipython notebook --notebook-dir='~')

# III - Scikit-learn¶

## Machine Learning in Python¶

http://scikit-learn.org/

In [24]:
import numpy as np # import la librairie numpy (calcul scientifique)
import matplotlib.pyplot as plt # librairie pour afficher les graphs.
%matplotlib inline

import sklearn # if not installed : pip install sklearn


## 1) Decision Tree¶

http://scikit-learn.org/stable/modules/tree.html

In [25]:
X = [[0, 0], [1, 1], [1,0]]
# X : n_samples x n_features - data

y = [0.0, 1.0, 1.0]
# y : n_samples - labels

In [26]:
from sklearn import tree
#http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html
clf = tree.DecisionTreeClassifier() # clf : une instance de la classe 'DecisionTreeClassifier'

In [27]:
clf = clf.fit(X, y) # fit : s'entraine sur les données

In [28]:
clf.predict([[2., 2.]]) # predict : prédit le label d'une nouvelle donnée

Out[28]:
array([ 1.])
In [29]:
clf.predict_proba([[0., 0.51]]) # predict_proba : doone la distribution de probabilité

Out[29]:
array([[ 1.,  0.]])
In [30]:
clf.score(X,y) # évalue le score du classifier

Out[30]:
1.0
In [31]:
clf.feature_importances_

Out[31]:
array([ 1.,  0.])

### a) Regression¶

data : 1 dimension

target : scalaire

In [32]:
# Create a random dataset
rng = np.random.RandomState(1)
X = np.sort(5 * rng.rand(80, 1), axis=0)
y = np.sin(X).ravel()
y[::5] += 3 * (0.5 - rng.rand(16)) # ajout de bruit

In [33]:
from sklearn import tree

clf_1 = tree.DecisionTreeRegressor(max_depth=None)
clf_1.fit(X, y)
score_train = clf_1.score(X,y)

# Predict on test set
X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]
y_1 = clf_1.predict(X_test)

# Plot the results
plt.figure()
plt.scatter(X, y, c="k", label="data")
plt.plot(X_test, y_1, c="g", label="", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Decision Tree Regression. score train = " + str(np.round(score_train,2)) +\
" score test = " + 'not-implemented')
plt.legend()
plt.show()


## Exercice 3) Regression¶

0) Réécrire la fonction de score d'un classifier.

a) Evaluer le score du modèle sur un jeu de donnée test :

• X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]
• y_test = np.sin(X_test)

b) Dans une boucle, faire varier le paramètre 'max_depth' et afficher les predictions

c) Afficher sur un même graphe l'évolution du score d'entrainement et du score de test

d) À l'aide d'un ensemble de validation (sans utiliser l'ensemble de test) estimer la meilleur valeur pour 'max_depth'

In [ ]:


In [ ]:



### b) Classification¶

In [36]:
# Make data
rng = np.random.RandomState(13)
d1 = np.asarray(((np.arange(10) + rng.rand(10),np.arange(10)+ rng.rand(10)))).T
d2 = np.asarray(((np.arange(3,13)+ rng.rand(10),np.arange(10)+ rng.rand(10)))).T

X = np.vstack((d1,d2))
y = [0] * d1.shape[0] + [1] * d2.shape[0]
plt.scatter(X[:,0],X[:,1], c = y, s = 50)
print('X : ', X.shape)
print('Y : ', len(y))

X :  (20, 2)
Y :  20


## Exercice 4) Classification¶

à l'aide de la fonction "plot_boundary" ci dessous et de la classe "tree.DecisionTreeClassifier", entrainer un classifieur sur les données et afficher les zones de prédictions.

In [29]:
# Ne pas s'attarder sur cette fonction pour le moment.
def plot_boundary(clf, X, y):
# Affiche la carte avec les zones de chaque catégorie

plt.figure()
plot_step = 0.02
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),
np.arange(y_min, y_max, plot_step))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
cs = plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
plt.scatter(X[:,0],X[:,1], c = y)
plt.title('score = ' + str(clf.score(X,y)))

In [ ]: