En tête pour charger les fonctions nécessaires au TP. La fonction generateData
vous permet de générer autant d'échantillon que vous voulez du processus suivant:
On commence avec un échantillon d'entrainement fixé.
%matplotlib inline
from matplotlib import pyplot
import math
import numpy as np
import scipy.misc
import numpy.random as npr
import sklearn as sk
from sklearn import neighbors
def generateData(n,seed=1):
npr.seed(seed)
x = npr.rand(n)*2 - 1
y = np.sin(x*5) + npr.normal(size=n) / np.sqrt(10)
return(np.array(x).reshape(-1,1),np.array(y).reshape(-1,1))
(xn,yn) = generateData(50,2)
xSeq = np.array(np.linspace(-1,1,100)).reshape(-1,1)
pyplot.plot(xn,yn,'.')
pyplot.plot(xSeq,np.sin(xSeq * 5),'--')
L'échantillon d'entrainement est fixé. Dessiner l'estimateur de régression $k$-NN pour $k = 1,5,15$. Regarder la documentation de scikit-learn
.
L'échantillon d'entrainement est fixé. Pour chaque valeur de $k$, vous avez une fonction de décision $f_k$ donnée par l'estimateur $k$-NN. Estimer et dessiner le risque de $f_k$, en fonction de $k$ variant entre 1 et 10. Vous pouvez générer autant d'échantillon que vous voulez. Pour rappel, pour une fonction de décision $f$ donnée, son risque est donnée par: $$\mathbb{E}_{X,Y}\left[(Y-f(X)^2 \right]$$ Quel est la valeur de $k$ assurant le risque le plus faible?
Vous savez que $\mathbb{E}[Y|X=x] = \sin(5x)$ et que l'erreur de Bayes est de $1/10$ (pourquoi?).
La taille de l'échantillon d'entrainement est fixée à 50, vous pouvez générer autant d'échantillon que vous voulez. Estimer et dessiner la décomposition biais variance de l'erreur de prediction de l'estimateur $k$-NN en $x = 0.5$ en fonction de $k$ variant entre 1 et 20.
Pour rappel, pour un estimateur $\hat{f}_n$ dépendant d'un échantillon $\left\{(X_i, Y_i)\right\}_{i=1}^n$, le biais et la variance sont donnés respectivement par:
$$\mathbb{E}_n\left[f^*(0.5) - \hat{f}_n(0.5) \right]^2 \qquad\qquad \text{Var}_n\left[ \hat{f}_n(0.5)\right] $$
où $f^*$ désigne la règle de Bayes et $\mathbb{E}_n$ et $\text{Var}_n$ désignent l'espérance et la variance pour le tirage de l'échantillon.
Quelle est la valeur de $k$ assurant le risque le plus faible?
Répondez aux questions précédentes en remplaçant la régression $k$-NN par une régression polynomiale de degré $d$ variant de $1$ à $10$. Si vous avez des problèmes numériques vous pourrez utiliser les polynomes de Chebychev. Si vous avez fini, vous pourrez mettre en oeuvre les mêmes expériences avec un régression polynomiale de degré 10 et une régularisation (somme des carrés des coefficients, variation totale sur [-1,1]).