Einführung
In diesem Lab bauen wir einen Workflow für die Dimensionsreduzierung und Klassifizierung mit Hilfe der Hauptkomponentenanalyse (PCA) und der logistischen Regression. Wir verwenden die scikit-learn-Bibliothek, um die unsupervised Dimensionsreduzierung auf dem digits-Datensatz mit PCA durchzuführen. Anschließend verwenden wir ein logistisches Regressionsmodell zur Klassifizierung. Wir verwenden GridSearchCV, um die Dimension der PCA festzulegen und die beste Kombination aus PCA-Abschneidung und Klassifizierer-Regularisierung zu finden.
Tipps für die VM
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 von Jupyter Notebook nicht automatisiert werden.
Wenn Sie während des Lernens Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.
Importieren der erforderlichen Bibliotheken
Wir importieren zunächst die erforderlichen Bibliotheken für die Implementierung des Workflows.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import StandardScaler
Definieren der Workflow-Komponenten
Wir definieren die Workflow-Komponenten, einschließlich der PCA, des Standard-Skalierers und der logistischen Regression. Wir setzen die Toleranz auf einen großen Wert, um das Beispiel schneller zu machen.
## Definieren Sie einen Workflow, um die beste Kombination aus PCA-Abschneidung
## und Klassifizierer-Regularisierung zu suchen.
pca = PCA()
## Definieren Sie einen Standard-Skalierer, um die Eingaben zu normalisieren
scaler = StandardScaler()
logistic = LogisticRegression(max_iter=10000, tol=0.1)
pipe = Pipeline(steps=[("scaler", scaler), ("pca", pca), ("logistic", logistic)])
Laden des Datensatzes und Definieren von Parametern für GridSearchCV
Wir laden den digits-Datensatz und definieren die Parameter für GridSearchCV. Wir legen den Parameter für die PCA-Abschneidung und die Klassifizierer-Regularisierung fest.
X_digits, y_digits = datasets.load_digits(return_X_y=True)
param_grid = {
"pca__n_components": [5, 15, 30, 45, 60],
"logistic__C": np.logspace(-4, 4, 4),
}
Ausführen von GridSearchCV
Wir führen GridSearchCV durch, um die beste Kombination aus PCA-Abschneidung und Klassifizierer-Regularisierung zu finden.
search = GridSearchCV(pipe, param_grid, n_jobs=2)
search.fit(X_digits, y_digits)
Drucken der besten Parameter und des Scores
Wir drucken die besten Parameter und den Score, die aus GridSearchCV erhalten wurden.
print("Best parameter (CV score=%0.3f):" % search.best_score_)
print(search.best_params_)
Zeichnen des PCA-Spektrums
Wir zeichnen das PCA-Spektrum, um das erklärte Varianzverhältnis jeder Hauptkomponente zu visualisieren.
pca.fit(X_digits)
fig, (ax0, ax1) = plt.subplots(nrows=2, sharex=True, figsize=(6, 6))
ax0.plot(
np.arange(1, pca.n_components_ + 1), pca.explained_variance_ratio_, "+", linewidth=2
)
ax0.set_ylabel("PCA erklärtes Varianzverhältnis")
ax0.axvline(
search.best_estimator_.named_steps["pca"].n_components,
linestyle=":",
label="n_components gewählt",
)
ax0.legend(prop=dict(size=12))
Finden der besten Klassifizierer-Ergebnisse
Für jede Anzahl von Komponenten werden wir die besten Klassifizierer-Ergebnisse finden.
results = pd.DataFrame(search.cv_results_)
components_col = "param_pca__n_components"
best_clfs = results.groupby(components_col).apply(
lambda g: g.nlargest(1, "mean_test_score")
)
Zeichnen der Klassifikationsgenauigkeit
Wir werden die Klassifikationsgenauigkeit für jede Anzahl von Komponenten zeichnen.
best_clfs.plot(
x=components_col, y="mean_test_score", yerr="std_test_score", legend=False, ax=ax1
)
ax1.set_ylabel("Klassifikationsgenauigkeit (val)")
ax1.set_xlabel("n_components")
plt.xlim(-1, 70)
plt.tight_layout()
plt.show()
Zusammenfassung
In diesem Lab haben wir gelernt, wie man einen Pipeline für die Dimensionsreduzierung und Klassifizierung mit Hilfe der Hauptkomponentenanalyse (PCA) und Logistischer Regression aufbaut. Wir haben die scikit-learn-Bibliothek verwendet, um eine unüberwachte Dimensionsreduzierung auf dem digits-Datensatz mit PCA durchzuführen. Anschließend haben wir ein logistisches Regressionsmodell für die Klassifizierung verwendet. Wir haben GridSearchCV verwendet, um die Dimension der PCA festzulegen und die beste Kombination aus PCA-Abschneidung und Klassifizierer-Regularisierung zu finden. Wir haben das PCA-Spektrum und die Klassifikationsgenauigkeit für jede Anzahl von Komponenten geplottet.