[PYTHON] 공분산 행렬에서 퇴화 된 행 / 열을 찾는 법
PYTHON공분산 행렬에서 퇴화 된 행 / 열을 찾는 법
numpy.cov를 사용하여 400 개 이상의 시계열 데이터 세트에서 공분산 행렬을 만듭니다. linalg.det를 사용하면 나에게 0의 값이 주어 지므로 행렬은 단수입니다. 나는 linalg.svd를 사용하여 순위가 열의 수보다 2가 적다는 것을 알 수 있으므로 공분산 행렬의 어딘가에 행렬을 퇴화시키는 선형 조합이 있습니다. 나는 근본적인 timeseries에 corrcoef를 사용했지만 상관 관계가 0.78을 넘지는 않았다. 누군가가 퇴행 열의 위치를 결정하는 방법을 제안 할 수 있습니까? 고맙습니다.
해결법
-
==============================
1.행렬 A의 QR 분해를 취하면 대각선을 따라 0이 아닌 값을 갖는 R의 열은 A의 선형 적으로 독립적 인 열에 해당합니다.
행렬 A의 QR 분해를 취하면 대각선을 따라 0이 아닌 값을 갖는 R의 열은 A의 선형 적으로 독립적 인 열에 해당합니다.
import numpy as np linalg = np.linalg def independent_columns(A, tol = 1e-05): """ Return an array composed of independent columns of A. Note the answer may not be unique; this function returns one of many possible answers. http://stackoverflow.com/q/13312498/190597 (user1812712) http://math.stackexchange.com/a/199132/1140 (Gerry Myerson) http://mail.scipy.org/pipermail/numpy-discussion/2008-November/038705.html (Anne Archibald) >>> A = np.array([(2,4,1,3),(-1,-2,1,0),(0,0,2,2),(3,6,2,5)]) >>> independent_columns(A) np.array([[1, 4], [2, 5], [3, 6]]) """ Q, R = linalg.qr(A) independent = np.where(np.abs(R.diagonal()) > tol)[0] return A[:, independent] def matrixrank(A,tol=1e-8): """ http://mail.scipy.org/pipermail/numpy-discussion/2008-February/031218.html """ s = linalg.svd(A,compute_uv=0) return sum( np.where( s>tol, 1, 0 ) ) matrices = [ np.array([(2,4,1,3),(-1,-2,1,0),(0,0,2,2),(3,6,2,5)]), np.array([(1,2,3),(2,4,6),(4,5,6)]).T, np.array([(1,2,3,1),(2,4,6,2),(4,5,6,3)]).T, np.array([(1,2,3,1),(2,4,6,3),(4,5,6,3)]).T, np.array([(1,2,3),(2,4,6),(4,5,6),(7,8,9)]).T ] for A in matrices: B = independent_columns(A) assert matrixrank(A) == matrixrank(B) == B.shape[-1]
assert matrixrank (A) == matrixrank (B)는 independent_columns 함수가 A와 같은 순위의 행렬을 반환하는지 확인합니다.
assert matrixrank (B) == B.shape [-1]은 B의 랭크가 B의 렬수와 같은지 확인합니다.
from https://stackoverflow.com/questions/13312498/how-to-find-degenerate-rows-columns-in-a-covariance-matrix by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 여러 프로세스에서 단일 파일 처리 (0) | 2018.11.27 |
---|---|
[PYTHON] 다중 처리 : 여러 프로세스간에 사전을 공유하려면 어떻게해야합니까? (0) | 2018.11.27 |
[PYTHON] Python으로 원격 PostgreSQL 데이터베이스에 연결하는 방법 (0) | 2018.11.27 |
[PYTHON] Python에서 C로 코드 변환기를 작성 하시겠습니까? [닫은] (0) | 2018.11.27 |
[PYTHON] 파이썬 3을위한 progressbar 다운로드 (0) | 2018.11.27 |