Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python NumPy로 데이터에 대한 HermiteE 급수 최소제곱 적합 구하기

데이터에 대한 HermiteE(Hermite_e) 급수의 최소제곱 적합(Least Squares Fit)을 구하려면 Python NumPy에서 제공하는 hermite_e.hermfit() 메서드를 사용하면 됩니다. 이 메서드는 낮은 차수부터 높은 차수 순으로 정렬된 HermiteE 계수를 반환합니다. 만약 y가 2차원 배열이라면, y의 k번째 열에 있는 데이터에 대한 계수가 결과의 k번째 열에 위치하게 됩니다.

주요 매개변수 설명

x : M개의 샘플(데이터) 점 (x[i], y[i])의 x좌표를 나타냅니다.

y : 샘플 점들의 y좌표입니다. 동일한 x좌표를 공유하는 여러 데이터 세트는 y에 각 데이터 세트를 하나의 열로 담은 2차원 배열을 전달함으로써 한 번의 호출로 독립적으로 적합(fit)할 수 있습니다.

deg : 적합에 사용할 다항식의 차수입니다. deg가 단일 정수인 경우, deg차 항까지의 모든 항이 적합에 포함됩니다.

rcond : 적합의 상대 조건 수(relative condition number)입니다. 가장 큰 특이값에 비해 rcond보다 작은 특이값은 무시됩니다. 기본값은 len(x)*eps이며, 여기서 eps는 플랫폼 float 타입의 상대 정밀도로 대부분의 경우 약 2e-16입니다.

full : 반환 값의 성격을 결정하는 스위치입니다. False(기본값)일 때는 계수만 반환되고, True일 때는 특이값 분해(singular value decomposition)에서 얻은 진단 정보도 함께 반환됩니다.

w : 가중치입니다. None이 아닌 경우, 가중치 w[i]는 x[i] 지점에서의 제곱되지 않은 잔차 y[i] - ŷ[i]에 적용됩니다. 이상적으로는 w[i]*y[i] 곱의 오차가 모두 동일한 분산을 갖도록 가중치를 선택해야 합니다. 역분산(inverse-variance) 가중치를 사용할 때는 w[i] = 1/sigma(y[i])로 설정합니다. 기본값은 None입니다.

구현 단계

먼저 필요한 라이브러리를 임포트합니다.

import numpy as np
from numpy.polynomial import hermite_e as H

x좌표를 생성합니다.

x = np.linspace(-1,1,51)

x좌표를 출력해 확인합니다.

print("X Co-ordinate...\n",x)

y좌표를 생성합니다. 여기서는 x³ - x 함수에 무작위 노이즈를 추가했습니다.

y = x**3 - x + np.random.randn(len(x))
print("\nY Co-ordinate...\n",y)

hermite_e.hermfit() 메서드를 사용하여 데이터에 대한 HermiteE 급수의 최소제곱 적합을 구합니다.

c, stats = H.hermefit(x,y,3,full=True)
print("\nResult...\n",c)
print("\nResult...\n",stats)

전체 예제 코드

import numpy as np
from numpy.polynomial import hermite_e as H

# x좌표 생성
x = np.linspace(-1,1,51)

# x좌표 출력
print("X Co-ordinate...\n",x)

# y좌표 생성 (노이즈 포함)
y = x**3 - x + np.random.randn(len(x))
print("\nY Co-ordinate...\n",y)

# HermiteE 급수의 최소제곱 적합 수행
c, stats = H.hermefit(x,y,3,full=True)

print("\nResult...\n",c)

print("\nResult...\n",stats)

실행 결과

X Co-ordinate...
  [-1.   -0.96 -0.92 -0.88 -0.84 -0.8  -0.76 -0.72 -0.68 -0.64 -0.6  -0.56
   -0.52 -0.48 -0.44 -0.4  -0.36 -0.32 -0.28 -0.24 -0.2  -0.16 -0.12 -0.08
   -0.04  0.    0.04  0.08  0.12  0.16  0.2   0.24  0.28  0.32  0.36  0.4
    0.44  0.48  0.52  0.56  0.6   0.64  0.68  0.72  0.76  0.8   0.84  0.88
    0.92  0.96  1. ]

Y Co-ordinate...
  [-0.54079609 -1.17586687 -0.81506394  0.8047718  -1.21403444 -1.09247646
   -0.88942226 -0.62335081  0.83995142  0.29147171  2.45859847 -0.37545462
    0.90161986 -0.7125131  -0.82978518  0.25422338  0.62073702 -1.43305948
    0.96436296  0.03069738 -1.07349677  0.55233582  1.23286374  0.37330458
    0.27239629  0.46859691 -0.1074476   1.19279741  0.15844038 -0.20424904
   -1.41467693 -0.79396457 -2.38068246 -1.24121297 -0.7877071  -1.09171002
    1.0806185  -0.94389035 -2.16201749  0.21671724 -1.15596405  0.57090598
   -0.52496753 -0.20358065 -3.72121093  1.39868958 -0.02626711 -1.51582035
   -0.12223608 -0.58368042  0.69138128]

Result...
 [-0.54892802 4.71593168 -0.40858959 2.08689429]

Result...
 [array([51.90771673]), 4, array([1.41192215, 1.37967947, 0.31061966, 0.08047256]), 1.1324274851176597e-14]

실행 결과를 보면, full=True 옵션 덕분에 적합된 계수 배열과 함께 잔차의 제곱합, 적합의 차수(rank), 특이값(singular values), 그리고 상대 조건 수(rcond) 등의 진단 정보가 함께 출력된 것을 확인할 수 있습니다. 이러한 진단 정보는 적합 품질을 평가하고 모델의 신뢰성을 판단하는 데 유용하게 활용됩니다.