Gemeinsame Merkmalsauswahl mit Multi-Task Lasso

Machine LearningMachine LearningBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir untersuchen, wie die gemeinsame Merkmalsauswahl mit dem Multi-Task-Lasso-Algorithmus durchgeführt wird. Wir werden die beliebte Python-Machine-Learning-Bibliothek scikit-learn verwenden, um einige Beispiel-Daten zu generieren und Modelle an diese anzupassen. Anschließend werden wir die Ergebnisse der Modelle darstellen, um zu sehen, wie sie sich vergleichen.

VM-Tipps

Nachdem die VM gestartet ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

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.

Daten generieren

Zunächst müssen wir einige Beispiel-Daten generieren, die wir verwenden können, um unsere Modelle anzupassen. Wir werden numpy verwenden, um 100 Stichproben zu generieren, jede mit 30 Merkmalen und 40 Aufgaben. Wir werden auch 5 relevante Merkmale zufällig auswählen und für sie Koeffizienten mit Sinuswellen mit zufälliger Frequenz und Phase erstellen. Schließlich werden wir einigen zufälligen Rauschen zu den Daten hinzufügen.

import numpy as np

rng = np.random.RandomState(42)

## Generieren Sie einige 2D-Koeffizienten mit Sinuswellen mit zufälliger Frequenz und Phase
n_samples, n_features, n_tasks = 100, 30, 40
n_relevant_features = 5
coef = np.zeros((n_tasks, n_features))
times = np.linspace(0, 2 * np.pi, n_tasks)
for k in range(n_relevant_features):
    coef[:, k] = np.sin((1.0 + rng.randn(1)) * times + 3 * rng.randn(1))

X = rng.randn(n_samples, n_features)
Y = np.dot(X, coef.T) + rng.randn(n_samples, n_tasks)

Modelle anpassen

Jetzt, wo wir unsere Daten haben, können wir Modelle an diese anpassen, indem wir die Lasso- und den Multi-Task-Lasso-Algorithmus verwenden. Wir werden ein Lasso-Modell für jede Aufgabe anpassen und anschließend ein Multi-Task-Lasso-Modell auf alle Aufgaben gleichzeitig anpassen.

from sklearn.linear_model import MultiTaskLasso, Lasso

coef_lasso_ = np.array([Lasso(alpha=0.5).fit(X, y).coef_ for y in Y.T])
coef_multi_task_lasso_ = MultiTaskLasso(alpha=1.0).fit(X, Y).coef_

Ergebnisse plotten

Schließlich können wir die Ergebnisse unserer Modelle plotten, um zu sehen, wie sie sich vergleichen. Wir werden die Unterstützung (d.h. den Ort der nicht-null-Koeffizienten) für jedes Modell sowie die Zeitreihe für ein Merkmal plotten.

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8, 5))
plt.subplot(1, 2, 1)
plt.spy(coef_lasso_)
plt.xlabel("Merkmal")
plt.ylabel("Zeit (oder Aufgabe)")
plt.text(10, 5, "Lasso")
plt.subplot(1, 2, 2)
plt.spy(coef_multi_task_lasso_)
plt.xlabel("Merkmal")
plt.ylabel("Zeit (oder Aufgabe)")
plt.text(10, 5, "MultiTaskLasso")
fig.suptitle("Koeffizient Nicht-Null-Lage")

feature_to_plot = 0
plt.figure()
lw = 2
plt.plot(coef[:, feature_to_plot], color="seagreen", linewidth=lw, label="Wahrheit")
plt.plot(
    coef_lasso_[:, feature_to_plot], color="cornflowerblue", linewidth=lw, label="Lasso"
)
plt.plot(
    coef_multi_task_lasso_[:, feature_to_plot],
    color="gold",
    linewidth=lw,
    label="MultiTaskLasso",
)
plt.legend(loc="upper center")
plt.axis("tight")
plt.ylim([-1.1, 1.1])
plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie die gemeinsame Merkmalsauswahl mit dem Multi-Task-Lasso-Algorithmus durchgeführt wird. Wir haben einige Beispiel-Daten generiert, Modelle an diese mit Lasso und Multi-Task-Lasso angepasst und die Ergebnisse geplottet. Wir können sehen, dass der Multi-Task-Lasso-Algorithmus im Vergleich zum Lasso-Algorithmus in der Lage ist, relevante Merkmale über alle Aufgaben besser auszuwählen.