Построение сравнения моделирования PCA и FA

Machine LearningMachine LearningBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабе мы исследуем две вероятностные модели - Probabilistic PCA и Factor Analysis - и сравниваем их эффективность в выборе модели и оценке ковариации. Мы проведем кросс-валидацию на низкоранговых данных, искаженных гомоскедастической или гетероскедастической шумом. Кроме того, мы сравним модельную правдоподобие с правдоподобиями, полученными из сжатие ковариационных оценщиков.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.


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 и FA"}} sklearn/decomposition -.-> lab-49241{{"Построение сравнения моделирования PCA и FA"}} sklearn/covariance -.-> lab-49241{{"Построение сравнения моделирования PCA и FA"}} ml/sklearn -.-> lab-49241{{"Построение сравнения моделирования PCA и FA"}} end

Создание данных

Мы создадим имитационный датасет, состоящий из 500 выборок, 25 признаков и ранга 5. Также добавим гомоскедастический и гетероскедастический шум в датасет.

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)

## Adding homoscedastic noise
X_homo = X + sigma * rng.randn(n_samples, n_features)

## Adding heteroscedastic noise
sigmas = sigma * rng.rand(n_features) + sigma / 2.0
X_hetero = X + rng.randn(n_samples, n_features) * sigmas

Настройка моделей

Мы настроим модели Probabilistic PCA и Factor Analysis на датасет и используем кросс-валидацию для оценки их производительности. Также вычислим оценки для сжатия ковариационных оценщиков и сравним результаты.

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)  ## варианты для 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, "Гомоскедастический шум"), (X_hetero, "Гетероскедастический шум")]:
    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("лучшее n_components по кросс-валидации PCA = %d" % n_components_pca)
    print("лучшее n_components по кросс-валидации FactorAnalysis = %d" % n_components_fa)
    print("лучшее n_components по PCA MLE = %d" % n_components_pca_mle)

    plt.figure()
    plt.plot(n_components, pca_scores, "b", label="Оценки PCA")
    plt.plot(n_components, fa_scores, "r", label="Оценки FA")
    plt.axvline(rank, color="g", label="ПРАВДА: %d" % rank, linestyle="-")
    plt.axvline(
        n_components_pca,
        color="b",
        label="PCA кросс-валидация: %d" % n_components_pca,
        linestyle="--",
    )
    plt.axvline(
        n_components_fa,
        color="r",
        label="FactorAnalysis кросс-валидация: %d" % n_components_fa,
        linestyle="--",
    )
    plt.axvline(
        n_components_pca_mle,
        color="k",
        label="PCA MLE: %d" % n_components_pca_mle,
        linestyle="--",
    )

    ## сравнить с другими ковариационными оценщиками
    plt.axhline(
        shrunk_cov_score(X),
        color="фиолетовый",
        label="Сжатое ковариационное MLE",
        linestyle="-.",
    )
    plt.axhline(
        lw_score(X),
        color="оранжевый",
        label="LedoitWolf MLE" % n_components_pca_mle,
        linestyle="-.",
    )

    plt.xlabel("количество компонентов")
    plt.ylabel("Оценки кросс-валидации")
    plt.legend(loc="нижний правый")
    plt.title(title)

plt.show()

Резюме

В этом лабе мы исследовали эффективность моделей Probabilistic PCA и Factor Analysis в выборе модели и оценке ковариации. Мы создали имитационный датасет с гомоскедастическим и гетероскедастическим шумом и сравнили производительность моделей с использованием кросс-валидации. Также сравнили модельную правдоподобие с правдоподобиями, полученными из сжатия ковариационных оценщиков. Результаты показали, что и PCA, и FA были эффективны при восстановлении размера низкорангового подпространства при наличии гомоскедастического шума. Однако, PCA не справлялась и переоценивала ранг при наличии гетероскедастического шума. В соответствующих обстоятельствах, данные, зарезервированные для проверки, были более вероятными для низкоранговых моделей, чем для моделей сжатия.