MIT 18.06 Linear Algebra — 코스 전체 개요

Gilbert Strang의 선형대수학: 왜 배우는가, 무엇을 다루는가, 어떻게 연결되는가

Gilbert Strang(MIT)의 선형대수학 강의 전체 구조와 핵심 질문을 정리한다. 벡터에서 시작해 행렬·부분공간·직교성·행렬식·고유값·SVD로 이어지는 흐름을 조망하고, 각 장이 머신러닝·딥러닝·통계학에서 어떤 역할을 하는지 연결한다.

Math
Linear Algebra
저자

Kwangmin Kim

공개

2026년 04월 08일

1 이 시리즈에 대하여

이 블로그 시리즈는 Gilbert Strang 교수(MIT)의 Introduction to Linear Algebra (4th Ed.)MIT 18.06 강의를 기반으로, 선형대수학의 핵심 개념을 데이터 사이언스·머신러닝 관점에서 재구성한다.

Strang의 강의가 특별한 이유는 하나이다:

“선형대수학은 추상적 공리 체계가 아니라 Ax = b 라는 구체적 문제에서 시작한다.”

고전적 교재들이 벡터공간 공리부터 출발하는 반면, Strang은 벡터 → 행렬 → 연립방정식 → 부분공간이라는 구체적 순서로 직관을 먼저 쌓는다. 이 방향이 데이터 사이언스 실무자에게 훨씬 유용하다.


2 선형대수학이란 무엇인가

선형대수학은 두 연산 위에 세워진다.

\[\mathbf{v} + \mathbf{w} \quad \text{(벡터 덧셈)}, \qquad c\mathbf{v} \quad \text{(스칼라 곱)}\]

이 두 연산의 조합 \(c_1\mathbf{v}_1 + c_2\mathbf{v}_2 + \cdots + c_n\mathbf{v}_n\)선형결합(linear combination)이라 한다. 선형대수학 전체는 이 선형결합이 만드는 구조를 연구하는 학문이다.

선형대수학이 필요한 이유는 단순하다. 현실의 데이터가 벡터이고, 현실의 문제가 연립방정식이기 때문이다. 이미지는 픽셀 값의 벡터이고, 추천 알고리즘은 사용자-아이템 행렬을 분해하며, 신경망의 각 레이어는 행렬 곱이다. 선형대수는 이 모든 것을 통일된 언어로 다루는 도구이다. 그 언어가 바로 선형결합이다.

2.1 선형대수학이 답하는 핵심 질문들

질문 선형대수 언어 관련 장
벡터들을 어떻게 조합하는가? 선형결합, span Ch.1
연립방정식 \(A\mathbf{x} = \mathbf{b}\) 의 해를 어떻게 구하는가? 소거법, LU 분해 Ch.2
선형결합이 만드는 공간은? 벡터공간, 부분공간, 차원, 기저 Ch.3
해가 없을 때 “가장 가까운” 해는? 직교 투영, 최소제곱법 Ch.4
행렬이 가역인가? 행렬식 Ch.5
행렬의 고유한 방향은? 고유값·고유벡터, 대각화 Ch.6
행렬의 “건강 상태”와 최적 분해는? 양정치·SVD Ch.7

이 질문들이 Strang 교수의 10개 챕터를 관통한다.


3 코스 구조 로드맵

Ch.1 벡터 (Introduction to Vectors)
  └── 선형결합, 내적, 길이, 코사인, 행렬
      │
      ▼
Ch.2 연립방정식 (Solving Linear Equations)
  └── Ax = b, 소거법, LU 분해, 역행렬
      │
      ▼
Ch.3 벡터 공간 (Vector Spaces and Subspaces)
  └── 열공간, 영공간, 기저, 차원, 랭크
      │
      ▼
Ch.4 직교성 (Orthogonality)
  └── 직교 보공간, 투영, 최소제곱법, Gram-Schmidt, QR
      │
      ▼
Ch.5 행렬식 (Determinants)
  └── 성질, 공식, Cramer 법칙, 부피
      │
      ▼
Ch.6 고유값과 고유벡터 (Eigenvalues and Eigenvectors)
  └── 대각화, 미분방정식, 마르코프 행렬, 대칭행렬
      │
      ▼
Ch.7 양정치와 SVD (Symmetric Matrices and Positive Definiteness)
  └── 이차형식, 양정치 판별, SVD, 의사역행렬

각 단계는 이전 단계의 언어로 표현된다. Ch.4의 직교 투영은 Ch.3의 부분공간 위에, Ch.6의 고유값은 Ch.2의 행렬 연산 위에 세워진다.


4 각 장의 핵심 아이디어

4.1 Ch.1 — 벡터 (pp. 1–30)

핵심 연산: 벡터 덧셈 + 스칼라 곱 = 선형결합

벡터는 단순한 숫자 목록이 아니다. 방향과 크기를 동시에 표현하는 수학적 객체이다. 두 연산을 정의하는 순간, 이후 모든 개념이 따라온다.

이 챕터가 필요한 이유: 선형결합이 없다면 고차원 공간을 표현하는 언어 자체가 없다. 100만 픽셀짜리 이미지도, 5만 단어짜리 문서도, 수치화하면 모두 벡터이다. 1000차원 벡터를 다루는 것이 2차원 벡터를 다루는 것과 수학적으로 완전히 같은 구조를 따른다 — 그것이 선형성의 힘이다.

Ch.1의 세 가지 핵심 개념
  1. 선형결합 \(c\mathbf{v} + d\mathbf{w}\): 두 연산의 조합. 선형대수의 심장
  2. 내적 \(\mathbf{v} \cdot \mathbf{w} = \sum v_i w_i\): 각도와 직교성을 포착하는 스칼라 연산
  3. 행렬 \(A\mathbf{x} = \text{열들의 선형결합}\): 선형결합을 행렬-벡터 곱으로 표현

ML 연결: 신경망의 각 레이어 출력 \(\mathbf{z} = W\mathbf{x} + \mathbf{b}\) 는 선형결합이다. 코사인 유사도는 내적을 정규화한 것이다. Transformer의 Attention은 Query-Key 내적이다.

4.2 Ch.2 — 연립방정식 (pp. 31–120)

핵심 문제: \(A\mathbf{x} = \mathbf{b}\) 를 체계적으로 풀기

이 챕터가 필요한 이유: 역행렬 \(A^{-1}\) 을 직접 구하면 \(\mathbf{b}\) 가 바뀔 때마다 \(O(n^3)\) 연산을 반복해야 한다. LU 분해는 \(A\) 를 한 번만 분해하고, 다른 \(\mathbf{b}\) 에 대해서는 \(O(n^2)\) 으로 재사용한다. NumPy의 np.linalg.solve가 내부적으로 역행렬이 아닌 LU를 사용하는 이유가 여기 있다.

소거법(Gaussian elimination)은 행렬을 행 단위로 변환하여 상삼각 행렬로 만든다. 이것이 \(A = LU\) 분해이다. L은 소거 과정을, U는 상삼각 형태를 기록한다.

Ch.2의 세 가지 핵심 개념
  1. 소거법: \(A \to U\) (상삼각 행렬), 피벗이 소거의 기준
  2. LU 분해: \(A = LU\), 소거법을 행렬 분해로 표현
  3. 역행렬: \(A^{-1}\) 이 존재하면 \(\mathbf{x} = A^{-1}\mathbf{b}\) 로 해를 구할 수 있다

ML 연결: LU 분해는 선형 회귀의 정규방정식 \((A^\top A)\hat{\mathbf{x}} = A^\top \mathbf{b}\) 를 푸는 데 사용된다. 가우스 소거법은 수치 최적화의 기반이다.

4.3 Ch.3 — 벡터 공간 (pp. 121–195)

핵심 질문: 선형결합이 만드는 집합의 구조는 무엇인가?

이 챕터가 필요한 이유: \(A\mathbf{x} = \mathbf{b}\) 의 해가 존재하는 조건이 ” \(\mathbf{b} \in C(A)\) “로 한 줄에 정리되기 때문이다. 해가 없는 경우(데이터 피팅), 해가 무한히 많은 경우(과소 결정 시스템), 해가 유일한 경우가 모두 부분공간의 언어로 명확히 구분된다. 이 구조를 이해하지 못하면 최소제곱법이 왜 성립하는지 설명할 수 없다.

\(A\) 의 열들의 모든 선형결합이 열 공간(Column Space) \(C(A)\) 이다. \(A\mathbf{x} = \mathbf{0}\) 의 해 집합이 영 공간(Null Space) \(N(A)\) 이다. 이 두 부분공간이 \(A\) 의 핵심 구조를 드러낸다.

