Vergleich von Dimensionalitätsreduktionsstrategien

Beginner

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

Einführung

In diesem Lab werden zwei Dimensionalitätsreduktionsstrategien, Feature-Agglomeration und univariate Feature-Selection mit ANOVA, in einem Regressionsproblem mit BayesianRidge als überwachtem Schätzer verglichen.

VM-Tipps

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Parameter festlegen

n_samples = 200
size = 40  ## Bildgröße
roi_size = 15
snr = 5.0
np.random.seed(0)

Daten generieren

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:  ## Daten glätten
    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())

Rauschen hinzufügen

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

Berechne die Koeffizienten eines Bayesian Ridge mit GridSearch

cv = KFold(2)  ## Kreuzvalidierungsgenerator zur Modellauswahl
ridge = BayesianRidge()
cachedir = tempfile.mkdtemp()
mem = Memory(location=cachedir, verbose=1)

Ward-Agglomeration gefolgt von 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)])
## Wähle die optimale Anzahl von Parcels mit Grid Search
clf = GridSearchCV(clf, {"ward__n_clusters": [10, 20, 30]}, n_jobs=1, cv=cv)
clf.fit(X, y)  ## setze die besten Parameter
coef_ = clf.best_estimator_.steps[-1][1].coef_
coef_ = clf.best_estimator_.steps[0][1].inverse_transform(coef_)
coef_agglomeration_ = coef_.reshape(size, size)

Anova-Einfaktor-Feature-Selektion gefolgt von BayesianRidge

f_regression = mem.cache(feature_selection.f_regression)  ## Caching-Funktion
anova = feature_selection.SelectPercentile(f_regression)
clf = Pipeline([("anova", anova), ("ridge", ridge)])
## Wähle den optimalen Feature-Anteil mit Grid Search
clf = GridSearchCV(clf, {"anova__percentile": [5, 10, 20]}, cv=cv)
clf.fit(X, y)  ## setze die besten Parameter
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)

Zeige die Ergebnisse auf einem Bild an

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("Wahre Gewichte")
plt.subplot(1, 3, 2)
plt.imshow(coef_selection_, interpolation="nearest", cmap=plt.cm.RdBu_r)
plt.title("Feature-Selektion")
plt.subplot(1, 3, 3)
plt.imshow(coef_agglomeration_, interpolation="nearest", cmap=plt.cm.RdBu_r)
plt.title("Feature-Agglomeration")
plt.subplots_adjust(0.04, 0.0, 0.98, 0.94, 0.16, 0.26)
plt.show()

Zusammenfassung

In diesem Lab werden zwei Dimensionalitätsreduktionsstrategien, die Feature-Agglomeration und die einseitige Feature-Selektion mit Anova, in einem Regressionsproblem mit einem BayesianRidge als überwachtem Schätzer verglichen. Die Ergebnisse werden auf einem Bild dargestellt und zeigen die wahren Gewichte, die Feature-Selektion und die Feature-Agglomeration.