Skip to content

Instantly share code, notes, and snippets.

@larsoner
Created November 2, 2018 02:39
Show Gist options
  • Save larsoner/170f88071d2ea594a350fc74604aae26 to your computer and use it in GitHub Desktop.
Save larsoner/170f88071d2ea594a350fc74604aae26 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
"""
Do regularization in lower-dimensional subspace.
"""
import numpy as np
from scipy import linalg
from sklearn.covariance import OAS, EmpiricalCovariance, LedoitWolf
rng = np.random.RandomState(0)
n_ch = 60
n_times = 5000
n_train = 200
n_comp = 40
u = linalg.svd(rng.randn(60, n_comp))[0][:, :n_comp]
cov = np.dot(u, u.T)
data = rng.multivariate_normal(np.zeros(n_ch), cov, 1000).T
u = linalg.svd(data)[0][:, :n_comp]
proj = np.dot(u.T, data)
emp = EmpiricalCovariance()
emp.fit(data.T[:n_train])
print(-emp.score(data.T[n_train:]), np.linalg.norm(cov - emp.covariance_))
oas = OAS()
oas.fit(data.T[:n_train])
print(-oas.score(data.T[n_train:]), np.linalg.norm(cov - oas.covariance_))
lw = LedoitWolf()
lw.fit(data.T[:n_train])
print(-lw.score(data.T[n_train:]), np.linalg.norm(cov - lw.covariance_))
emp = EmpiricalCovariance()
emp.fit(proj.T[:n_train])
emp_cov = np.dot(np.dot(u, emp.covariance_), u.T)
print(-emp.score(proj.T[n_train:]), np.linalg.norm(cov - emp_cov))
oas = OAS()
oas.fit(proj.T[:n_train])
oas_cov = np.dot(np.dot(u, oas.covariance_), u.T)
print(-oas.score(proj.T[n_train:]), np.linalg.norm(cov - oas_cov))
lw = LedoitWolf()
lw.fit(proj.T[:n_train])
lw_cov = np.dot(np.dot(u, lw.covariance_), u.T)
print(-lw.score(proj.T[n_train:]), np.linalg.norm(cov - lw_cov))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment