달나라 노트

Python numpy : polyfit() — 점들의 패턴에 가장 잘 맞는 다항식 계수를 추정하는 메서드 본문

Python/Python numpy

Python numpy : polyfit() — 점들의 패턴에 가장 잘 맞는 다항식 계수를 추정하는 메서드

CosmosProject 2026. 5. 14. 19:58
728x90
반응형

NumPy polyfit() — 점들의 패턴에 가장 잘 맞는 다항식 계수를 추정하는 메서드

여러 (x, y) 좌표 쌍을 받아서, 그 점들을 가장 잘 설명하는 다항식의 계수를 반환합니다.

기본 문법

numpy.polyfit(x, y, deg)
파라미터 설명
x x 좌표값들의 array
y y 좌표값들의 array
deg 다항식의 차수
반환값 계수 array. 높은 차수부터 순서대로 반환

deg에 따라 추정하는 다항식의 형태가 달라집니다.

deg=1  →  y = ax + b                     (직선)
deg=2  →  y = ax² + bx + c              (포물선)
deg=3  →  y = ax³ + bx² + cx + d        (S자 곡선)
deg=4  →  y = ax⁴ + bx³ + cx² + dx + e

"가장 잘 맞는"이 뭔 뜻인가 — 최소제곱법

점들이 완벽하게 하나의 선 위에 있는 경우는 거의 없습니다. 대신 각 점과 추정한 곡선 사이의 오차(거리)의 제곱 합이 최소가 되는 계수를 찾습니다. 이걸 최소제곱법(Least Squares)이라 합니다.

실제 y값과 추정 y값의 차이  →  오차
오차² 의 합이 가장 작아지는 계수를 선택

예시 1 — 1차 (직선 피팅)

import numpy as np

x = np.array([1, 2, 3, 4, 5])
y = np.array([2.1, 3.9, 6.2, 7.8, 10.1])
# 대략 y = 2x 패턴

coeffs = np.polyfit(x, y, deg=1)
# array([2.02, 0.02])
#         ↑      ↑
#         a      b   →  y = 2.02x + 0.02

deg=1이면 y = ax + b 형태. 반환값은 [a, b].


예시 2 — 2차 (곡선 피팅)

import numpy as np

x = np.array([1, 2, 3, 4, 5])
y = np.array([1.1, 3.9, 9.2, 15.8, 25.1])
# 대략 y = x² 패턴

coeffs = np.polyfit(x, y, deg=2)
# array([0.99, 0.01, 0.05])
#         ↑      ↑     ↑
#         a      b     c   →  y = 0.99x² + 0.01x + 0.05

deg=2이면 y = ax² + bx + c 형태. 반환값은 [a, b, c].


계수로 예측값 구하기 — np.polyval()

polyfit()이 계수를 구해줬다면, np.polyval()로 새로운 x에 대한 y를 예측할 수 있습니다.

coeffs = np.polyfit(x, y, deg=1)

# x=6일 때 예측값
np.polyval(coeffs, 6)
# 12.14

# 여러 x에 대해 한 번에
np.polyval(coeffs, [6, 7, 8])
# [12.14, 14.16, 16.18]

차수(deg) 선택 주의

deg가 너무 낮으면  →  패턴을 못 잡음 (underfitting)
deg가 너무 높으면  →  노이즈까지 외워버림 (overfitting)
# 점이 5개인데 deg=4로 하면
# 모든 점을 정확히 지나는 곡선이 나오지만
# 실제 패턴과는 거리가 멀어질 수 있음
일반적으로 데이터의 실제 관계를 고려해서 deg=1(선형) 또는 deg=2(2차)를 먼저 시도합니다.
728x90
반응형
Comments