데이터에 지수 모델 피팅하기
이 예제에서는 trust-region 비선형 최소제곱 알고리즘과 Levenberg-Marquardt 비선형 최소제곱 알고리즘을 사용하여 지수 모델을 데이터에 피팅하는 방법을 보여줍니다.
census
데이터 세트를 불러옵니다.
load census
변수 pop
와 변수 cdate
는 각각 모집단 크기와 인구 조사를 실시한 연도에 대한 데이터를 포함하고 있습니다.
데이터의 산점도 플롯을 표시합니다.
scatter(cdate,pop) xlabel("Year") ylabel("Population")
이 플롯은 모집단이 지수 함수와 유사한 형태로 해마다 증가함을 보여줍니다.
디폴트 trust-region 피팅 알고리즘을 사용하여 모집단 데이터에 2항 지수 모델을 피팅합니다. 피팅 결과와 적합도 통계량을 반환합니다.
[exp_tr,gof_tr] = fit(cdate,pop,"exp2")
exp_tr = General model Exp2: exp_tr(x) = a*exp(b*x) + c*exp(d*x) Coefficients (with 95% confidence bounds): a = 7.169e-17 b = 0.02155 c = 0 d = 0.02155
gof_tr = struct with fields:
sse: 1.2412e+04
rsquare: 0.8995
dfe: 17
adjrsquare: 0.8818
rmse: 27.0209
exp_tr
은 trust-region 피팅 알고리즘으로 계산된 계수를 비롯한 피팅 결과를 포함합니다. gof_tr
에 저장된 적합도 통계량은 27.0209의 RMSE(RMS 오차)를 포함합니다.
데이터의 산점도 플롯과 함께 exp_tr
의 모델을 플로팅합니다.
plot(exp_tr,cdate,pop) legend(["data","predicted value"]) xlabel("Year") ylabel("Population")
이 플롯은 exp_tr
의 모델이 인구 조사 데이터를 가깝게 따라가고 있지 않음을 보여줍니다.
Levenberg-Marquardt 피팅 알고리즘을 사용해 계수를 계산하여 피팅을 개선합니다.
[exp_lm,gof_lm] = fit(cdate,pop,"exp2",Algorithm="Levenberg-Marquardt")
exp_lm = General model Exp2: exp_lm(x) = a*exp(b*x) + c*exp(d*x) Coefficients (with 95% confidence bounds): a = 4.282e-17 (-1.125e-11, 1.126e-11) b = 0.02477 (-5.67, 5.719) c = -3.933e-17 (-1.126e-11, 1.126e-11) d = 0.02481 (-5.696, 5.745)
gof_lm = struct with fields:
sse: 475.9498
rsquare: 0.9961
dfe: 17
adjrsquare: 0.9955
rmse: 5.2912
exp_lm
은 Levenberg-Marquardt 피팅 알고리즘으로 계산된 계수를 비롯한 피팅 결과를 포함합니다. gof_lm
에 저장된 적합도 통계량은 exp_tr
에 대한 RMSE보다 작은 5.2912의 RMSE를 포함합니다. RMSE의 상대적 크기는 exp_lm
에 저장된 모델이 exp_tr
에 저장된 모델보다 데이터를 더 정확하게 피팅함을 나타냅니다.
데이터의 산점도 플롯과 함께 exp_lm
의 모델을 플로팅합니다.
plot(exp_lm,cdate,pop) legend(["data","predicted value"]) xlabel("Year") ylabel("Population")
이 플롯은 exp_lm
의 모델이 exp_tr
의 모델보다 인구 조사 데이터를 더 가깝게 따라가고 있음을 보여줍니다.