프로그래밍 방식 피팅
다항식 모델에 대한 MATLAB 함수
다음 2개의 MATLAB® 함수는 다항식으로 데이터를 모델링할 수 있습니다.
다항식 피팅 함수
실제 상황을 모델링하려는 경우에는 항상 특정 차수의 모델이 그 상황에서 유의미한지 여부를 고려하는 것이 중요합니다.
비다항식 항이 포함된 선형 모델
이 예제에서는 비다항식 항이 포함된 선형 모델을 사용하여 데이터를 피팅하는 방법을 보여줍니다.
다항식 함수가 데이터에 대해 만족스러운 모델을 생성하지 못하면 비다항식 항이 포함된 선형 모델을 사용해 볼 수 있습니다. 예를 들어, 파라미터 , , 에서는 선형이지만 데이터에서는 비선형인 다음 함수를 고려해 볼 수 있습니다.
연립 방정식 세트를 구성하여 해를 구하고 파라미터를 구해서 미정 계수 , , 를 계산할 수 있습니다. 다음 구문은 설계 행렬을 생성하여 이를 수행합니다. 설계 행렬의 각 열은 응답(모델의 항)을 예측하는 데 사용되는 변수를 나타내고, 각 행은 이러한 변수의 한 관측값에 해당합니다.
t
와 y
를 열 벡터로 입력합니다.
t = [0 0.3 0.8 1.1 1.6 2.3]'; y = [0.6 0.67 1.01 1.35 1.47 1.25]';
설계 행렬을 생성합니다.
X = [ones(size(t)) exp(-t) t.*exp(-t)];
모델 계수를 계산합니다.
a = X\y
a = 3×1
1.3983
-0.8860
0.3085
따라서 데이터의 모델은 다음 방정식으로 지정됩니다.
이제 균일한 간격의 점에 대해 모델을 계산하고 원래 데이터와 함께 모델을 플로팅합니다.
T = (0:0.1:2.5)'; Y = [ones(size(T)) exp(-T) T.*exp(-T)]*a; plot(T,Y,'-',t,y,'o'), grid on title('Plot of Model and Original Data')
다중 회귀
이 예제에서는 다중 회귀를 사용하여 둘 이상의 예측 변수의 함수인 데이터를 모델링하는 방법을 보여줍니다.
y가 둘 이상의 예측 변수를 갖는 함수이면, 추가 데이터를 수용할 수 있도록 변수 간의 관계를 표현하는 행렬 방정식을 확장해야 합니다. 이를 다중 회귀라고 합니다.
과 의 여러 값에 대해 양 를 측정합니다. 이러한 값을 각각 벡터 x1
, x2
, y
에 저장합니다.
x1 = [.2 .5 .6 .8 1.0 1.1]'; x2 = [.1 .3 .4 .9 1.1 1.4]'; y = [.17 .26 .28 .23 .27 .24]';
이 데이터의 모델은 다음과 같은 형식이 됩니다.
다중 회귀는 모델과 데이터의 편차제곱합을 최소화하여(최소제곱 피팅) 미정 계수 , , 를 구합니다.
설계 행렬 X
를 생성하여 연립 방정식 세트를 구성하고 해를 구합니다.
X = [ones(size(x1)) x1 x2];
백슬래시 연산자를 사용하여 파라미터를 구합니다.
a = X\y
a = 3×1
0.1018
0.4844
-0.2847
데이터의 최소제곱 피팅 모델은 다음 방정식으로 지정됩니다.
모델을 검증하기 위해 모델과 데이터의 편차의 절댓값 중 최댓값을 구합니다.
Y = X*a; MaxErr = max(abs(Y - y))
MaxErr = 0.0038
이 값은 어떤 데이터 값보다도 훨씬 작습니다. 이는 이 모델이 데이터를 정확히 따르고 있음을 나타냅니다.
프로그래밍 방식 피팅
이 예제에서는 MATLAB 함수를 사용하여 다음을 수행하는 방법을 보여줍니다.
1790년부터 1990년까지의 미국 인구 데이터가 들어 있는 census.mat
에서 샘플 인구 조사 데이터를 불러옵니다.
load census
그러면 다음 두 개의 변수가 MATLAB 작업 공간에 추가됩니다.
cdate
는 1790년부터 1990년까지의 연도가 10년 단위로 포함되어 있는 열 벡터입니다.pop
은cdate
의 각 연도에 해당하는 미국 인구 숫자로 구성된 열 벡터입니다.
데이터를 플로팅합니다.
plot(cdate,pop,'ro') title('U.S. Population from 1790 to 1990')
이 플롯은 변수 간에 높은 상관관계가 있음을 나타내는 강한 패턴을 보여줍니다.
상관 계수 계산하기
예제의 이 부분에서는 변수 cdate
와 변수 pop
간에 통계적 상관관계가 있는지 확인하여 데이터 모델링의 타당성을 확인합니다. 상관 계수에 대한 자세한 내용은 선형 상관관계 항목을 참조하십시오.
상관 계수 행렬을 계산합니다.
corrcoef(cdate,pop)
ans = 2×2
1.0000 0.9597
0.9597 1.0000
행렬의 대각선 요소는 1로서, 각 변수는 자기 자신과 완전한 상관관계를 가짐을 나타냅니다. 비대각선 요소는 1에 매우 가까워, 변수 cdate
와 pop
간에 강한 통계적 상관관계가 있음을 나타냅니다.
데이터에 다항식 피팅하기
예제의 이 부분에서는 MATLAB polyfit
함수와 polyval
함수를 적용하여 데이터를 모델링합니다.
피팅 파라미터를 구합니다.
[p,ErrorEst] = polyfit(cdate,pop,2);
피팅을 계산합니다.
pop_fit = polyval(p,cdate,ErrorEst);
데이터와 피팅을 플로팅합니다.
plot(cdate,pop_fit,'-',cdate,pop,'+'); title('U.S. Population from 1790 to 1990') legend('Polynomial Model','Data','Location','NorthWest'); xlabel('Census Year'); ylabel('Population (millions)');
이 플롯은 2차 다항식 피팅이 데이터에 대해 적절한 근삿값을 제공하고 있음을 보여줍니다.
이 피팅의 잔차를 계산합니다.
res = pop - pop_fit; figure, plot(cdate,res,'+') title('Residuals for the Quadratic Polynomial Model')
잔차의 플롯에 패턴이 있으며, 이는 2차 다항식이 이 데이터 모델링에 적합하지 않을 수도 있음을 나타냅니다.
신뢰한계 플로팅하기와 계산하기
신뢰한계는 예측된 응답에 대한 신뢰구간입니다. 구간의 너비는 피팅의 확실성의 정도를 나타냅니다.
예제의 이 부분에서는 census
샘플 데이터에 polyfit
과 polyval
을 적용하여 2차 다항식 모델에 대한 신뢰한계를 생성합니다.
다음 코드는 많은 수의 샘플에 대해 95% 신뢰구간에 해당하는 구간을 사용합니다.
피팅과 예측 오차 추정값(델타)을 계산합니다.
[pop_fit,delta] = polyval(p,cdate,ErrorEst);
데이터, 피팅, 신뢰한계를 플로팅합니다.
plot(cdate,pop,'+',... cdate,pop_fit,'g-',... cdate,pop_fit+2*delta,'r:',... cdate,pop_fit-2*delta,'r:'); xlabel('Census Year'); ylabel('Population (millions)'); title('Quadratic Polynomial Fit with Confidence Bounds') grid on
95% 구간은 새로운 관측값이 한도 내에 속할 확률이 95%임을 나타냅니다.