Comparer les stratégies de réduction de la dimensionalité

Beginner

This tutorial is from open-source community. Access the source code

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.