Introduction
Ce laboratoire compare deux stratégies de réduction de la dimensionalité, l'agglomération de fonctionnalités et la sélection de fonctionnalités univariées avec l'Anova, dans un problème de régression en utilisant un BayesianRidge comme estimateur supervisé.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter pour pratiquer.
Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez des commentaires après la session, et nous résoudrons rapidement le problème pour vous.
Définir les paramètres
n_samples = 200
size = 40 ## taille de l'image
roi_size = 15
snr = 5.0
np.random.seed(0)
Générer les données
coef = np.zeros((size, size))
coef[0:roi_size, 0:roi_size] = -1.0
coef[-roi_size:, -roi_size:] = 1.0
X = np.random.randn(n_samples, size**2)
for x in X: ## lisser les données
x[:] = ndimage.gaussian_filter(x.reshape(size, size), sigma=1.0).ravel()
X -= X.mean(axis=0)
X /= X.std(axis=0)
y = np.dot(X, coef.ravel())
Ajouter du bruit
noise = np.random.randn(y.shape[0])
noise_coef = (linalg.norm(y, 2) / np.exp(snr / 20.0)) / linalg.norm(noise, 2)
y += noise_coef * noise
Calculer les coefficients d'un Bayesian Ridge avec GridSearch
cv = KFold(2) ## générateur de validation croisée pour la sélection du modèle
ridge = BayesianRidge()
cachedir = tempfile.mkdtemp()
mem = Memory(location=cachedir, verbose=1)
Agrégation Ward suivie de BayesianRidge
connectivity = grid_to_graph(n_x=size, n_y=size)
ward = FeatureAgglomeration(n_clusters=10, connectivity=connectivity, memory=mem)
clf = Pipeline([("ward", ward), ("ridge", ridge)])
## Sélectionner le nombre optimal de parcelles avec une recherche en grille
clf = GridSearchCV(clf, {"ward__n_clusters": [10, 20, 30]}, n_jobs=1, cv=cv)
clf.fit(X, y) ## définir les meilleurs paramètres
coef_ = clf.best_estimator_.steps[-1][1].coef_
coef_ = clf.best_estimator_.steps[0][1].inverse_transform(coef_)
coef_agglomeration_ = coef_.reshape(size, size)
Sélection de caractéristiques univariée ANOVA suivie de BayesianRidge
f_regression = mem.cache(feature_selection.f_regression) ## fonction de mise en cache
anova = feature_selection.SelectPercentile(f_regression)
clf = Pipeline([("anova", anova), ("ridge", ridge)])
## Sélectionner le pourcentage optimal de caractéristiques avec une recherche en grille
clf = GridSearchCV(clf, {"anova__percentile": [5, 10, 20]}, cv=cv)
clf.fit(X, y) ## définir les meilleurs paramètres
coef_ = clf.best_estimator_.steps[-1][1].coef_
coef_ = clf.best_estimator_.steps[0][1].inverse_transform(coef_.reshape(1, -1))
coef_selection_ = coef_.reshape(size, size)
Tracer les résultats sur une image
plt.close("all")
plt.figure(figsize=(7.3, 2.7))
plt.subplot(1, 3, 1)
plt.imshow(coef, interpolation="nearest", cmap=plt.cm.RdBu_r)
plt.title("Vrai poids")
plt.subplot(1, 3, 2)
plt.imshow(coef_selection_, interpolation="nearest", cmap=plt.cm.RdBu_r)
plt.title("Sélection de caractéristiques")
plt.subplot(1, 3, 3)
plt.imshow(coef_agglomeration_, interpolation="nearest", cmap=plt.cm.RdBu_r)
plt.title("Agrégation de caractéristiques")
plt.subplots_adjust(0.04, 0.0, 0.98, 0.94, 0.16, 0.26)
plt.show()
Sommaire
Ce laboratoire compare deux stratégies de réduction de la dimensionalité, l'agglomération de caractéristiques et la sélection de caractéristiques univariée avec l'ANOVA, dans un problème de régression utilisant un BayesianRidge comme estimateur supervisé. Les résultats sont tracés sur une image et montrent les vrais poids, la sélection de caractéristiques et l'agglomération de caractéristiques.