Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

다항식 모델

다항식 모델 소개

곡선에 대한 다항식 모델은 다음과 같이 지정됩니다.

y=i=1n+1pixn+1i

여기서 n + 1은 다항식의 위수이고 n은 다항식의 차수이며 1 ≤ n ≤ 9입니다. 위수는 피팅할 계수의 개수를 나타내고 차수는 예측 변수의 가장 높은 거듭제곱을 나타냅니다.

본 안내서에서 다항식은 차수를 기준으로 설명합니다. 예를 들어, 3차 다항식은 다음과 같이 지정됩니다.

γ=p1x3+p2x2+p3x+p4

다항식은 간단한 경험적 모델이 필요할 때 자주 사용됩니다. 다항식 모델은 보간 또는 외삽을 위해 사용하거나 전역 피팅을 사용하여 데이터의 특징을 파악할 때 사용할 수 있습니다. 예를 들어, 0~760o 온도 범위에 있는 J형 열전쌍에 대한 온도-전압 변환은 7차 다항식으로 설명할 수 있습니다.

참고

전역 모수적 피팅이 필요하지 않으며 피팅의 유연성을 최대화하고자 하는 경우에는 조각별 다항식이 최적의 접근 방식이 될 수 있습니다. 자세한 내용은 비모수적 피팅 항목을 참조하십시오.

다항식 피팅의 주요 장점에는 복잡하지 않은 데이터에 대한 적절한 유연성이 있다는 점과 선형이라서 피팅 과정이 간단하다는 점이 있습니다. 주요 단점은 고차 피팅이 불안정해질 수 있다는 점입니다. 또한, 모든 차수의 다항식은 데이터 범위 내에서는 적합한 피팅을 제공할 수 있지만 해당 범위 밖에서는 크게 발산할 수 있습니다. 따라서 다항식을 사용하여 외삽을 수행할 때는 주의를 기울여야 합니다.

고차 다항식으로 피팅할 때는 피팅 절차에서 행렬의 기저로 매우 큰 값의 예측 변수 값을 사용하므로 스케일링 문제가 발생할 수 있습니다. 이 문제를 처리하려면 데이터의 평균값을 0에 두고 단위 표준편차로 스케일링하여 정규화해야 합니다. 곡선 피팅 앱에서 정규화 체크박스를 선택하여 데이터를 정규화하면 됩니다.

대화형 방식으로 다항식 모델 피팅하기

  1. cftool을 입력하여 곡선 피팅 앱을 엽니다. 또는 앱 탭에서 곡선 피팅을 클릭합니다.

  2. 곡선 피팅 앱에서 곡선 또는 곡면 데이터를 선택합니다.

    • 곡선 데이터(X 데이터Y 데이터 또는 인덱스에 대한 Y 데이터만)를 선택할 경우 곡선 피팅 앱은 디폴트 곡선 피팅인 다항식을 만듭니다.

    • 곡면 데이터(X 데이터, Y 데이터, Z 데이터)를 선택할 경우 곡선 피팅 앱은 디폴트 곡면 피팅인 보간을 만듭니다. 모델 유형을 보간에서 다항식으로 변경합니다.

곡선의 경우, 다항식 모델이 x에서 다항식을 피팅합니다.

곡면의 경우, 다항식 모델이 xy에서 다항식을 피팅합니다.

다음 옵션을 지정할 수 있습니다.

  • x 입력값과 y 입력값의 차수:

  • 사용할 로버스트 선형 최소제곱 피팅 방법(Off, LAR 또는 Bisquare). 자세한 내용은 fitoptions 함수 도움말 페이지의 Robust를 참조하십시오.

  • 피팅 옵션을 클릭하여 한계를 설정하거나 항을 제외합니다. 모든 항은 한계를 0으로 설정하여 제외할 수 있습니다.

    결과 창에서 모델 항, 계수의 값, 적합도 통계량을 확인할 수 있습니다.

입력 변수들의 크기가 서로 매우 다른 경우, 정규화 체크박스를 선택하고 선택 취소하여 피팅의 차이를 확인해 보십시오. 스케일링으로 피팅을 개선할 수 있을 경우 결과 창에 메시지가 표시됩니다.

여러 다항식 피팅을 비교하는 예제는 Compare Fits in Curve Fitter App 항목을 참조하십시오.

fit 함수를 사용하여 다항식 피팅하기

이 예제에서는 fit 함수를 사용하여 다항식을 데이터에 피팅하는 방법을 보여줍니다. 예제 단계에서는 다항식 곡선과 곡면을 피팅 및 플로팅하고, 피팅 옵션을 지정하고, 적합도 통계량을 반환하고, 예측값을 계산하고, 신뢰구간을 표시합니다.

다항식 라이브러리 모델은 fit 함수와 fittype 함수의 입력 인수입니다. 모델 유형을 poly로 지정하고 x의 차수(최대 9) 또는 x와 y의 차수(최대 5)를 지정합니다. 예를 들어, 2차 곡선은 'poly2'로 지정하고, 3차 곡면은 'poly33'으로 지정합니다.

2차 다항식 곡선을 만들고 플로팅하기

