数据预处理——matlab拟合工具箱
筆記整理來自《清風數學建模》
目錄
一、打開matlab擬合工具箱
二、擬合工具箱的使用
三、自定義擬合函數——Custom Equation(建模用的較多)
?四、多項式擬合(建模用的較多)
?五、如何導出擬合的高清圖像
六、調用擬合工具箱自動生成的代碼
七、利用擬合工具箱預測美國人口
1. 題目
2. 使用擬合工具箱進行擬合
?3. 自動生成擬合的代碼
?4. 預測未來的人口數
八、優秀論文中cftool的應用
一、打開matlab擬合工具箱
方法1:直接輸入“cftool”
方法2:選擇“apps”"curve fitting"
擬合工具箱:
二、擬合工具箱的使用
?數據:
| x | 4.2 | 5.9 | 2.7 | 3.8 | 3.8 | 5.6 | 6.9 | 3.5 | 3.6 | 2.9 | 4.2 | 6.1 | 5.5 | 6.6 | 2.9 | 3.3 | 5.9 | 6 | 5.6 |
| y | 8.4 | 11.7 | 4.2 | 6.1 | 7.9 | 10.2 | 13.2 | 6.6 | 6 | 4.6 | 8.4 | 12 | 10.3 | 13.3 | 4.6 | 6.7 | 10.8 | 11.5 | 9.9 |
(1)導入數據:load data1.mat
(2) 選擇合適的函數進行擬合。
?參數解釋:
Linear model Poly1:
? ? ?f(x) = p1*x + p2
Coefficients (with 95% confidence bounds):
? ? ? ?p1 = ? ? ? 2.095 ?(1.886, 2.304) %表明p1有95%的可能性落在[1.886,2.304]這個區間
? ? ? ?p2 = ? ? ?-1.055 ?(-2.072, -0.03775)
Goodness of fit:
? SSE: 5.728%誤差平方和
? R-square: 0.9635%擬合優度
? Adjusted R-square: 0.9613%調整后的擬合優度
? RMSE: 0.5805%均方誤差
在擬合里面,最重要的兩個參數是誤差平方和SSE和擬合優度R^2,擬合優度越接近于1,說明誤差越小,擬合效果越好。
三、自定義擬合函數——Custom Equation(建模用的較多)
在matlab擬合工具箱中,可以自定義函數的參數和表達式,matlab會自動計算出參數的值。
當擬合函數設置成一元二次函數時,可以發現擬合優度變大了,這是不是說明該二次函數比一次函數更好呢?
實際上,二次函數和一次函數的SSE和R^2的值都相差不大。在這種情況下,盡量擬合函數越簡單越好,否則很可能出現龍格現象(過擬合)。
?四、多項式擬合(建模用的較多)
多項式擬合可以自定義函數的階數。
?五、如何導出擬合的高清圖像
(1)選擇“打印圖像”
(2) 選擇“導出設置”“導出”或者選擇“編輯”“復制圖片”
分辨率可以改成“600”,這樣圖像的清晰度會更高一些。?
?
六、調用擬合工具箱自動生成的代碼
?第一步:選擇“文件”“自動生成代碼”
?第二步:點擊保存,保存為函數格式.m的文件
第三步:點擊下面的代碼執行即可。
[fitresult, gof] = createFit(x, y)?通過生成的代碼,可以更改坐標軸、圖像標題等信息。
七、利用擬合工具箱預測美國人口
1. 題目
下表給出了近2個世紀的美國人口統計數據(單位:百萬人),請使用最下面給定的擬合函數預測后30年的美國人口。
2. 使用擬合工具箱進行擬合
導入數據,調出擬合工具箱:?
year = 1790:10:2000; population = [3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76.0,92.0,106.5,123.2,131.7,150.7,179.3,204.0,226.5,251.4,281.4]; cftool輸入自定義的擬合函數:(需要將f(x)改為f(t))
xm/(1+((xm/3.9)-1)*exp((-r)*(t-1790)))?發現擬合函數圖像有問題,提示:
Fit computation did not converge:擬合計算未收斂:
Fitting stopped because the number of iterations or function evaluations exceeded the specified maximum.擬合停止,因為迭代次數或函數求值次數超過了指定的最大值。
說明擬合參數xm和r的初始值設置有問題,這就需要我們更改擬合參數xm和r的值,我們可以一個個數去試
【結果】:
General model:
? ? ?f(t) = xm/(1+((xm/3.9)-1)*exp((-r)*(t-1790)))
Coefficients (with 95% confidence bounds):
? ? ? ?r = ? ? 0.02735 ?(0.0265, 0.0282)
? ? ? ?xm = ? ? ? 342.4 ?(311, 373.8)
Goodness of fit:
? SSE: 1225
? R-square: 0.9924
? Adjusted R-square: 0.992
? RMSE: 7.826
在這里,由于該函數不是線性函數,所以不用擬合優度解釋擬合的效果,而應該用誤差平方和SSE進行解釋。這里SSE=1225,說明誤差還比較小。
?3. 自動生成擬合的代碼
和第五點的操作方法一樣,自動生成代碼,改變一些標題等。
自動生成的代碼:
function [fitresult, gof] = createFit(year, population)%% Fit: 'untitled fit 1'. [xData, yData] = prepareCurveData( year, population );% Set up fittype and options. ft = fittype( 'xm/(1+((xm/3.9)-1)*exp((-r)*(t-1790)))', 'independent', 't', 'dependent', 'y' ); opts = fitoptions( ft ); opts.Display = 'Off'; opts.Lower = [-Inf -Inf]; opts.StartPoint = [0.757740130578333 41]; opts.Upper = [Inf Inf];% Fit model to data. [fitresult, gof] = fit( xData, yData, ft, opts );% Plot fit with data. figure( 'Name', '擬合函數圖像' ); h = plot( fitresult, xData, yData ); legend( h, '樣本點', '擬合曲線', 'Location', 'NorthEast' ); % Label axes xlabel( '年份' ); ylabel( '人口數(百萬人)' ); grid on圖像:
?4. 預測未來的人口數
【分析】指導預測人口y=f(x)的函數關系式后,可以根據年份算出人口數。需要注意的時,計算預測的人口數時需要用點乘/除的形式,保證一個x對應一個唯一的y值,按照對應的值進行計算。
t = 2001:2030; xm = 342.4; r = 0.02735; predictions = xm./(1+(xm./3.9-1).*exp(-r.*(t-1790))); % 計算預測值(注意這里要寫成點乘和點除,這樣可以保證按照對應元素進行計算)計算結果:(predictions即為預測的人口數)
| 年份 | 2001 | 2002 | 2003 | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 | 2030 |
| 人口 | 269.4898 | 271.047 | 272.5795 | 274.0874 | 275.5707 | 277.0295 | 278.4638 | 279.8738 | 281.2595 | 282.621 | 283.9585 | 285.2722 | 286.5621 | 287.8285 | 289.0715 | 290.2913 | 291.4881 | 292.6621 | 293.8136 | 294.9428 | 296.0498 | 297.135 | 298.1986 | 299.2408 | 300.2619 | 301.2622 | 302.2419 | 303.2013 | 304.1407 | 305.0603 |
八、優秀論文中cftool的應用
?
總結
以上是生活随笔為你收集整理的数据预处理——matlab拟合工具箱的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ViewStub用法
- 下一篇: matlab人脸追踪,求大神帮助我这个菜