정규 방정식
정규 방정식
개요
정규 방정식(Normal Equation)은 선형 회귀 분석(Linear Regression)에서 최적의 파라미터(계수)를 직접 계산하는 수학적 방법입니다. 이 방법은 반복적 최적화 알고리즘인 경사 하강법(Gradient Descent)과 달리, 행렬 연산을 통해 해를 한 번에 도출합니다. 주로 작은 데이터셋 또는 특성이 적은 경우에 사용되며, 계산 효율성을 위해 XᵀX의 역행렬이 존재해야 합니다.
수학적 유도
선형 회귀 모델의 수식
선형 회귀 모델은 다음과 같이 표현됩니다:
$$
\mathbf{y} = \mathbf{X}\boldsymbol{\theta} + \boldsymbol{\varepsilon}
$$
- $\mathbf{y}$: 타깃 변수 벡터 (크기 $m \times 1$)
- $\mathbf{X}$: 설계 행렬(Design Matrix, 크기 $m \times n$)
- $\boldsymbol{\theta}$: 파라미터 벡터 (크기 $n \times 1$)
- $\boldsymbol{\varepsilon}$: 오차 항
비용 함수 최소화
최소 제곱법(Ordinary Least Squares, OLS)의 비용 함수는 다음과 같습니다:
$$
J(\boldsymbol{\theta}) = \frac{1}{2m} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)})^2
$$
이를 행렬 형태로 변환하면:
$$
J(\boldsymbol{\theta}) = \frac{1}{2m} (\mathbf{y} - \mathbf{X}\boldsymbol{\theta})^\top (\mathbf{y} - \mathbf{X}\boldsymbol{\theta})
$$
미분 및 해의 도출
비용 함수 $J(\boldsymbol{\theta})$를 $\boldsymbol{\theta}$에 대해 미분하고 0으로 설정합니다:
$$
\nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta}) = \mathbf{X}^\top (\mathbf{X}\boldsymbol{\theta} - \mathbf{y}) = 0
$$
이를 정리하면 정규 방정식이 도출됩니다:
$$
\boldsymbol{\theta} = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y}
$$
특성과 한계
장점
- 반복 없이 직접 해 계산: 경사 하강법과 달리 학습률(learning rate) 조정이 필요 없습니다.
- 정확한 해 제공: 수치적 근사가 아닌 닫힌 형태(Closed-form)의 해를 반환합니다.
- 특성 스케일링 불필요: 모든 특성을 동일한 범위로 조정할 필요가 없습니다.
단점
- 계산 복잡도: $\mathbf{X}^\top \mathbf{X}$의 역행렬 계산은 O(n³) 시간 복잡도를 가지므로, 특성이 10,000개 이상인 경우 비효율적입니다.
- 역행렬 존재 조건: $\mathbf{X}^\top \mathbf{X}$가 비가역 행렬(Singular Matrix)일 경우 적용할 수 없습니다.
활용 사례
적합한 상황
- 작은 데이터셋: 샘플 수가 수천 개 미만인 경우.
- 특성 수가 적은 경우: 예를 들어, 특성이 10개 이하인 모델.
대안 비교
방법 | 장점 | 단점 |
---|---|---|
정규 방정식 | 반복 없음, 정확한 해 | n이 클 때 비효율적 |
경사 하강법 | 대규모 데이터 처리 가능 | 학습률 조정 필요, 반복 계산 |
관련 개념 및 대안
역행렬 대안: 의사 역행렬
$\mathbf{X}^\top \mathbf{X}$가 비가역 행렬일 경우, Moore-Penrose 의사 역행렬(Pseudoinverse)을 사용합니다:
$$
\boldsymbol{\theta} = (\mathbf{X}^\top \mathbf{X} + \lambda \mathbf{I})^{-1} \mathbf{X}^\top \mathbf{y}
$$
이는 릿지 회귀(Ridge Regression)의 핵심 개념으로, 과적합 방지에도 활용됩니다.
Python 코드 예시
import numpy as np
# 샘플 데이터 생성
X = np.array([[1, 2], [1, 3], [1, 4]]) # 편향 항(1) 포함
y = np.array([5, 7, 9])
# 정규 방정식 적용
theta = np.linalg.inv(X.T @ X) @ X.T @ y
print("추정된 파라미터 θ:", theta)
참고 자료
- Andrew Ng의 머신러닝 강의 (Coursera)
- "선형 회귀 분석", 위키백과
- "Python for Data Analysis", Wes McKinney
이 문서는 선형 회귀 모델에서 파라미터 추정을 위한 정규 방정식의 수학적 원리와 실제 활용 방법을 설명합니다. 대규모 데이터 처리에는 경사 하강법 또는 확률적 경사 하강법(SGD)을 권장합니다.
이 문서는 AI 모델(qwen-3-235b-a22b)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.