데이터를 불러와서 2차 다항식을 피팅합니다. 문자열 'poly2'로 2차 다항식을 지정합니다.

load census;
fitpoly2=fit(cdate,pop,'poly2')
% Plot the fit with the plot method.
plot(fitpoly2,cdate,pop)
% Move the legend to the top left corner.
legend('Location','NorthWest' );
fitpoly2 = 

     Linear model Poly2:
     fitpoly2(x) = p1*x^2 + p2*x + p3
     Coefficients (with 95% confidence bounds):
       p1 =    0.006541  (0.006124, 0.006958)
       p2 =      -23.51  (-25.09, -21.93)
       p3 =   2.113e+04  (1.964e+04, 2.262e+04)

3차 곡선 만들기

3차 다항식 'poly3'을 피팅합니다.

fitpoly3=fit(cdate,pop,'poly3')
plot(fitpoly3,cdate,pop)
Warning: Equation is badly conditioned. Remove repeated data points or try
centering and scaling. 

fitpoly3 = 

     Linear model Poly3:
     fitpoly3(x) = p1*x^3 + p2*x^2 + p3*x + p4
     Coefficients (with 95% confidence bounds):
       p1 =   3.855e-06  (-4.078e-06, 1.179e-05)
       p2 =    -0.01532  (-0.06031, 0.02967)
       p3 =       17.78  (-67.2, 102.8)
       p4 =       -4852  (-5.834e+04, 4.863e+04)

피팅 옵션 지정하기

3차 피팅에서 방정식의 조건이 나쁘다고 경고했으므로 'Normalize' 옵션을 지정하여 정규화를 시도해야 합니다. 정규화 옵션과 로버스트 피팅 옵션을 다 사용하여 3차 다항식을 피팅해 보겠습니다. Robust 'on'은 로버스트 선형 최소제곱 피팅 방법의 디폴트 방법인 'Bisquare'와 동일한 간략한 방법입니다.

fit3=fit(cdate, pop,'poly3','Normalize','on','Robust','on')
plot(fit3,cdate,pop)
fit3 = 

     Linear model Poly3:
     fit3(x) = p1*x^3 + p2*x^2 + p3*x + p4
       where x is normalized by mean 1890 and std 62.05
     Coefficients (with 95% confidence bounds):
       p1 =     -0.4619  (-1.895, 0.9707)
       p2 =       25.01  (23.79, 26.22)
       p3 =       77.03  (74.37, 79.7)
       p4 =       62.81  (61.26, 64.37)

라이브러리 모델 'poly3'에 대해 설정할 수 있는 파라미터를 확인하려면 fitoptions 함수를 사용하십시오.

fitoptions poly3
ans =

    Normalize: 'off'
      Exclude: []
      Weights: []
       Method: 'LinearLeastSquares'
       Robust: 'Off'
        Lower: [1x0 double]
        Upper: [1x0 double]

적합도 통계량 구하기

'gof' 출력 인수를 지정하여 3차 다항식 피팅에 대한 적합도 통계량을 구합니다.

[fit4, gof]=fit(cdate, pop,'poly3','Normalize','on');
gof
gof = 

  struct with fields:

           sse: 149.7687
       rsquare: 0.9988
           dfe: 17
    adjrsquare: 0.9986
          rmse: 2.9682

잔차를 플로팅하여 피팅 정도 평가하기

잔차를 플로팅하려면 plot 메서드에서 플롯 유형으로 'residuals'를 지정하십시오.

plot(fit4,cdate, pop,'residuals');

데이터 범위 밖에서의 피팅 살펴보기

피팅은 기본적으로 데이터 범위에 대해 플로팅됩니다. 피팅을 다른 범위에 대해 플로팅하려면 피팅을 플로팅하기 전에 좌표축의 x 제한을 설정하십시오. 예를 들어, 피팅에서 외삽된 값을 보려면 x 상한을 2050으로 설정하십시오.

plot( cdate, pop, 'o' );
xlim( [1900, 2050] );
hold on
plot( fit4 );
hold off

예측한계 플로팅하기

예측한계를 플로팅하려면 플롯 유형으로 'predobs' 또는 'predfun'을 사용하십시오.

plot(fit4,cdate,pop,'predobs')

2050년까지 3차 다항식에 대한 예측한계를 플로팅합니다.

plot( cdate, pop, 'o' );
xlim( [1900, 2050] )
hold on
plot( fit4, 'predobs' );
hold off

새 쿼리 점에서 신뢰한계 구하기

새 쿼리 점에 대해 피팅을 평가합니다.

cdateFuture = (2000:10:2020).';
popFuture = fit4( cdateFuture )
popFuture =

  276.9632
  305.4420
  335.5066

predint 메서드를 사용하여 미래의 인구 예측에 대한 95% 신뢰한계를 계산합니다.

ci = predint( fit4, cdateFuture, 0.95, 'observation' )
ci =

  267.8589  286.0674
  294.3070  316.5770
  321.5924  349.4208

피팅 및 데이터에 대해 예측된 미래의 인구를 신뢰구간과 함께 플로팅합니다.

