Spec-Zone.ru › scikit-learn

Примечание

Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью JupyterLite или Binder.

Оценка разреженной обратной ковариации

Использование оценщика GraphicalLasso для оценки ковариации и разреженной матрицы точности по небольшому числу выборок.

Для оценки вероятностной модели (например, гауссовской модели) оценка матрицы точности, то есть обратной ковариационной матрицы, так же важна, как и оценка ковариационной матрицы. Действительно, гауссовская модель параметризуется матрицей точности.

Чтобы обеспечить благоприятные условия для восстановления, мы выбираем данные из модели с разреженной обратной ковариационной матрицей. Кроме того, мы гарантируем, что данные не слишком сильно коррелируют (ограничивая наибольший коэффициент матрицы точности) и что в матрице точности нет малых коэффициентов, которые невозможно восстановить. Кроме того, при небольшом числе наблюдений легче восстановить корреляционную матрицу, а не ковариационную, поэтому мы масштабируем временной ряд.

Здесь число выборок немного больше числа измерений, поэтому эмпирическая ковариационная матрица всё ещё обратима. Однако, поскольку наблюдения сильно коррелируют, эмпирическая ковариационная матрица плохо обусловлена, и в результате её обратная матрица — эмпирическая матрица точности — сильно отличается от истинной.

Если использовать l2-регуляризацию, как в оценщике Ledoit-Wolf, то из-за малого числа выборок необходимо применять сильную регуляризацию. В результате матрица точности Ledoit-Wolf довольно близка к истинной матрице точности, которая почти диагональная, однако её внедиагональная структура теряется.

Оценщик с l1-регуляризацией может восстановить часть этой внедиагональной структуры. Он строит разреженную матрицу точности. Ему не удаётся восстановить точную структуру разреженности: он обнаруживает слишком много ненулевых коэффициентов. Однако наибольшие ненулевые коэффициенты оценки с l1-регуляризацией соответствуют ненулевым коэффициентам истинной матрицы. Наконец, коэффициенты оценки матрицы точности с l1-регуляризацией смещены к нулю: из-за регуляризации они все меньше соответствующих истинных значений, что видно на рисунке.

Обратите внимание, что диапазон цветов для матриц точности изменён для повышения наглядности рисунка. Полный диапазон значений эмпирической матрицы точности не отображается.

Параметр alpha оценщика GraphicalLasso, задающий разреженность модели, выбирается с помощью внутренней кросс-валидации в GraphicalLassoCV. Как видно на рисунке 2, сетка для вычисления оценки кросс-валидации итеративно уточняется в окрестности максимума.

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

Сгенерировать данные

import numpy as np
from scipy import linalg

from sklearn.datasets import make_sparse_spd_matrix

n_samples = 60
n_features = 20

prng = np.random.RandomState(1)
prec = make_sparse_spd_matrix(
    n_features, alpha=0.98, smallest_coef=0.4, largest_coef=0.7, random_state=prng
)
cov = linalg.inv(prec)
d = np.sqrt(np.diag(cov))
cov /= d
cov /= d[:, np.newaxis]
prec *= d
prec *= d[:, np.newaxis]
X = prng.multivariate_normal(np.zeros(n_features), cov, size=n_samples)
X -= X.mean(axis=0)
X /= X.std(axis=0)

Оценить ковариацию

from sklearn.covariance import GraphicalLassoCV, ledoit_wolf

emp_cov = np.dot(X.T, X) / n_samples

model = GraphicalLassoCV()
model.fit(X)
cov_ = model.covariance_
prec_ = model.precision_

lw_cov_, _ = ledoit_wolf(X)
lw_prec_ = linalg.inv(lw_cov_)

Построить графики результатов

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 6))
plt.subplots_adjust(left=0.02, right=0.98)

# plot the covariances
covs = [
    ("Empirical", emp_cov),
    ("Ledoit-Wolf", lw_cov_),
    ("GraphicalLassoCV", cov_),
    ("True", cov),
]
vmax = cov_.max()
for i, (name, this_cov) in enumerate(covs):
    plt.subplot(2, 4, i + 1)
    plt.imshow(
        this_cov, interpolation="nearest", vmin=-vmax, vmax=vmax, cmap=plt.cm.RdBu_r
    )
    plt.xticks(())
    plt.yticks(())
    plt.title("%s covariance" % name)


# plot the precisions
precs = [
    ("Empirical", linalg.inv(emp_cov)),
    ("Ledoit-Wolf", lw_prec_),
    ("GraphicalLasso", prec_),
    ("True", prec),
]
vmax = 0.9 * prec_.max()
for i, (name, this_prec) in enumerate(precs):
    ax = plt.subplot(2, 4, i + 5)
    plt.imshow(
        np.ma.masked_equal(this_prec, 0),
        interpolation="nearest",
        vmin=-vmax,
        vmax=vmax,
        cmap=plt.cm.RdBu_r,
    )
    plt.xticks(())
    plt.yticks(())
    plt.title("%s precision" % name)
    if hasattr(ax, "set_facecolor"):
        ax.set_facecolor(".7")
    else:
        ax.set_axis_bgcolor(".7")
Empirical covariance, Ledoit-Wolf covariance, GraphicalLassoCV covariance, True covariance, Empirical precision, Ledoit-Wolf precision, GraphicalLasso precision, True precision
# plot the model selection metric
plt.figure(figsize=(4, 3))
plt.axes([0.2, 0.15, 0.75, 0.7])
plt.plot(model.cv_results_["alphas"], model.cv_results_["mean_test_score"], "o-")
plt.axvline(model.alpha_, color=".5")
plt.title("Model selection")
plt.ylabel("Cross-validation score")
plt.xlabel("alpha")

plt.show()
Model selection

Общее время выполнения скрипта: (0 минут 0.623 секунды)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_sparse_cov.ipynb

Download Python source code: plot_sparse_cov.py

Download zipped: plot_sparse_cov.zip

Похожие примеры

Точность и полнота

Оценка ковариации со сжатием: LedoitWolf, OAS и метод максимального правдоподобия

Линейный и квадратичный дискриминантный анализ с эллипсоидом ковариации

Оценки Ledoit-Wolf и OAS

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/covariance/plot_sparse_cov.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API