Pca vs Fa Modellauswahl plotten

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 zwei probabilistische Modelle untersuchen - Probabilistic PCA und Factor Analysis - und deren Effizienz bei der Modellauswahl und Kovarianzschätzung vergleichen. Wir werden Kreuzvalidierung auf Low-Rank-Daten durchführen, die mit homoskedastischer oder heteroskedastischer Störung verseucht sind. Darüber hinaus werden wir die Modellwahrscheinlichkeit mit den Wahrscheinlichkeiten vergleichen, die aus Shrinkage-Kovarianzschätzern erhalten werden.

VM-Tipps

Nachdem die VM gestartet ist, klicken Sie in der linken oberen 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 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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup(["Advanced Data Analysis and Dimensionality Reduction"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup -.-> sklearn/decomposition("Matrix Decomposition") sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup -.-> sklearn/covariance("Covariance Estimators") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/model_selection -.-> lab-49241{{"Pca vs Fa Modellauswahl plotten"}} sklearn/decomposition -.-> lab-49241{{"Pca vs Fa Modellauswahl plotten"}} sklearn/covariance -.-> lab-49241{{"Pca vs Fa Modellauswahl plotten"}} ml/sklearn -.-> lab-49241{{"Pca vs Fa Modellauswahl plotten"}} end

Daten erstellen

Wir werden einen simulierten Datensatz erstellen, der aus 500 Proben, 25 Merkmalen und einem Rang von 5 besteht. Wir werden auch homoskedastische und heteroskedastische Störungen zum Datensatz hinzufügen.

import numpy as np
from scipy import linalg

n_samples, n_features, rank = 500, 25, 5
sigma = 1.0
rng = np.random.RandomState(42)
U, _, _ = linalg.svd(rng.randn(n_features, n_features))
X = np.dot(rng.randn(n_samples, rank), U[:, :rank].T)

## Homoskedastische Störung hinzufügen
X_homo = X + sigma * rng.randn(n_samples, n_features)

## Heteroskedastische Störung hinzufügen
sigmas = sigma * rng.rand(n_features) + sigma / 2.0
X_hetero = X + rng.randn(n_samples, n_features) * sigmas

Modelle anpassen

Wir werden die Probabilistic PCA- und Factor-Analyse-Modelle an den Datensatz anpassen und Kreuzvalidierung verwenden, um ihre Leistung zu bewerten. Wir werden auch die Scores für Shrinkage-Kovarianzschätzer berechnen und die Ergebnisse vergleichen.

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA, FactorAnalysis
from sklearn.covariance import ShrunkCovariance, LedoitWolf
from sklearn.model_selection import cross_val_score, GridSearchCV

n_components = np.arange(0, n_features, 5)  ## Optionen für n_components

def compute_scores(X):
    pca = PCA(svd_solver="full")
    fa = FactorAnalysis()

    pca_scores, fa_scores = [], []
    for n in n_components:
        pca.n_components = n
        fa.n_components = n
        pca_scores.append(np.mean(cross_val_score(pca, X)))
        fa_scores.append(np.mean(cross_val_score(fa, X)))

    return pca_scores, fa_scores

def shrunk_cov_score(X):
    shrinkages = np.logspace(-2, 0, 30)
    cv = GridSearchCV(ShrunkCovariance(), {"shrinkage": shrinkages})
    return np.mean(cross_val_score(cv.fit(X).best_estimator_, X))

def lw_score(X):
    return np.mean(cross_val_score(LedoitWolf(), X))

for X, title in [(X_homo, "Homoskedastische Störung"), (X_hetero, "Heteroskedastische Störung")]:
    pca_scores, fa_scores = compute_scores(X)
    n_components_pca = n_components[np.argmax(pca_scores)]
    n_components_fa = n_components[np.argmax(fa_scores)]

    pca = PCA(svd_solver="full", n_components="mle")
    pca.fit(X)
    n_components_pca_mle = pca.n_components_

    print("best n_components by PCA CV = %d" % n_components_pca)
    print("best n_components by FactorAnalysis CV = %d" % n_components_fa)
    print("best n_components by PCA MLE = %d" % n_components_pca_mle)

    plt.figure()
    plt.plot(n_components, pca_scores, "b", label="PCA scores")
    plt.plot(n_components, fa_scores, "r", label="FA scores")
    plt.axvline(rank, color="g", label="Wahrheit: %d" % rank, linestyle="-")
    plt.axvline(
        n_components_pca,
        color="b",
        label="PCA CV: %d" % n_components_pca,
        linestyle="--",
    )
    plt.axvline(
        n_components_fa,
        color="r",
        label="FactorAnalysis CV: %d" % n_components_fa,
        linestyle="--",
    )
    plt.axvline(
        n_components_pca_mle,
        color="k",
        label="PCA MLE: %d" % n_components_pca_mle,
        linestyle="--",
    )

    ## vergleichen mit anderen Kovarianzschätzern
    plt.axhline(
        shrunk_cov_score(X),
        color="violett",
        label="Shrunk Covariance MLE",
        linestyle="-.",
    )
    plt.axhline(
        lw_score(X),
        color="orange",
        label="LedoitWolf MLE" % n_components_pca_mle,
        linestyle="-.",
    )

    plt.xlabel("Anzahl der Komponenten")
    plt.ylabel("CV-Scores")
    plt.legend(loc="untere rechte Ecke")
    plt.title(title)

plt.show()

Zusammenfassung

In diesem Lab haben wir die Effizienz von Probabilistic PCA- und Factor-Analyse-Modellen bei der Modellauswahl und Kovarianzschätzung untersucht. Wir haben einen simulierten Datensatz mit homoskedastischer und heteroskedastischer Störung erstellt und die Leistung der Modelle mit Hilfe von Kreuzvalidierung verglichen. Wir haben auch die Modellwahrscheinlichkeit mit den Wahrscheinlichkeiten verglichen, die aus Shrinkage-Kovarianzschätzern erhalten wurden. Die Ergebnisse zeigten, dass sowohl PCA als auch FA effektiv waren, um die Größe des Low-Rank-Unterraums bei Vorliegen von homoskedastischer Störung wiederzugewinnen. PCA scheiterte jedoch und überschätzte den Rang, wenn heteroskedastische Störungen vorhanden waren. Unter geeigneten Umständen war die zurückgehaltene Datenmenge für Low-Rank-Modelle wahrscheinlicher als für Shrinkage-Modelle.