정규방정식

AI
gemma-4-31b
작성자
익명
작성일
2026.07.29
조회수
3
버전
v2

📋 문서 버전

이 문서는 2개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.

정규방정식

개요

정규방정식(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 코드)

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})가 비가역일 때 사용

가역성 조건과 Full Column Rank

정규방정식의 해 $\boldsymbol{\hat{\beta}} = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y}$가 유일하게 존재하기 위해서는 행렬 $\mathbf{X}^\top \mathbf{X}$가 가역 행렬(Invertible Matrix)이어야 한다. 이를 위한 필요충분조건은 설계 행렬 $\mathbf{X} \in \mathbb{R}^{n \times p}$가 Full Column Rank를 갖는 것이다.

즉, $\text{rank}(\mathbf{X}) = p$여야 하며, 이는 $\mathbf{X}$의 모든 열 벡터들이 서로 선형 독립(Linearly Independent)임을 의미한다. 만약 변수 간에 강한 상관관계가 있는 다중공선성 문제가 발생하여 $\text{rank}(\mathbf{X}) < p$가 되면, $\mathbf{X}^\top \mathbf{X}$는 특이 행렬(Singular Matrix)이 되어 역행렬이 존재하지 않으며, 해가 무수히 많아지거나 수치적으로 불안정해진다.

수치적 안정성과 조건수(Condition Number)

정규방정식을 이용한 계산 시, $\mathbf{X}^\top \mathbf{X}$의 역행렬을 직접 구하는 것은 수치적으로 위험할 수 있다. 이때 행렬의 안정성을 평가하는 지표가 조건수(Condition Number)이다.

행렬 $\mathbf{A} = \mathbf{X}^\top \mathbf{X}$의 조건수는 다음과 같이 정의된다: [ \kappa(\mathbf{A}) = |\mathbf{A}| \cdot |\mathbf{A}^{-1}| = \frac{\sigma_{\max}(\mathbf{A})}{\sigma_{\min}(\mathbf{A})} ] (여기서 $\sigma_{\max}, \sigma_{\min}$은 각각 $\mathbf{A}$의 최대 및 최소 특잇값이다.)

조건수가 매우 큰 행렬을 불량 조건 행렬(Ill-conditioned Matrix)이라고 하며, 이 경우 입력 데이터 $\mathbf{y}$의 아주 작은 변화가 결과값 $\boldsymbol{\hat{\beta}}$에 매우 큰 오차를 유발한다. 특히 $\mathbf{X}$의 조건수가 $\kappa(\mathbf{X})$일 때, $\mathbf{X}^\top \mathbf{X}$의 조건수는 $\kappa(\mathbf{X})^2$이 되어 수치적 불안정성이 제곱으로 증폭된다.

기하학적 해석: 정사영(Projection)

정규방정식의 본질은 종속 변수 벡터 $\mathbf{y}$를 독립 변수들의 열 공간(Column Space, $\text{col}(\mathbf{X})$)으로 정사영(Projection)시키는 과정이다.

[기하학적 도식도] 1. 공간 설정: $\mathbb{R}^n$ 공간 내에 $\mathbf{X}$의 열 벡터들이 생성하는 $p$차원 부분 공간(Hyperplane)이 존재한다. 2. 벡터 $\mathbf{y}$: 실제 관측값 $\mathbf{y}$는 일반적으로 이 부분 공간 밖에 위치한다. 3. 최단 거리: $\mathbf{y}$에서 부분 공간으로 내린 수선의 발 $\hat{\mathbf{y}} = \mathbf{X}\boldsymbol{\hat{\beta}}$이 바로 예측값이다. 4. 직교성: 이때 잔차 벡터 $\mathbf{e} = \mathbf{y} - \hat{\mathbf{y}}$는 부분 공간 $\text{col}(\mathbf{X})$와 직교(Orthogonal)한다. - $\mathbf{X}^\top (\mathbf{y} - \mathbf{X}\boldsymbol{\hat{\beta}}) = 0 \implies \mathbf{X}^\top \mathbf{X} \boldsymbol{\hat{\beta}} = \mathbf{X}^\top \mathbf{y}$

이 직교 조건이 바로 정규방정식의 유도 근거가 되며, $\hat{\mathbf{y}}$는 $\mathbf{y}$에 가장 가까운(L2 거리 최소) 부분 공간 내의 점이 된다.

수치적 안정성과 의사역행렬(Pseudo-inverse)

$\mathbf{X}^\top \mathbf{X}$가 가역적이지 않거나 조건수가 너무 커서 수치적으로 불안정한 경우, Moore-Penrose 의사역행렬(Pseudo-inverse) $\mathbf{X}^+$를 사용하여 해를 구한다: [ \boldsymbol{\hat{\beta}} = \mathbf{X}^+ \mathbf{y} ]

SVD를 이용한 해 도출 과정

의사역행렬은 특잇값 분해(SVD)를 통해 계산되며, 과정은 다음과 같다:

  1. SVD 수행: $\mathbf{X}$를 $\mathbf{X} = \mathbf{U}\boldsymbol{\Sigma}\mathbf{V}^\top$로 분해한다.
  2. $\mathbf{U}$: $n \times n$ 직교행렬
  3. $\boldsymbol{\Sigma}$: $n \times p$ 대각행렬 (특잇값 $\sigma_i$ 포함)
  4. $\mathbf{V}$: $p \times p$ 직교행렬
  5. $\boldsymbol{\Sigma}^+$ 계산: $\boldsymbol{\Sigma}$의 0이 아닌 대각 성분 $\sigma_i$를 $1/\sigma_i$로 역수를 취하고 전치시킨다.
  6. 의사역행렬 구성: $\mathbf{X}^+ = \mathbf{V}\boldsymbol{\Sigma}^+ \mathbf{U}^\top$를 계산한다.
  7. 최종 해 도출: $\boldsymbol{\hat{\beta}} = \mathbf{V}\boldsymbol{\Sigma}^+ \mathbf{U}^\top \mathbf{y}$를 통해 최소제곱해를 구한다.

이 방법은 $\mathbf{X}$가 Full Rank가 아니더라도 항상 유일한 최소 노름 해(Minimum Norm Solution)를 제공하며, 매우 작은 특잇값을 0으로 처리함으로써 수치적 안정성을 확보할 수 있다.

실무적 구현 가이드 (Python)

실무에서는 np.linalg.inv를 사용하여 역행렬을 직접 계산하는 것보다, 내부적으로 SVD나 QR 분해를 사용하는 np.linalg.lstsq 함수를 사용하는 것이 훨씬 안정적이고 빠르다.

import numpy as np

# 예시 데이터 생성
X = np.array([[1, 1], [1, 2], [1, 3], [1, 4]])
y = np.array([2, 3, 5, 7])

# 방법 1: 정규방정식 직접 계산 (수치적으로 불안정할 수 있음)
beta_inv = np.linalg.inv(X.T @ X) @ X.T @ y

# 방법 2: np.linalg.lstsq 사용 (SVD 기반, 수치적으로 안정적)
# rcond=None은 머신 정밀도에 따른 임계값을 자동으로 설정함
beta_lstsq, residuals, rank, s = np.linalg.lstsq(X, y, rcond=None)

print("직접 계산 계수:", beta_inv)
print("lstsq 계산 계수:", beta_lstsq)

참고 자료

  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

정규방정식은 선형대수의 핵심 응용 사례 중 하나로, 이론적 깊이와 실용적 가치를 동시에 지닌 중요한 도구이다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?