Оценка устойчивой матрицы ковариации в Python

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

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

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

Введение

В этом практическом занятии вы научитесь использовать библиотеку scikit-learn в Python для оценки устойчивых матриц ковариации. Руководство познакомит вас с концепцией устойчивой оценки ковариации и покажет, как ее можно использовать для оценки матрицы ковариации наборов данных, содержащих выбросы.

Советы по использованию ВМ

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

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

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


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/AdvancedDataAnalysisandDimensionalityReductionGroup -.-> sklearn/covariance("Covariance Estimators") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/covariance -.-> lab-49272{{"Оценка устойчивой матрицы ковариации в Python"}} ml/sklearn -.-> lab-49272{{"Оценка устойчивой матрицы ковариации в Python"}} end

Импорт библиотек

Первым шагом является импорт необходимых библиотек. В этом руководстве мы будем использовать NumPy, Matplotlib и scikit-learn.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.covariance import MinCovDet, EmpiricalCovariance

Генерация данных

В этом шаге мы генерируем случайный набор данных с n_samples образцами и n_features признаками. Также мы добавляем несколько выбросов в набор данных.

n_samples = 80
n_features = 5

## Generate random dataset
rng = np.random.RandomState(42)
X = rng.randn(n_samples, n_features)

## Add outliers to the dataset
n_outliers = 20
outliers_index = rng.permutation(n_samples)[:n_outliers]
outliers_offset = 10.0 * (
    np.random.randint(2, size=(n_outliers, n_features)) - 0.5
)
X[outliers_index] += outliers_offset

Оценка устойчивой матрицы ковариации

В этом шаге мы оцениваем устойчивую матрицу ковариации набора данных с использованием оценщика минимального детерминанта ковариации (MCD).

## Estimate a robust covariance matrix of the dataset
mcd = MinCovDet().fit(X)
robust_cov = mcd.covariance_

Оценка эмпирической матрицы ковариации

В этом шаге мы оцениваем эмпирическую матрицу ковариации набора данных с использованием оценщика максимального правдоподобия (MLE).

## Estimate an empirical covariance matrix of the dataset
emp_cov = EmpiricalCovariance().fit(X).covariance_

Сравнение матриц ковариации

В этом шаге мы сравниваем оцененные устойчивую и эмпирическую матрицы ковариации набора данных.

## Compare the estimated covariance matrices
print("Robust Covariance Matrix:")
print(robust_cov)
print("\nEmpirical Covariance Matrix:")
print(emp_cov)

Визуализация результатов

В этом шаге мы визуализируем результаты оценки устойчивой и эмпирической матриц ковариации.

## Visualize the results
fig, ax = plt.subplots()

## Plot the dataset
inliers_index = np.arange(n_samples)[~np.in1d(np.arange(n_samples), outliers_index)]
ax.scatter(
    X[inliers_index, 0], X[inliers_index, 1], color="black", label="Inliers"
)
ax.scatter(X[outliers_index, 0], X[outliers_index, 1], color="red", label="Outliers")

## Plot the estimated covariance matrices
for covariance, color, label in zip(
    [emp_cov, robust_cov], ["green", "magenta"], ["MLE", "MCD"]
):
    v, w = np.linalg.eigh(covariance)
    u = w[0] / np.linalg.norm(w[0])
    angle = np.arctan2(u[1], u[0])
    angle = 180 * angle / np.pi
    v = 2.0 * np.sqrt(2.0) * np.sqrt(v)
    ell = mpl.patches.Ellipse(
        mcd.location_,
        v[0],
        v[1],
        180 + angle,
        color=color,
        label=label,
        alpha=0.2,
    )
    ell.set_clip_box(ax.bbox)
    ell.set_facecolor(color)
    ax.add_artist(ell)

## Set plot options
plt.legend()
plt.title("Robust Covariance Estimation")
plt.show()

Резюме

В этом руководстве вы узнали, как использовать библиотеку scikit - learn в Python для оценки устойчивых матриц ковариации. Также вы узнали, как использовать оценщик минимального детерминанта ковариации (MCD) для оценки матрицы ковариации наборов данных, содержащих выбросы.