Ch.3의 네 개 근본 부분공간

행렬 \(A\) (\(m \times n\)) 에는 네 개의 근본 부분공간이 있다:

  • \(C(A)\): 열 공간 (\(\mathbb{R}^m\) 의 부분공간, 차원 = 랭크 \(r\))
  • \(N(A)\): 영 공간 (\(\mathbb{R}^n\) 의 부분공간, 차원 = \(n - r\))
  • \(C(A^\top)\): 행 공간 (\(\mathbb{R}^n\) 의 부분공간, 차원 = \(r\))
  • \(N(A^\top)\): 좌 영 공간 (\(\mathbb{R}^m\) 의 부분공간, 차원 = \(m - r\))

ML 연결: 랭크(rank)는 데이터의 “실제 차원”이다. 주성분 분석(PCA)은 데이터 행렬의 열 공간 중 분산이 가장 큰 방향을 찾는다. 다중공선성(multicollinearity)은 설계 행렬의 열들이 선형 종속임을 의미한다.

4.4 Ch.4 — 직교성 (pp. 196–244)

핵심 아이디어: 내적 = 0 이면 수직. 수직이 최적화를 단순하게 만든다.

이 챕터가 필요한 이유이자 핵심 직관: \(\mathbf{b}\) 를 열 공간 위로 투영하면 오차 \(\mathbf{b} - \hat{\mathbf{b}}\) 가 열 공간에 수직이 된다. 이 수직 조건이 편미분 = 0 조건과 동치이므로, 복잡한 미적분 계산이 기하학적 조건 하나로 대체된다. 정규방정식 \(A^\top A \hat{\mathbf{x}} = A^\top \mathbf{b}\) 는 이 직교 조건의 대수적 표현이다. 수직 = 최적이라는 원리가 선형 회귀, QR 분해, 신호처리 등 모든 최적화의 기하학적 기반이 된다.

행 공간과 영 공간은 서로 직교한다 ( \(C(A^\top) \perp N(A)\) ). 열 공간과 좌 영 공간도 직교한다 ( \(C(A) \perp N(A^\top)\) ). 이것이 선형대수의 기본정리 Part 2 이다.

Ch.4의 세 가지 핵심 개념
  1. 직교 투영: \(\hat{\mathbf{b}} = A(A^\top A)^{-1}A^\top \mathbf{b}\)\(\mathbf{b}\) 를 열 공간 위로 정사영
  2. 최소제곱법: \(A\mathbf{x} = \mathbf{b}\) 의 해가 없을 때 \(\|A\mathbf{x} - \mathbf{b}\|^2\) 를 최소화하는 \(\hat{\mathbf{x}}\)
  3. Gram-Schmidt: 독립 벡터 집합에서 직교정규 기저 구성 → QR 분해

ML 연결: 최소제곱 선형 회귀의 해 \(\hat{\boldsymbol{\beta}} = (X^\top X)^{-1} X^\top \mathbf{y}\) 가 Ch.4의 직접 결과이다. 정규화(regularization)는 투영의 안정성을 높이는 기법이다. 그람-슈미트는 QR 분해의 수치적 구현이다.

4.5 Ch.5 — 행렬식 (pp. 245–283)

핵심 질문: 행렬이 가역인가? 부피는 어떻게 변하는가?

이 챕터가 필요한 이유: 가역성 판별을 위해 \(A^{-1}\) 을 직접 계산하는 것은 비효율적이다. 행렬식은 단 하나의 수로 가역 여부를 즉시 판단한다. 기하학적으로는 행렬이 부피를 얼마나 늘이거나 줄이는지를 측정한다 — 2D에서 두 열벡터가 이루는 평행사변형의 넓이가 \(|\det(A)|\) 이다. 이 넓이가 0이 되는 순간(두 벡터가 같은 직선 위에 놓이는 순간)이 바로 행렬이 “차원을 압축”하여 가역이 아닌 순간이다.

행렬식(determinant)은 하나의 수로 행렬의 가역성을 판별한다. det \((A) \neq 0\) 이면 가역, \(= 0\) 이면 특이(singular)이다.

det의 세 가지 핵심 성질
  1. \(\det(I) = 1\) (단위행렬의 행렬식은 1)
  2. 행 교환 시 부호 변경
  3. 각 행에 대해 선형

행렬식은 이 세 성질에서 모든 공식을 유도한다. 기하학적으로는 단위 정육면체가 \(A\) 에 의해 변환될 때 부피 비율이다.

