Shrinkage Kovarianzschätzung

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 wird gezeigt, wie die Kovarianzschätzung mit Hilfe von Regularisierungstechniken wie Shrinkage-Methoden durchgeführt werden kann, um die Varianz des Schätzers zu reduzieren, sowie wie das Bias-Varianz-Gleichgewicht gewählt werden kann. Wir werden drei Ansätze zum Festlegen des Regularisierungsparameters vergleichen.

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 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 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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup(["Advanced Data Analysis and Dimensionality Reduction"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup -.-> sklearn/covariance("Covariance Estimators") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/model_selection -.-> lab-49096{{"Shrinkage Kovarianzschätzung"}} sklearn/covariance -.-> lab-49096{{"Shrinkage Kovarianzschätzung"}} ml/sklearn -.-> lab-49096{{"Shrinkage Kovarianzschätzung"}} end

Beispiel-Daten generieren

Wir generieren Beispiel-Daten mit 40 Merkmalen und 20 Proben. Wir verwenden die Funktion np.random.normal(), um eine Normalverteilung zu erstellen.

import numpy as np

n_features, n_samples = 40, 20
np.random.seed(42)
base_X_train = np.random.normal(size=(n_samples, n_features))
base_X_test = np.random.normal(size=(n_samples, n_features))

coloring_matrix = np.random.normal(size=(n_features, n_features))
X_train = np.dot(base_X_train, coloring_matrix)
X_test = np.dot(base_X_test, coloring_matrix)

Berechne die Wahrscheinlichkeit für die Testdaten

Wir berechnen die negative Log-Wahrscheinlichkeit für die Testdaten mit der Klasse ShrunkCovariance aus dem Modul sklearn.covariance und der Funktion log_likelihood aus dem Modul scipy.linalg. Wir erstellen einen Bereich möglicher Werte für den Shrinkage-Koeffizienten und berechnen die Wahrscheinlichkeit für jeden Wert.

from sklearn.covariance import ShrunkCovariance, empirical_covariance, log_likelihood
from scipy import linalg

shrinkages = np.logspace(-2, 0, 30)
negative_logliks = [
    -ShrunkCovariance(shrinkage=s).fit(X_train).score(X_test) for s in shrinkages
]

real_cov = np.dot(coloring_matrix.T, coloring_matrix)
emp_cov = empirical_covariance(X_train)
loglik_real = -log_likelihood(emp_cov, linalg.inv(real_cov))

Vergleiche verschiedene Ansätze zum Festlegen des Regularisierungsparameters

Wir vergleichen drei Ansätze zum Festlegen des Regularisierungsparameters: Kreuzvalidierung, Ledoit-Wolf und OAS.

from sklearn.model_selection import GridSearchCV
from sklearn.covariance import LedoitWolf, OAS

tuned_parameters = [{"shrinkage": shrinkages}]
cv = GridSearchCV(ShrunkCovariance(), tuned_parameters)
cv.fit(X_train)

lw = LedoitWolf()
loglik_lw = lw.fit(X_train).score(X_test)

oa = OAS()
loglik_oa = oa.fit(X_train).score(X_test)

Ergebnisse plotten

Wir plotten die Wahrscheinlichkeit für unbekannte Daten für verschiedene Werte des Shrinkage-Parameters und zeigen die Auswahlmöglichkeiten durch Kreuzvalidierung, LedoitWolf- und OAS-Schätzungen.

import matplotlib.pyplot as plt

fig = plt.figure()
plt.title("Regularisierte Kovarianz: Wahrscheinlichkeit und Shrinkage-Koeffizient")
plt.xlabel("Regularisierungsparameter: Shrinkage-Koeffizient")
plt.ylabel("Fehler: negative Log-Wahrscheinlichkeit auf Testdaten")

plt.loglog(shrinkages, negative_logliks, label="Negative Log-Wahrscheinlichkeit")

plt.plot(plt.xlim(), 2 * [loglik_real], "--r", label="Wahrscheinlichkeit der realen Kovarianz")

lik_max = np.amax(negative_logliks)
lik_min = np.amin(negative_logliks)
ymin = lik_min - 6.0 * np.log((plt.ylim()[1] - plt.ylim()[0]))
ymax = lik_max + 10.0 * np.log(lik_max - lik_min)
xmin = shrinkages[0]
xmax = shrinkages[-1]

plt.vlines(
    lw.shrinkage_,
    ymin,
    -loglik_lw,
    color="magenta",
    linewidth=3,
    label="Ledoit-Wolf-Schätzung",
)

plt.vlines(
    oa.shrinkage_, ymin, -loglik_oa, color="lila", linewidth=3, label="OAS-Schätzung"
)

plt.vlines(
    cv.best_estimator_.shrinkage,
    ymin,
    -cv.best_estimator_.score(X_test),
    color="cyan",
    linewidth=3,
    label="Kreuzvalidierungs-beste Schätzung",
)

plt.ylim(ymin, ymax)
plt.xlim(xmin, xmax)
plt.legend()

plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man die Kovarianzschätzung mit Regularisierungstechniken wie Shrinkage-Methoden durchführt. Wir haben drei Ansätze zum Festlegen des Regularisierungsparameters verglichen: Kreuzvalidierung, Ledoit-Wolf und OAS. Wir haben die Wahrscheinlichkeit für unbekannte Daten für verschiedene Werte des Shrinkage-Parameters geplottet und die Auswahlmöglichkeiten durch Kreuzvalidierung, LedoitWolf- und OAS-Schätzungen gezeigt.