plot(cdate, pop, 'o');
xlim([1900, 2040])
hold on
plot(fit4)
h = errorbar(cdateFuture,popFuture,popFuture-ci(:,1),ci(:,2)-popFuture,'.');
hold off
legend('cdate v pop','poly3','prediction','Location','NorthWest')

다항식 곡면 피팅 및 플로팅하기

곡면 데이터를 불러와서 x와 y에서 4차 다항식을 피팅합니다.

load franke;
fitsurface=fit([x,y],z, 'poly44','Normalize','on')
plot(fitsurface, [x,y],z)
     Linear model Poly44:
     fitsurface(x,y) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p30*x^3 
                    + p21*x^2*y + p12*x*y^2 + p03*y^3 + p40*x^4 + p31*x^3*y 
                    + p22*x^2*y^2 + p13*x*y^3 + p04*y^4
       where x is normalized by mean 1982 and std 868.6
       and where y is normalized by mean 0.4972 and std 0.2897
     Coefficients (with 95% confidence bounds):
       p00 =      0.3471  (0.3033, 0.3909)
       p10 =     -0.1502  (-0.1935, -0.107)
       p01 =     -0.4203  (-0.4637, -0.377)
       p20 =      0.2165  (0.1514, 0.2815)
       p11 =      0.1717  (0.1175, 0.2259)
       p02 =     0.03189  (-0.03351, 0.09729)
       p30 =     0.02778  (0.00749, 0.04806)
       p21 =     0.01501  (-0.002807, 0.03283)
       p12 =    -0.03659  (-0.05439, -0.01879)
       p03 =      0.1184  (0.09812, 0.1387)
       p40 =    -0.07661  (-0.09984, -0.05338)
       p31 =    -0.02487  (-0.04512, -0.004624)
       p22 =   0.0007464  (-0.01948, 0.02098)
       p13 =    -0.02962  (-0.04987, -0.009366)
       p04 =    -0.02399  (-0.0474, -0.0005797)

다항식 모델 피팅 옵션

모든 피팅 방법은 디폴트 속성 Normalize, Exclude, WeightsMethod를 갖습니다. 예제는 명령줄에서 피팅 옵션 지정하기 항목을 참조하십시오.

다항식 모델은 Method 속성값 LinearLeastSquares와 다음 표에 나와 있는 추가적인 피팅 옵션 속성을 갖습니다. 모든 피팅 옵션에 대한 자세한 내용은 fitoptions 함수 도움말 페이지를 참조하십시오.

속성

설명

Robust

사용할 로버스트 선형 최소제곱 피팅 방법을 지정합니다. 값은 'on', 'off', 'LAR' 또는 'Bisquare'입니다. 디폴트 값은 'off'입니다.
'LAR'은 최소 절대 잔차법을 지정하고 'Bisquare'는 겹제곱 가중치 방법을 지정합니다. 'on'은 디폴트 방법인 'Bisquare'와 동일합니다.

Lower

피팅할 계수의 하한으로 구성된 벡터입니다. 디폴트 값은 빈 벡터로, 이는 피팅에 하한이라는 제약 조건이 적용되지 않음을 나타냅니다. 한계가 지정된 경우 벡터 길이는 계수의 개수와 같아야 합니다. 제약 조건이 적용되지 않은 개별 하한은 -Inf로 지정할 수 있습니다.

Upper

피팅할 계수의 상한으로 구성된 벡터입니다. 디폴트 값은 빈 벡터로, 이는 피팅에 상한이라는 제약 조건이 적용되지 않음을 나타냅니다. 한계가 지정된 경우 벡터 길이는 계수의 개수와 같아야 합니다. 제약 조건이 적용되지 않은 개별 상한은 Inf로 지정할 수 있습니다.

다항식 곡면 피팅을 위해 다항식 항 정의하기

x 입력값과 y 입력값의 차수를 지정하여 다항식 곡면 모델에 포함할 항을 제어할 수 있습니다. i가 x의 차수이고 j가 y의 차수이면 다항식의 총 차수는 i와 j 중 큰 값입니다. 각 항에서 x의 차수는 i보다 작거나 같고, 각 항에서 y의 차수는 j보다 작거나 같습니다. i와 j는 모두 최댓값이 5입니다.

예를 들어, 다음과 같이 입력합니다.

poly21  Z = p00 + p10*x + p01*y + p20*x^2 + p11*x*y
poly13  Z = p00 + p10*x + p01*y + p11*x*y + p02*y^2 
                      + p12*x*y^2 + p03*y^3
poly55  Z = p00 + p10*x + p01*y +...+ p14*x*y^4 
                      + p05*y^5

예를 들어, x의 차수를 3으로 지정하고 y의 차수를 2로 지정하면 모델 이름은 poly32입니다. 모델 항은 다음 표의 형식을 따릅니다.

항의 차수012
01yy2
1xxyxy2
2x2x2yN/A
3x3N/AN/A

다항식의 총 차수는 i와 j 중 큰 값을 초과할 수 없습니다. 이 예제에서 x3y, x2y2과 같은 항은 차수의 합이 3보다 크므로 제외됩니다. 두 경우 모두 총 차수가 4이기 때문입니다.

참고 항목

| | |

관련 항목