ML 연결: 행렬식이 0에 가까우면 수치적으로 불안정하다(ill-conditioned). 가우시안 분포의 정규화 상수 \((2\pi)^{n/2}|\Sigma|^{1/2}\) 에 공분산 행렬의 행렬식이 등장한다.

4.6 Ch.6 — 고유값과 고유벡터 (pp. 284–375)

핵심 아이디어: 행렬 \(A\) 의 “고유한 방향”이란?

\(A\mathbf{x} = \lambda\mathbf{x}\) 를 만족하는 방향 \(\mathbf{x}\) (고유벡터)와 스케일 \(\lambda\) (고유값). 고유벡터 방향으로는 행렬이 스칼라 곱처럼 단순하게 작동한다.

이것이 왜 강력한가: 임의의 벡터를 고유벡터들의 합으로 분해하면, \(A^k\) 의 효과를 \(\lambda^k\) 의 배수 합으로 분석할 수 있다. \(|\lambda| > 1\) 이면 그 방향이 폭발하고, \(|\lambda| < 1\) 이면 수렴한다. 반복 행렬 곱이 어떻게 수렴하는지 — PageRank, 마르코프 체인, 신경망의 그래디언트 소실/폭발 — 가 모두 고유값의 크기로 설명된다.

Ch.6의 핵심 결과
  • 대각화: \(A = S\Lambda S^{-1}\)\(A^k = S\Lambda^k S^{-1}\)
  • 대칭행렬: \(A = Q\Lambda Q^\top\) (고유벡터가 직교)
  • 안정성: \(|\lambda| < 1\) 이면 반복 적용 시 수렴

ML 연결: PCA는 공분산 행렬의 고유값 분해이다. 페이지랭크(PageRank)는 전이 행렬의 고유벡터이다. 그래프 신경망(GNN)은 라플라시안 행렬의 고유벡터를 기저로 사용한다. 신경망 학습 수렴 속도는 헤시안(Hessian)의 고유값 분포에 따라 결정된다.

4.7 Ch.7 — 양정치 행렬과 SVD (pp. 376+)

핵심 아이디어: 행렬의 가장 자연스러운 분해란?

고유값 분해 \(A = S\Lambda S^{-1}\) 는 정방행렬에만 적용되고, 대칭행렬이 아니면 고유벡터가 직교하지 않는다. SVD는 이 두 제약을 모두 해제한다. 직사각형 행렬( \(m \neq n\) )에도 적용되고, \(U\)\(V\) 모두 직교행렬이다. “가장 자연스럽다”는 것은 어떤 행렬이든 — 정방·직사각형, 대칭·비대칭, 가역·특이 — 예외 없이 \(U\Sigma V^\top\) 으로 분해된다는 뜻이다. SVD는 선형대수의 완성이라 할 수 있다.

SVD(특이값 분해)는 모든 행렬 \(A\) (\(m \times n\))를 다음과 같이 분해한다:

\[A = U \Sigma V^\top\]

  • \(U\): \(m \times m\) 직교행렬 (열 공간의 직교기저)
  • \(\Sigma\): \(m \times n\) 대각행렬 (특이값 \(\sigma_1 \geq \sigma_2 \geq \cdots \geq 0\))
  • \(V\): \(n \times n\) 직교행렬 (행 공간의 직교기저)
SVD가 답하는 질문들
  • 행렬의 랭크는? → 영이 아닌 특이값의 수
  • 최소 오차로 랭크- \(k\) 근사는? → 처음 \(k\) 개 특이값만 유지
  • 의사역행렬 \(A^+\) 는? → \(V \Sigma^+ U^\top\)

ML 연결: SVD는 추천 시스템의 행렬 분해(collaborative filtering), 이미지 압축(처음 \(k\) 개 특이값만 유지), 텍스트 분석의 LSA(Latent Semantic Analysis), PCA의 수치 구현에 모두 사용된다.


5 선형대수의 기본정리 (Fundamental Theorem of Linear Algebra)

Strang이 “선형대수의 기본정리”라고 부르는 것은 두 부분으로 이루어진다:

Part 1: 네 부분공간의 차원 관계

\[\dim C(A) = \dim C(A^\top) = r, \quad \dim N(A) = n - r, \quad \dim N(A^\top) = m - r\]

Part 2: 직교 관계

