NumPy 기초·연습 문제

공분산 행렬

문제 설명PROBLEM

preview

공분산 행렬

PCA·선형회귀·가우시안 분포의 근간. 두 특성이 함께 움직이는 정도 를 모아 놓은 (D, D) 행렬:

Σij=1Nn=1N(Xn,iXˉi)(Xn,jXˉj)\Sigma_{ij} = \frac{1}{N} \sum_{n=1}^{N} (X_{n,i} - \bar{X}_i)(X_{n,j} - \bar{X}_j)

벡터화 형태:

Σ=1NXcXc,Xc=XXˉ\Sigma = \frac{1}{N} X_c^\top X_c, \quad X_c = X - \bar{X}

여기선 population 공분산 (/N/N). 불편추정량(/(N-1)) 은 쓰지 않습니다.

성질

  • 대칭: Σij=Σji\Sigma_{ij} = \Sigma_{ji}
  • 대각성분 = 각 특성의 분산
  • 양의 준정부호 (모든 고유값 ≥ 0)

과제

함수 covariance_matrix(X) 를 완성하세요.

  • X shape (N, D).
  • 반환: shape (D, D).
  • X.mean(axis=0) 으로 중심화 → Xc.T @ Xc / N.

테스트 케이스

#이름검증
1shape (D, D)
2대칭Σ == Σ.T
3대각 = 분산diag == X.var(axis=0)
4독립 특성 → 비대각 ≈ 0서로 독립 랜덤 컬럼 데이터
5np.cov(bias=True) 일치
개념 노트와 실수 포인트

NumPy 기초

  • ⚠️ axis 헷갈림: axis=0 은 행을 가로질러 → 열별 결과, axis=1행별 결과.
  • 브로드캐스팅: shape 를 뒤에서부터 맞춤(1 또는 같은 크기).
  • 반복문 대신 벡터화 연산. @(행렬곱) 와 *(요소곱) 구분.