[python] SymPy를 사용하여 다항회귀 피팅하기

이번 포스트에서는 SymPy를 사용하여 다항회귀 모델을 피팅하는 방법에 대해 알아보겠습니다. 다항회귀는 입력 변수들 사이의 비선형 관계를 모델링하기 위해 사용되는 통계적 기법입니다.

SymPy란?

SymPy는 파이썬에서 사용되는 심볼릭 수학 라이브러리로, 심볼릭 연산을 지원하여 대수적인 계산과 수학적인 표현을 가능하게 해줍니다. 이를 통해 수학적인 문제를 해결하고, 수학적인 식을 다룰 수 있습니다.

다항식 생성하기

먼저, SymPy를 사용하여 다항식을 생성해보겠습니다. 아래의 코드를 참고하세요:

import sympy as sp

x = sp.symbols('x')
polynomial = 2 * x**3 + 3 * x**2 + 4 * x + 5

print(polynomial)

위 코드에서 sp.symbols를 사용하여 x를 심볼로 지정하고, polynomial 변수에 다항식을 정의합니다. 그리고 print 함수를 사용하여 다항식을 출력합니다.

다항회귀 모델 피팅하기

이제 다항회귀 모델을 피팅해보겠습니다. 예를 들어, 다음과 같은 데이터셋을 가지고 있는 상황을 가정해봅시다:

x y
1 3
2 5
3 7
4 9
5 11

이 데이터셋을 사용하여 다항회귀를 피팅하는 코드는 다음과 같습니다:

import sympy as sp
import numpy as np

x = sp.symbols('x')
y = sp.symbols('y')
n = 3  # 다항식 차수

# 데이터셋
data = np.array([[1, 3],
                 [2, 5],
                 [3, 7],
                 [4, 9],
                 [5, 11]])

# 다항식 생성
polynomial = 0
for i in range(n+1):
    polynomial += sp.symbols(f'a{i}') * x**i

# 다항회귀 모델 피팅
equations = [polynomial.subs(x, xi) - yi for xi, yi in data]
coefficients = sp.solve(equations, [sp.symbols(f'a{i}') for i in range(n+1)])

# 결과 출력
print(coefficients)

위 코드에서 n을 다항식의 차수로 설정하고, data 변수에 데이터셋을 정의합니다. 그리고 polynomial 변수를 생성하여 다항식을 정의합니다. 이후 equations 변수에 polynomial을 데이터셋의 각 점에 맞게 대입한 방정식을 정의합니다. sp.solve 함수를 사용하여 방정식을 풀어 다항회귀 모델의 계수를 구합니다. 마지막으로, coefficients를 출력하여 계수를 확인할 수 있습니다.

요약

이번 포스트에서는 SymPy를 사용하여 다항회귀 모델을 피팅하는 방법에 대해 알아보았습니다. SymPy는 파이썬에서 심볼릭 연산을 지원하여 수학적인 문제를 해결하고, 다항식을 다룰 수 있도록 도와줍니다. 다항회귀 모델은 비선형 관계 모델링을 위해 사용되며, 데이터셋을 통해 적합한 모델의 계수를 찾을 수 있습니다.

참고 문서: