개요
정규방정식(Normal Equation)은 선형회귀(Linear Regression) 문제를 해결하기 위한 해석적(analytical) 방법 중 하나로, 최소제곱법(Least Squares Method)을 사용하여 선형 모델의 계수를 직접 계산하는 수식이다. 이 방정식은 손실 함수인 잔차 제곱합(Sum of Squared Residuals)을 최소화하는 최적의 파라미터를 행렬 연산을 통해 구할 수 있게 해준다. 정규방정식은 기울기 하강법(Gradient Descent)과 같은 반복적 최적화 방법과 달리 반복 없이 한 번의 계산으로 해를 구할 수 있다는 장점이 있다.
정규방정식은 특히 변수의 수가 많지 않고 데이터 크기가 적당할 때 유용하며, 머신러닝, 통계학, 공학 등 다양한 분야에서 활용된다.
수학적 정의
선형회귀 모델은 다음과 같은 형태로 표현된다:
[
\mathbf{y} = \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\varepsilon}
]
여기서:
- (\mathbf{y} \in \mathbb{R}^n): 관측된 종속 변수 벡터 (응답 변수)
- (\mathbf{X} \in \mathbb{R}^{n \times p}): 독립 변수(설명 변수)의 설계 행렬 (Design Matrix)
- (\boldsymbol{\beta} \in \mathbb{R}^p): 추정하고자 하는 회귀 계수 벡터
- (\boldsymbol{\varepsilon} \in \mathbb{R}^n): 오차 벡터
우리는 잔차 제곱합(Sum of Squared Residuals):
[
L(\boldsymbol{\beta}) = |\mathbf{y} - \mathbf{X}\boldsymbol{\beta}|^2 = (\mathbf{y} - \mathbf{X}\boldsymbol{\beta})^\top (\mathbf{y} - \mathbf{X}\boldsymbol{\beta})
]
를 최소화하는 (\boldsymbol{\beta})를 찾고자 한다. 이를 위해 (L(\boldsymbol{\beta}))를 (\boldsymbol{\beta})에 대해 미분하고 0으로 놓는 과정을 거치면 다음의 정규방정식을 얻는다:
[
\mathbf{X}^\top \mathbf{X} \boldsymbol{\beta} = \mathbf{X}^\top \mathbf{y}
]
이 방정식의 해는 다음과 같이 주어진다:
[
\boldsymbol{\hat{\beta}} = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y}
]
이 해는 (\mathbf{X}^\top \mathbf{X})가 가역(invertible)할 때 존재하며, 이 조건은 (\mathbf{X})의 열들이 선형 독립일 경우 만족된다.
정규방정식의 특성과 장단점
장점
- 해석적 해 제공: 반복 없이 한 번의 행렬 계산으로 최적 해를 구할 수 있음.
- 정확한 해: 수치적 오차가 적고, 해가 존재하면 정확한 최소제곱 해를 제공.
- 구현이 간단함: 행렬 연산만으로 구현 가능 (예: NumPy, MATLAB).
단점
- 계산 복잡도가 높음: (\mathbf{X}^\top \mathbf{X})의 역행렬을 계산해야 하므로, 변수 수 (p)가 클 경우 (O(p^3))의 시간 복잡도가 필요.
- 메모리 사용량 큼: 대규모 데이터셋에서는 메모리 부족 문제가 발생할 수 있음.
- (\mathbf{X}^\top \mathbf{X}) 가역성 보장 안됨: 변수 간 다중공선성(multicollinearity)이 있거나, (n < p)인 경우 역행렬이 존재하지 않음.
🔍 참고: (n)은 샘플 수, (p)는 변수(특성) 수.
정규방정식과 기울기 하강법 비교
| 항목 |
정규방정식 |
기울기 하강법 |
| 해의 형태 |
해석적 해 |
반복적 근사 해 |
| 계산 방식 |
행렬 역연산 |
반복적 업데이트 |
| 시간 복잡도 |
(O(p^3)) |
(O(knp)), (k): 반복 횟수 |
| 메모리 요구 |
높음 |
낮음 |
| 데이터 크기 적합성 |
소규모 |
대규모 |
| 다중공선성 처리 |
어려움 |
정규화로 완화 가능 |
정규화된 정규방정식 (Ridge 회귀)
다중공선성이나 과적합(overfitting) 문제를 해결하기 위해 정규방정식을 확장한 형태가 리지 회귀(Ridge Regression)이다. 이 경우 목적 함수에 L2 정규화 항이 추가된다:
[
L(\boldsymbol{\beta}) = |\mathbf{y} - \mathbf{X}\boldsymbol{\beta}|^2 + \lambda |\boldsymbol{\beta}|^2
]
이에 대한 정규방정식은 다음과 같다:
[
(\mathbf{X}^\top \mathbf{X} + \lambda \mathbf{I}) \boldsymbol{\beta} = \mathbf{X}^\top \mathbf{y}
]
해는:
[
\boldsymbol{\hat{\beta}} = (\mathbf{X}^\top \mathbf{X} + \lambda \mathbf{I})^{-1} \mathbf{X}^\top \mathbf{y}
]
여기서 (\lambda > 0)은 정규화 강도를 조절하는 하이퍼파라미터이며, (\mathbf{I})는 단위행렬이다. 이 방법은 (\mathbf{X}^\top \mathbf{X})가 특이행렬(singular matrix)일 경우에도 역행렬을 안정적으로 구할 수 있도록 해준다.
활용 예시 (Python 코드)
import numpy as np
# 예시 데이터 생성
X = np.array([[1, 1], [1, 2], [1, 3], [1, 4]]) # 절편 항 포함
y = np.array([2, 3, 5, 7])
# 정규방정식 적용
beta_hat = np.linalg.inv(X.T @ X) @ X.T @ y
print("추정된 계수:", beta_hat)
출력:
이 경우 모델은 (y = 0.5 + 1.6x) 형태의 직선이다.
관련 개념
- 최소제곱법(Least Squares)
- 행렬의 가역성(Matrix Invertibility)
- 다중공선성(Multicollinearity)
- 특잇값 분해(Singular Value Decomposition, SVD): 정규방정식의 수치적 안정성을 높이기 위한 대안
- 의사역행렬(Pseudo-inverse): (\mathbf{X}^\top \mathbf{X})가 비가역일 때 사용
참고 자료
- Strang, G. (2016). Introduction to Linear Algebra (5th ed.). Wellesley-Cambridge Press.
- Boyd, S., & Vandenberghe, L. (2018). Introduction to Applied Linear Algebra – Vectors, Matrices, and Least Squares. Cambridge University Press.
- Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer.
- NumPy Documentation - linalg.inv
정규방정식은 선형대수의 핵심 응용 사례 중 하나로, 이론적 깊이와 실용적 가치를 동시에 지닌 중요한 도구이다.
# 정규방정식
## 개요
정규방정식(Normal Equation)은 **선형회귀**(Linear Regression) 문제를 해결하기 위한 해석적(analytical) 방법 중 하나로, 최소제곱법(Least Squares Method)을 사용하여 선형 모델의 계수를 직접 계산하는 수식이다. 이 방정식은 손실 함수인 **잔차 제곱합**(Sum of Squared Residuals)을 최소화하는 최적의 파라미터를 행렬 연산을 통해 구할 수 있게 해준다. 정규방정식은 기울기 하강법(Gradient Descent)과 같은 반복적 최적화 방법과 달리 반복 없이 한 번의 계산으로 해를 구할 수 있다는 장점이 있다.
정규방정식은 특히 변수의 수가 많지 않고 데이터 크기가 적당할 때 유용하며, 머신러닝, 통계학, 공학 등 다양한 분야에서 활용된다.
---
## 수학적 정의
선형회귀 모델은 다음과 같은 형태로 표현된다:
\[
\mathbf{y} = \mathbf{X}\boldsymbol{\beta} + \boldsymbol{\varepsilon}
\]
여기서:
- \(\mathbf{y} \in \mathbb{R}^n\): 관측된 종속 변수 벡터 (응답 변수)
- \(\mathbf{X} \in \mathbb{R}^{n \times p}\): 독립 변수(설명 변수)의 설계 행렬 (Design Matrix)
- \(\boldsymbol{\beta} \in \mathbb{R}^p\): 추정하고자 하는 회귀 계수 벡터
- \(\boldsymbol{\varepsilon} \in \mathbb{R}^n\): 오차 벡터
우리는 잔차 제곱합(Sum of Squared Residuals):
\[
L(\boldsymbol{\beta}) = \|\mathbf{y} - \mathbf{X}\boldsymbol{\beta}\|^2 = (\mathbf{y} - \mathbf{X}\boldsymbol{\beta})^\top (\mathbf{y} - \mathbf{X}\boldsymbol{\beta})
\]
를 최소화하는 \(\boldsymbol{\beta}\)를 찾고자 한다. 이를 위해 \(L(\boldsymbol{\beta})\)를 \(\boldsymbol{\beta}\)에 대해 미분하고 0으로 놓는 과정을 거치면 다음의 **정규방정식**을 얻는다:
\[
\mathbf{X}^\top \mathbf{X} \boldsymbol{\beta} = \mathbf{X}^\top \mathbf{y}
\]
이 방정식의 해는 다음과 같이 주어진다:
\[
\boldsymbol{\hat{\beta}} = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y}
\]
이 해는 \(\mathbf{X}^\top \mathbf{X}\)가 **가역**(invertible)할 때 존재하며, 이 조건은 \(\mathbf{X}\)의 열들이 선형 독립일 경우 만족된다.
---
## 정규방정식의 특성과 장단점
### 장점
1. **해석적 해 제공**: 반복 없이 한 번의 행렬 계산으로 최적 해를 구할 수 있음.
2. **정확한 해**: 수치적 오차가 적고, 해가 존재하면 정확한 최소제곱 해를 제공.
3. **구현이 간단함**: 행렬 연산만으로 구현 가능 (예: NumPy, MATLAB).
### 단점
1. **계산 복잡도가 높음**: \(\mathbf{X}^\top \mathbf{X}\)의 역행렬을 계산해야 하므로, 변수 수 \(p\)가 클 경우 \(O(p^3)\)의 시간 복잡도가 필요.
2. **메모리 사용량 큼**: 대규모 데이터셋에서는 메모리 부족 문제가 발생할 수 있음.
3. \(\mathbf{X}^\top \mathbf{X}\) **가역성 보장 안됨**: 변수 간 다중공선성(multicollinearity)이 있거나, \(n < p\)인 경우 역행렬이 존재하지 않음.
> 🔍 **참고**: \(n\)은 샘플 수, \(p\)는 변수(특성) 수.
---
## 정규방정식과 기울기 하강법 비교
| 항목 | 정규방정식 | 기울기 하강법 |
|------|------------|----------------|
| 해의 형태 | 해석적 해 | 반복적 근사 해 |
| 계산 방식 | 행렬 역연산 | 반복적 업데이트 |
| 시간 복잡도 | \(O(p^3)\) | \(O(knp)\), \(k\): 반복 횟수 |
| 메모리 요구 | 높음 | 낮음 |
| 데이터 크기 적합성 | 소규모 | 대규모 |
| 다중공선성 처리 | 어려움 | 정규화로 완화 가능 |
---
## 정규화된 정규방정식 (Ridge 회귀)
다중공선성이나 과적합(overfitting) 문제를 해결하기 위해 정규방정식을 확장한 형태가 **리지 회귀**(Ridge Regression)이다. 이 경우 목적 함수에 L2 정규화 항이 추가된다:
\[
L(\boldsymbol{\beta}) = \|\mathbf{y} - \mathbf{X}\boldsymbol{\beta}\|^2 + \lambda \|\boldsymbol{\beta}\|^2
\]
이에 대한 정규방정식은 다음과 같다:
\[
(\mathbf{X}^\top \mathbf{X} + \lambda \mathbf{I}) \boldsymbol{\beta} = \mathbf{X}^\top \mathbf{y}
\]
해는:
\[
\boldsymbol{\hat{\beta}} = (\mathbf{X}^\top \mathbf{X} + \lambda \mathbf{I})^{-1} \mathbf{X}^\top \mathbf{y}
\]
여기서 \(\lambda > 0\)은 정규화 강도를 조절하는 하이퍼파라미터이며, \(\mathbf{I}\)는 단위행렬이다. 이 방법은 \(\mathbf{X}^\top \mathbf{X}\)가 특이행렬(singular matrix)일 경우에도 역행렬을 안정적으로 구할 수 있도록 해준다.
---
## 활용 예시 (Python 코드)
```python
import numpy as np
# 예시 데이터 생성
X = np.array([[1, 1], [1, 2], [1, 3], [1, 4]]) # 절편 항 포함
y = np.array([2, 3, 5, 7])
# 정규방정식 적용
beta_hat = np.linalg.inv(X.T @ X) @ X.T @ y
print("추정된 계수:", beta_hat)
```
출력:
```
추정된 계수: [0.5 1.6]
```
이 경우 모델은 \(y = 0.5 + 1.6x\) 형태의 직선이다.
---
## 관련 개념
- **최소제곱법**(Least Squares)
- **행렬의 가역성**(Matrix Invertibility)
- **다중공선성**(Multicollinearity)
- **특잇값 분해**(Singular Value Decomposition, SVD): 정규방정식의 수치적 안정성을 높이기 위한 대안
- **의사역행렬**(Pseudo-inverse): \(\mathbf{X}^\top \mathbf{X}\)가 비가역일 때 사용
---
## 참고 자료
1. Strang, G. (2016). *Introduction to Linear Algebra* (5th ed.). Wellesley-Cambridge Press.
2. Boyd, S., & Vandenberghe, L. (2018). *Introduction to Applied Linear Algebra – Vectors, Matrices, and Least Squares*. Cambridge University Press.
3. Bishop, C. M. (2006). *Pattern Recognition and Machine Learning*. Springer.
4. [NumPy Documentation - linalg.inv](https://numpy.org/doc/stable/reference/generated/numpy.linalg.inv.html)
---
정규방정식은 선형대수의 핵심 응용 사례 중 하나로, 이론적 깊이와 실용적 가치를 동시에 지닌 중요한 도구이다.