\[C(A^\top) \perp N(A) \quad \text{(in } \mathbb{R}^n\text{)}, \qquad C(A) \perp N(A^\top) \quad \text{(in } \mathbb{R}^m\text{)}\]

이 두 사실이 최소제곱법, 투영, SVD를 모두 연결한다.


6 ML/DL 응용 전체 지도

ML/DL 개념 선형대수 기반 관련 장
신경망 포워드 패스 \(\mathbf{z} = W\mathbf{x} + \mathbf{b}\) (선형결합) Ch.1
역전파 행렬 미분 연쇄 법칙 = 행렬 곱 Ch.2
선형 회귀 \(\hat{\boldsymbol{\beta}} = (X^\top X)^{-1} X^\top \mathbf{y}\) Ch.4
주성분 분석 (PCA) 공분산 행렬 고유값 분해 Ch.6
추천 시스템 행렬 SVD 분해 Ch.7
Attention 메커니즘 \(\text{softmax}(QK^\top / \sqrt{d_k})V\) Ch.1, Ch.7
그래프 신경망 라플라시안 고유벡터 Ch.6
정규화 (L2 Regularization) 이차형식 \(\|\mathbf{w}\|^2\) Ch.7
배치 정규화 공분산 행렬 역제곱근 Ch.6, Ch.7

7 코스를 이해하는 세 가지 관점

Strang 교수가 강조하는 \(A\mathbf{x} = \mathbf{b}\) 에 대한 세 가지 관점이 전체 코스를 관통한다:

세 가지 관점

행 그림(Row Picture): 각 방정식 = 초평면. 해 = 초평면들의 교점

열 그림(Column Picture): \(A\mathbf{x}\) = \(A\) 의 열들의 선형결합. “\(\mathbf{b}\) 를 어떤 계수로 열들을 합산해서 만드는가?”

행렬 그림(Matrix Picture): \(A\) 가 벡터 \(\mathbf{x}\)작용(act on)하여 \(\mathbf{b}\) 를 만든다

왜 열 그림이 핵심인가: 100차원에서 100개의 초평면 교점을 상상하기는 불가능하다. 그러나 “어떤 선형결합인가?”라는 질문은 차원과 무관하게 유지된다. 열 공간, 랭크, 최소제곱법, 투영이 모두 이 질문에서 나온다.


8 이 블로그 시리즈 활용 가이드

8.1 시리즈 구성

파일명 패턴 내용
mit-00-* 코스 전체 개요 (이 포스트)
mit-01-1-* Ch.1 전체 요약 (선형결합·내적·행렬)
mit-01-2-* Ch.1 §1.1 — Vectors and Linear Combinations
mit-01-3-* Ch.1 §1.2 — Lengths and Dot Products
mit-02-* ~ mit-05-* Ch.2 — 소거법·LU·역행렬·치환
mit-06-* ~ mit-12-* Ch.3 — 부분공간·기저·차원
mit-13-*, mit-14-* ~ mit-17-* Ch.4 — 직교성·투영·Gram-Schmidt
mit-18-* ~ mit-20-* Ch.5 — 행렬식
mit-21-* ~ mit-25-* Ch.6 — 고유값·대각화
mit-26-* ~ mit-29-* Ch.7 — 대칭행렬·SVD

8.2 학습 경로 제안

데이터 사이언스 실무자: Ch.1 → Ch.2(LU) → Ch.3(랭크·부분공간) → Ch.4(최소제곱) → Ch.6(PCA) → Ch.7(SVD)

딥러닝 집중: Ch.1(선형결합·내적) → Ch.2(역행렬) → Ch.6(고유값) → Ch.7(양정치·SVD)

통계학 기반: Ch.1 → Ch.3(부분공간) → Ch.4(투영·최소제곱) → Ch.6(분산분석)

수학 기반 완전 학습: Ch.1 → Ch.2 → Ch.3 → Ch.4 → Ch.5 → Ch.6 → Ch.7 (순서대로)


9 왜 Strang의 접근법인가

전통적 선형대수 교재는 벡터공간 공리에서 시작한다. 이것은 수학적으로 완결되지만, 처음 배우는 사람에게는 왜 이것을 배우는지 가 불분명하다.

Strang의 접근은 다르다:

  1. 구체적 문제에서 시작한다 — “\(A\mathbf{x} = \mathbf{b}\) 를 어떻게 푸는가?”
  2. 기하학적 직관을 먼저 쌓는다 — 2D·3D에서 벡터를 그리고, 평면을 그리고, 투영을 그린다
  3. 응용과 함께 추상화한다 — 각 개념이 등장할 때 ML·통계·공학 예시를 곁들인다

그 결과 수식이 단순한 기호가 아니라 기하학적 의미를 가진 언어로 보이게 된다.


10 코드: 선형대수 핵심 연산 한눈에

import numpy as np

# ============================================
# Ch.1: 선형결합과 내적
# ============================================
v = np.array([1.0, 2.0, 3.0])
w = np.array([4.0, 5.0, 6.0])

linear_comb = 2 * v - 3 * w       # 선형결합
dot = np.dot(v, w)                 # 내적: 1*4+2*5+3*6 = 32
cos_theta = dot / (np.linalg.norm(v) * np.linalg.norm(w))  # 코사인
norm_v = np.linalg.norm(v)        # L2 노름

print(f"선형결합 2v-3w: {linear_comb}")
print(f"내적: {dot}")
print(f"코사인 유사도: {cos_theta:.4f}")

# ============================================
# Ch.2: Ax = b 풀기 (LU 분해)
# ============================================
A = np.array([[2, 1, -1],
              [-3, -1, 2],
              [-2, 1, 2]], dtype=float)
b = np.array([8, -11, -3], dtype=float)

x = np.linalg.solve(A, b)         # Ax = b 해
print(f"\nAx = b 해: {x}")         # [2, 3, -1]

# LU 분해 (scipy 사용)
from scipy.linalg import lu, lu_factor, lu_solve
P, L, U = lu(A)
print(f"피벗 행렬 P:\n{P}")
print(f"하삼각 L:\n{L}")
print(f"상삼각 U:\n{U}")

# ============================================
# Ch.3: 행렬의 랭크와 영 공간
# ============================================
A_rank = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]], dtype=float)

rank = np.linalg.matrix_rank(A_rank)
print(f"\n랭크: {rank}")           # 2 (3x3이지만 랭크 2 → 종속)

# 영 공간: Ax = 0 의 해들 (특이값이 0인 방향)
U_svd, S, Vt = np.linalg.svd(A_rank)
null_space = Vt[rank:].T           # 영 공간 기저
print(f"영 공간 기저: {null_space}")

# ============================================
# Ch.4: 최소제곱 투영
# ============================================
# 데이터 피팅: y ≈ a + bt (직선 피팅)
t = np.array([1, 2, 3, 4], dtype=float)
y = np.array([1.9, 3.1, 3.9, 5.1], dtype=float)

A_fit = np.column_stack([np.ones_like(t), t])  # 설계 행렬
# 정규방정식 A^T A x = A^T y 풀기
x_hat = np.linalg.lstsq(A_fit, y, rcond=None)[0]
a, b_coef = x_hat
print(f"\n최소제곱 직선: y = {a:.2f} + {b_coef:.2f}t")

# ============================================
# Ch.6: 고유값 분해
# ============================================
A_sym = np.array([[4, 2], [2, 3]], dtype=float)  # 대칭행렬
eigenvalues, eigenvectors = np.linalg.eigh(A_sym)  # 대칭행렬 전용
print(f"\n고유값: {eigenvalues}")
print(f"고유벡터:\n{eigenvectors}")
print(f"고유벡터 직교 확인: {eigenvectors[:,0] @ eigenvectors[:,1]:.6f}")  # ≈ 0

# ============================================
# Ch.7: SVD 분해
# ============================================
A_svd = np.array([[3, 1, 1],
                   [-1, 3, 1]], dtype=float)

U_out, S_out, Vt_out = np.linalg.svd(A_svd)
print(f"\n특이값: {S_out}")

# 랭크-1 근사 (최대 특이값만 사용)
A_approx = S_out[0] * np.outer(U_out[:, 0], Vt_out[0, :])
print(f"랭크-1 근사:\n{A_approx}")

# 재구성 오차
error = np.linalg.norm(A_svd - A_approx, 'fro')
print(f"프로베니우스 오차: {error:.4f}")

11 관련 주제

Ch.1 시리즈

Ch.2 시리즈 — 소거법

Ch.3 시리즈 — 부분공간

Ch.4 시리즈 — 직교성

Ch.6 시리즈 — 고유값

Subscribe

Enjoy this blog? Get notified of new posts by email: