반응형

1. 다항 회귀란 무엇인가
다항 회귀(Polynomial Regression)는 독립변수를 다항식 형태로 확장한 뒤 선형회귀 모델을 적용하는 방식입니다.
핵심적으로 다음 두 가지를 반드시 구분해야 합니다.
- 다항 회귀는 비선형 회귀처럼 보이지만 선형 회귀 모델입니다.
- 회귀에서 말하는 선형/비선형 기준은
👉 독립변수가 아니라 회귀 계수(가중치)가 선형인지 여부입니다.
즉,
y=w0+w1x+w2x2+w3x3y = w_0 + w_1x + w_2x^2 + w_3x^3
위 식은 x는 비선형이지만, w는 선형이므로 선형 회귀 모델입니다.
2. PolynomialFeatures 클래스 개요
PolynomialFeatures는 원본 단항 피처를 다항 피처로 확장하는 전처리 클래스입니다.
- 차수(degree)에 따라 새로운 피처를 생성
- 모델 자체가 아니라 Feature Engineering 도구
- 확장된 피처에 LinearRegression을 적용하면 다항 회귀 완성
3. 2차 다항 피처 변환 예제
from sklearn.preprocessing import PolynomialFeatures
import numpy as np
# 원본 입력 데이터 (2개 샘플, 2개 피처)
X = np.arange(4).reshape(2, 2)
print(f'일차 단항식 피처:\n{X}')
# degree=2 → 2차 다항식으로 확장
poly = PolynomialFeatures(degree=2)
poly_ftr = poly.fit_transform(X)
print(f'2차 다항식으로 변환된 피처:\n{poly_ftr}')

4. 직접 정의한 3차 다항식 예제
import numpy as np
# 3차 다항식을 정의한 함수
def polynomial_fun(X):
# y = 1 + 2x1 + 3x1^2 + 4x2^3
return 1 + 2*X[:, 0] + 3*(X[:, 0]**2) + 4*(X[:, 1]**3)
# 입력 데이터 생성
X = np.arange(0, 4).reshape(2, 2)
y = polynomial_fun(X)
print(f'입력 피처:\n{X}')
print(f'결정값(y):\n{y}')
이 예제는 다항 회귀가 복잡한 비선형 관계도 선형 회귀로 학습 가능함을 보여줍니다.
5. PolynomialFeatures + LinearRegression 직접 결합
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
# 3차 다항식 피처 생성
poly_ftr = PolynomialFeatures(degree=3).fit_transform(X)
# 선형 회귀 모델 학습
model = LinearRegression()
model.fit(poly_ftr, y)
print(f'회귀 계수:\n{np.round(model.coef_, 2)}')
print(f'계수 개수: {model.coef_.shape}')

해석
- 생성된 피처 수만큼 회귀 계수가 증가
- 차수가 커질수록 모델 복잡도 급격히 증가
- 과적합(overfitting) 위험 존재
6. Pipeline을 활용한 다항 회귀 (권장 방식)
실무에서는 Pipeline을 사용하는 것이 가장 안전하고 깔끔합니다.
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import numpy as np
def polynomial_fun(X):
return 1 + 2*X[:, 0] + 3*(X[:, 0]**2) + 4*(X[:, 1]**3)
# 파이프라인 구성
model = Pipeline([
('poly', PolynomialFeatures(degree=3)), # 다항 피처 생성
('linear', LinearRegression()) # 선형 회귀 학습
])
X = np.arange(4).reshape(2, 2)
y = polynomial_fun(X)
model.fit(X, y)
print(f'최종 회귀 계수:\n{np.round(model.named_steps["linear"].coef_, 2)}')

Pipeline 사용 이유
- 전처리 + 모델을 하나의 객체로 관리
- 데이터 누수(Data Leakage) 방지
- 교차검증, GridSearch에 매우 유리
7. 다항 회귀 사용 시 주의사항
- 차수가 커질수록 피처 수 폭발
- 고차 다항식 → 과적합 위험 증가
- 반드시 다음과 함께 사용 권장
- 규제 모델(Ridge, Lasso)
- 교차 검증(CV)
- Feature Scaling
마무리 요약
- 다항 회귀는 선형 회귀의 확장
- 비선형 패턴을 선형 모델로 학습 가능
- 핵심은 PolynomialFeatures + LinearRegression
- 실무에서는 Pipeline 사용이 표준
반응형
'Programming' 카테고리의 다른 글
| 다항 회귀를 이용한 과소적합과 과적합 이해 (0) | 2026.01.05 |
|---|---|
| 다항 회귀(Polynomial Regression)를 이용한 보스턴 주택가격 예측 (1) | 2026.01.05 |
| LinearRegression 클래스와 보스턴 주택 가격 예측 실습 (0) | 2026.01.05 |
| LinearRegression 클래스와 선형 회귀 평가 지표 정리 (0) | 2026.01.02 |
| 경사하강법(Gradient Descent) 이해하기 – 선형 회귀 실습으로 개념 완전 정리 (0) | 2026.01.02 |