다운로드
작성자: admin 작성일시: 2016-07-21 17:37:12 조회수: 2906 다운로드: 226
카테고리: 기초 수학 태그목록:

데이터 보간

보간(interpolation)과 회귀(regression)는 모두 주어진 입력(x)과 출력(y) 데이터를 기반으로 새로운 입력에 대한 출력을 생성할 수 있는 데이터 모형을 만드는 방법이지만 다음과 같은 차이가 있다.

  • 보간: 기존의 데이터는 정확한 데이터라고 가정하고 기존에 주어지지 않은 입력 데이터에 대해 출력을 계산
  • 회귀: 기존의 데이터가 오차를 포함하는 부정확한 데이터라고 가정하고 출력과 입력의 관계를 추가적으로 가정

파이썬의 보간 명령

SciPy 패키지의 interpolation 서브패키지는 1차원 스플라인 보간(spline interpolation)을 위한 다음과 같은 명령을 제공한다.

  • splrep 명령: 스플라인 보간 모형(representation) 생성
  • splev 명령: 만들어진 스플라인 보간 모형을 이용하여 새로운 x 값에 대해 y값 계산 (evaluation)
In:
import scipy.interpolate as spi
In:
x = np.linspace(-2 * np.pi, 2 * np.pi, 25)
In:
def f(x):
    return np.sin(x) + 0.5 * x
In:
ipo = spi.splrep(x, f(x), k=1)
In:
ipo
Out:
(array([-6.28318531, -6.28318531, -5.75958653, -5.23598776, -4.71238898,
        -4.1887902 , -3.66519143, -3.14159265, -2.61799388, -2.0943951 ,
        -1.57079633, -1.04719755, -0.52359878,  0.        ,  0.52359878,
         1.04719755,  1.57079633,  2.0943951 ,  2.61799388,  3.14159265,
         3.66519143,  4.1887902 ,  4.71238898,  5.23598776,  5.75958653,
         6.28318531,  6.28318531]),
 array([-3.14159265, -2.37979327, -1.75196847, -1.35619449, -1.2283697 ,
        -1.33259571, -1.57079633, -1.80899694, -1.91322295, -1.78539816,
        -1.38962418, -0.76179939,  0.        ,  0.76179939,  1.38962418,
         1.78539816,  1.91322295,  1.80899694,  1.57079633,  1.33259571,
         1.2283697 ,  1.35619449,  1.75196847,  2.37979327,  3.14159265,
         0.        ,  0.        ]),
 1)
In:
iy = spi.splev(x, ipo)
In:
plt.plot(x, f(x), 'b', label='f(x)')
plt.plot(x, iy, 'r.', label='interpolation')
plt.legend(loc=0)
plt.grid(True)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.show()
In:
xd = np.linspace(1.0, 3.0, 50)
iyd = spi.splev(xd, ipo)
In:
plt.plot(xd, f(xd), 'b', label='f(x)')
plt.plot(xd, iyd, 'r.', label='interpolation')
plt.legend(loc=0)
plt.grid(True)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.show()
In:
ipo = spi.splrep(x, f(x), k=3)
iyd = spi.splev(xd, ipo)
In:
plt.plot(xd, f(xd), 'b', label='f(x)')
plt.plot(xd, iyd, 'r.', label='interpolation')
plt.legend(loc=0)
plt.grid(True)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.show()

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!