# 제 4장: 선형 대수의 응용

## 4.1 선형 방정식 시스템

선형 대수의 주요 응용 중 하나는 선형 방정식 시스템을 푸는 것이다. 선형 방정식 시스템은 다음과 같은 형태를 갖는다:

$$
\mathbf{A} \mathbf{x} = \mathbf{b}
$$

여기서:

* $ \mathbf{A} $는 계수 행렬이다.
* $ \mathbf{x} $는 미지수 벡터이다.
* $ \mathbf{b} $는 상수 벡터이다.

선형 방정식 시스템을 푸는 방법에는 여러 가지가 있다. 가장 일반적인 방법으로는 가우스 소거법, LU 분해, 그리고 역행렬을 사용하는 방법이 있다.

### 4.1.1 가우스 소거법 (Gaussian Elimination)

가우스 소거법은 선형 방정식 시스템을 해결하기 위한 절차로, 행렬을 상삼각 행렬로 변환하여 해를 구한다. 이 방법은 두 단계로 나누어진다:

1. **전진 소거**: 계수 행렬을 상삼각 행렬로 변환한다.
2. **후진 대입**: 상삼각 행렬에서 해를 구한다.

### 4.1.2 LU 분해 (LU Decomposition)

LU 분해는 행렬 $ \mathbf{A} $를 두 개의 행렬 $ \mathbf{L} $ (하삼각 행렬)과 $ \mathbf{U} $ (상삼각 행렬)로 분해하는 방법이다:

$$
\mathbf{A} = \mathbf{L} \mathbf{U}
$$

LU 분해를 사용하면, 시스템 $ \mathbf{A} \mathbf{x} = \mathbf{b} $를 두 개의 간단한 시스템으로 나누어 해결할 수 있다.

### 4.1.3 역행렬을 이용한 방법

행렬 $ \mathbf{A} $가 정방 행렬이고 역행렬이 존재한다면, 시스템의 해는 다음과 같이 구할 수 있다:

$$
\mathbf{x} = \mathbf{A}^{-1} \mathbf{b}
$$

## 4.2 선형 회귀 분석

선형 회귀 분석은 데이터에서 선형 관계를 모델링하는 통계적 방법이다. 주어진 데이터 집합에서 가장 적합한 선형 모델을 찾는 것이 목표이다.

선형 회귀 모델은 다음과 같은 형태를 갖는다:

$$
\mathbf{y} = \mathbf{X} \boldsymbol{\beta} + \mathbf{\epsilon}
$$

여기서:

* $ \mathbf{y} $는 종속 변수 벡터이다.
* $ \mathbf{X} $는 독립 변수 행렬이다.
* $ \boldsymbol{\beta} $는 회귀 계수 벡터이다.
* $ \mathbf{\epsilon} $은 오차 항이다.

최소 제곱법(Least Squares Method)을 사용하여 $ \boldsymbol{\beta} $를 추정할 수 있다. 이는 다음과 같은 문제를 푸는 것이다:

$$
\min\_{\boldsymbol{\beta}} | \mathbf{y} - \mathbf{X} \boldsymbol{\beta} |^2
$$

이 문제의 해는 다음과 같은 정규 방정식(Normal Equation)을 통해 구할 수 있다:

$$
\mathbf{X}^T \mathbf{X} \boldsymbol{\beta} = \mathbf{X}^T \mathbf{y}
$$

## 4.3 데이터 분석 및 차원 축소

### 4.3.1 주성분 분석 (PCA)

주성분 분석(PCA)은 고차원 데이터를 저차원으로 변환하여 주요 특성을 추출하는 방법이다. PCA는 데이터의 분산을 최대화하는 방향으로 새로운 축을 정의하여 차원을 축소한다.

PCA는 다음과 같은 절차로 수행된다:

1. 데이터의 공분산 행렬을 계산한다.
2. 공분산 행렬의 고유값과 고유벡터를 계산한다.
3. 고유값이 큰 순서대로 주요 성분을 선택한다.
4. 원본 데이터를 주요 성분 공간으로 투영한다.

### 4.3.2 특잇값 분해 (SVD)

특잇값 분해(Singular Value Decomposition, SVD)는 행렬을 세 개의 행렬로 분해하는 방법이다:

$$
\mathbf{A} = \mathbf{U} \mathbf{\Sigma} \mathbf{V}^T
$$

여기서:

* $ \mathbf{U} $는 좌측 특이 벡터 행렬이다.
* $ \mathbf{\Sigma} $는 대각선에 특잇값이 있는 대각 행렬이다.
* $ \mathbf{V} $는 우측 특이 벡터 행렬이다.

SVD는 데이터 압축, 잡음 제거, 차원 축소 등 다양한 데이터 분석 작업에 활용된다.

## 4.4 C++ Eigen3를 이용한 선형 방정식 시스템 해결

Eigen3 라이브러리를 사용하여 선형 방정식 시스템을 해결하는 방법을 살펴보겠다.

### 4.4.1 선형 방정식 시스템 해결 예제

```cpp
#include <Eigen/Dense>
#include <iostream>

int main() {
    // 계수 행렬 정의
    Eigen::Matrix2d A;
    A << 2, 1,
         1, 2;

    // 상수 벡터 정의
    Eigen::Vector2d b(1, 1);

    // 선형 방정식 시스템 해결
    Eigen::Vector2d x = A.colPivHouseholderQr().solve(b);

    std::cout << "Solution: " << x.transpose() << std::endl;

    return 0;
}
```

이 코드에서는 `colPivHouseholderQr()`를 사용하여 계수 행렬 $ \mathbf{A} $의 QR 분해를 수행하고, `solve()` 함수를 통해 방정식 시스템 $ \mathbf{A} \mathbf{x} = \mathbf{b} $의 해를 구한다.

## 4.5 요약

이 장에서는 선형 방정식 시스템의 해결 방법, 선형 회귀 분석, 데이터 분석 및 차원 축소 기법을 소개하였다. 또한, Eigen3를 사용하여 이러한 작업을 수행하는 방법을 설명하였다. 다음 장에서는 선형 대수의 고급 주제, 특히 행렬의 고급 분해 및 응용에 대해 다루겠다.
