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,512 секунды)

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–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/covariance/plot_sparse_cov.html

Spec-Zone.ru

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