❶ 【數學建模演算法】(29)數據的統計描述和分析(上)
數理統計 研究的對象是受隨機因素影響的數據,以下數理統計就簡稱統計,統計是以概率論為基礎的一門應用學科。
數據樣本少則幾個,多則成千上萬,人們希望能用少數幾個包含其最多相關信息的數值來體現數據樣本總體的規律。描述性統計就是搜集、整理、加工和分析統計數據,使之系統化、條理化,以顯示出數據資料的趨勢、特徵和數量關系。它是統計推斷的基礎,實用性較強,在統計工作中經常使用。
面對一批數據如何進行描述與分析,需要掌握 參數估計 和 假設檢驗 這兩個數理統計的最基本方法。
我們將用 Matlab 的統計工具箱(Statistics Toolbox)來實現數據的統計描述和分析。
一組數據(樣本)往往是雜亂無章的,做出它的頻數表和直方圖,可以看作是對這組數據的一個初步整理和直觀描述。
將數據的取值范圍劃分為若干個區間,然後統計這組數據在每個區間中出現的次數,稱為 頻數 ,由此得到一個頻數表。以數據的取值為橫坐標,頻數為縱坐標,畫出一個階梯形的圖,稱為 直方圖 ,或 頻數分布圖 。
若樣本容量不大,能夠手工做出頻數表和直方圖,當樣本容量較大時則可以藉助Matlab這樣的軟體了。讓我們以下面的例子為例,介紹頻數表和直方圖的作法。
(1)數據輸入
數據輸入通常有兩種方法,一種是在交互環境中直接輸入,如果在統計中數據量比較大,這樣作不太方便;另一種辦法是先把數據寫入一個純文本數據文件data.txt中,數據列之間用空格和Tab鍵分割,之後以data.txt為文件名存放在某個子目錄下,用Matlab中的load命令讀入數據,具體做法是:
先把txt文件移入Matlab的工作文件夾中,之後在Matlab命令行或腳本中輸入:
這樣就在內存中建立了一個變數data它是一個包含有 個數據的矩陣。
為了得到我們需要的100個身高和體重均為一列的數據,我們對矩陣做如下處理:
(2)作頻數表及其直方圖
求頻數用hist函數實現,其用法是:
得到數組(行列均可) 的頻數表。它將區間 等分為 份(預設時 為10), 返回 個小區間的頻數, 返回 個小區間的中點。
同樣的一個函數名hist還可以用來畫出直方圖。
對於本例的數據,可以編寫如下程序畫出數據的直方圖。
得直方圖如下:
下面我們介紹幾種常用的統計量。
算術平均值 (簡稱均值)描述數據取值的平均位置,記作 ,
中位數 是將數據由小到大排序後位於中間位置的那個數值。
Matlab 中 mean(x)返回 x 的均值,median(x)返回中位數。
標准差 定義為:
它是各個數據與均值偏離程度的度量,這種偏離不妨稱為 變異 。
方差 是標准差的平方 。
極差 是 的最大值與最小值之差。
Matlab 中 std(x)返回 x 的標准差,var(x)返回方差,range(x)返回極差。
你可能注意到標准差 s 的定義(2)中,對 的平方求和卻被 除,這是出於無偏估計的要求。若需要改為被 除,Matlab 可用 std(x,1)和 var(x,1)來實現。
隨機變數 的 階 中心距 為 。
隨機變數 的 偏度 和 峰度 指的是 的標准化變數 的三階中心矩和四階中心矩:
偏度反映分布的對稱性, 稱為右偏態,此時數據位於均值右邊的比位於左邊的多; 稱為左偏態,情況相反;而 接近 0 則可認為分布是對稱的。
峰度是分布形狀的另一種度量,正態分布的峰度為 3,若 比 3 大得多,表示分布有沉重的尾巴,說明樣本中含有較多遠離均值的數據,因而峰度可以用作衡量偏離正態分布的尺度之一。
Matlab 中 moment(x,order)返回 x 的 order 階中心矩,order 為中心矩的階數。skewness(x)返回 x 的 偏度 ,kurtosis(x)返回 峰度 。
在以上用 Matlab 計算各個統計量的命令中,若 x 為矩陣,則作用於 x 的列,返回一個行向量。
對例1給出的學生身高和體重,用Matlab 計算這些統計量,程序如下:
統計量中最重要、最常用的是均值和標准差,由於樣本是隨機變數,它們作為樣本的函數自然也是隨機變數,當用它們去推斷總體時,有多大的可靠性就與統計量的概率分布有關,因此我們需要知道幾個重要分布的簡單性質。
隨機變數的特性完全由它的(概率)分布函數或(概率)密度函數來描述。設有隨機變數 ,其分布函數定義為 的概率,即 。若 是連續型隨機變數,則其密度函數 與 的關系為:
上 分位數是下面常用的一個概念,其定義為:對於 ,使某分布函數 的 ,稱為這個分布的上 分位數,記作 。
我們前面畫過的直方圖是頻數分布圖,頻數除以樣本容量 ,稱為頻率, 充分大時頻率是概率的近似,因此直方圖可以看作密度函數圖形的(離散化)近似。
正態分布可以說是最常見的(連續型)概率分布,成批生產時零件的尺寸,射擊中彈著點的位置,儀器反復量測的結果,自然界中一種生物的數量特徵等,多數情況下都服從正態分布,這不僅是觀察和經驗的總結,而且有著深刻的理論依據, 即在大量相互獨立的、作用差不多大的隨機因素影響下形成的隨機變數,其極限分布為正態分布 。
鑒於正態分布的隨機變數在實際生活中如此地常見,記住下面 3 個數字是有用的:
若 為相互獨立的、服從標准正態分布 的隨機變數,則它們的平方和 服從 分布,記作 , 稱為自由度,它的期望 ,方差 。
若 ,且相互獨立,則 服從 分布,記作 稱自由度。
分布的密度函數曲線和 曲線形狀相似。理論上 時, ,實際上當 時它與 就相差無幾了。
若 ,且相互獨立,則 服從 分布,記作 稱自由度。
Matlab統計工具箱中有27種概率分布,這里只對上面所述4中分布列出命令的字元:
工具箱對每一種分布都提供五類函數,其命令的字元是:
當需要一種分布的某一種函數時,將以上所列的分布命令字元與函數命令字元接起來,並輸入自變數(可以是標量、數組或矩陣)和參數就行了,如:
設總體 , 為一容量 的樣本,其均值 和標准差 由式(1),(2)確定,則用 和 構造的下面兩個分布在統計中是非常有用的。
或
設有兩個總體 和 ,及由容量分別為 的兩個樣本確定的均值 和標准差 ,則:
其中:
且要求
❷ 數學建模演算法有哪些
1. 蒙特卡羅演算法。 該演算法又稱隨機性模擬演算法,是通過計算機模擬來解決問題的演算法,同時可以通過模擬來檢驗自己模型的正確性,幾乎是比賽時必用的方法。
2. 數據擬合、參數估計、插值等數據處理演算法。 比賽中通常會遇到大量的數據需要處理,而處理數據的關鍵就在於這些演算法,通常使用MATLAB 作為工具。
3. 線性規劃、整數規劃、多元規劃、二次規劃等規劃類演算法。 建模競賽大多數問題屬於最優化問題,很多時候這些問題可以用數學規劃演算法來描述,通常使用Lindo、Lingo 軟體求解。
4. 圖論演算法。 這類演算法可以分為很多種,包括最短路、網路流、二分圖等演算法,涉及到圖論的問題可以用這些方法解決,需要認真准備。
5. 動態規劃、回溯搜索、分治演算法、分支定界等計算機演算法。 這些演算法是演算法設計中比較常用的方法,競賽中很多場合會用到。
6. 最優化理論的三大非經典演算法:模擬退火演算法、神經網路演算法、遺傳演算法。 這些問題是用來解決一些較困難的最優化問題的,對於有些問題非常有幫助,但是演算法的實現比較困難,需慎重使用。
7. 網格演算法和窮舉法。 兩者都是暴力搜索最優點的演算法,在很多競賽題中有應用,當重點討論模型本身而輕視演算法的時候,可以使用這種暴力方案,最好使用一些高級語言作為編程工具。
8. 一些連續數據離散化方法。 很多問題都是實際來的,數據可以是連續的,而計算機只能處理離散的數據,因此將其離散化後進行差分代替微分、求和代替積分等思想是非常重要的。
9. 數值分析演算法。 如果在比賽中採用高級語言進行編程的話,那些數值分析中常用的演算法比如方程組求解、矩陣運算、函數積分等演算法就需要額外編寫庫函數進行調用。
10. 圖象處理演算法。 賽題中有一類問題與圖形有關,即使問題與圖形無關,論文中也會需要圖片來說明問題,這些圖形如何展示以及如何處理就是需要解決的問題,通常使用MATLAB 進行處理。
以下將結合歷年的競賽題,對這十類演算法進行詳細地說明。
以下將結合歷年的競賽題,對這十類演算法進行詳細地說明。
2 十類演算法的詳細說明
2.1 蒙特卡羅演算法
大多數建模賽題中都離不開計算機模擬,隨機性模擬是非常常見的演算法之一。
舉個例子就是97 年的A 題,每個零件都有自己的標定值,也都有自己的容差等級,而求解最優的組合方案將要面對著的是一個極其復雜的公式和108 種容差選取方案,根本不可能去求解析解,那如何去找到最優的方案呢?隨機性模擬搜索最優方案就是其中的一種方法,在每個零件可行的區間中按照正態分布隨機的選取一個標定值和選取一個容差值作為一種方案,然後通過蒙特卡羅演算法模擬出大量的方案,從中選取一個最佳的。另一個例子就是去年的彩票第二問,要求設計一種更好的方案,首先方案的優劣取決於很多復雜的因素,同樣不可能刻畫出一個模型進行求解,只能靠隨機模擬模擬。
2.2 數據擬合、參數估計、插值等演算法
數據擬合在很多賽題中有應用,與圖形處理有關的問題很多與擬合有關系,一個例子就是98 年美國賽A 題,生物組織切片的三維插值處理,94 年A 題逢山開路,山體海拔高度的插值計算,還有吵的沸沸揚揚可能會考的「非典」問題也要用到數據擬合演算法,觀察數據的走向進行處理。此類問題在MATLAB中有很多現成的函數可以調用,熟悉MATLAB,這些方法都能游刃有餘的用好。
2.3 規劃類問題演算法
競賽中很多問題都和數學規劃有關,可以說不少的模型都可以歸結為一組不等式作為約束條件、幾個函數表達式作為目標函數的問題,遇到這類問題,求解就是關鍵了,比如98年B 題,用很多不等式完全可以把問題刻畫清楚,因此列舉出規劃後用Lindo、Lingo 等軟體來進行解決比較方便,所以還需要熟悉這兩個軟體。
2.4 圖論問題
98 年B 題、00 年B 題、95 年鎖具裝箱等問題體現了圖論問題的重要性,這類問題演算法有很多,包括:Dijkstra、Floyd、Prim、Bellman-Ford,最大流,二分匹配等問題。每一個演算法都應該實現一遍,否則到比賽時再寫就晚了。
2.5 計算機演算法設計中的問題
計算機演算法設計包括很多內容:動態規劃、回溯搜索、分治演算法、分支定界。比如92 年B 題用分枝定界法,97 年B 題是典型的動態規劃問題,此外98 年B 題體現了分治演算法。這方面問題和ACM 程序設計競賽中的問題類似,推薦看一下《計算機演算法設計與分析》(電子工業出版社)等與計算機演算法有關的書。
2.6 最優化理論的三大非經典演算法
這十幾年來最優化理論有了飛速發展,模擬退火法、神經網路、遺傳演算法這三類演算法發展很快。近幾年的賽題越來越復雜,很多問題沒有什麼很好的模型可以借鑒,於是這三類演算法很多時候可以派上用場,比如:97 年A 題的模擬退火演算法,00 年B 題的神經網路分類演算法,象01 年B 題這種難題也可以使用神經網路,還有美國競賽89 年A 題也和BP 演算法有關系,當時是86 年剛提出BP 演算法,89 年就考了,說明賽題可能是當今前沿科技的抽象體現。03 年B 題伽馬刀問題也是目前研究的課題,目前演算法最佳的是遺傳演算法。
2.7 網格演算法和窮舉演算法
網格演算法和窮舉法一樣,只是網格法是連續問題的窮舉。比如要求在N 個變數情況下的最優化問題,那麼對這些變數可取的空間進行采點,比如在[a; b] 區間內取M +1 個點,就是a; a+(b-a)/M; a+2 (b-a)/M; …… ; b 那麼這樣循環就需要進行(M + 1)N 次運算,所以計算量很大。比如97 年A 題、99 年B 題都可以用網格法搜索,這種方法最好在運算速度較快
的計算機中進行,還有要用高級語言來做,最好不要用MATLAB 做網格,否則會算很久的。窮舉法大家都熟悉,就不說了。
2.8 一些連續數據離散化的方法
大部分物理問題的編程解決,都和這種方法有一定的聯系。物理問題是反映我們生活在一個連續的世界中,計算機只能處理離散的量,所以需要對連續量進行離散處理。這種方法應用很廣,而且和上面的很多演算法有關。事實上,網格演算法、蒙特卡羅演算法、模擬退火都用了這個思想。
2.9 數值分析演算法
這類演算法是針對高級語言而專門設的,如果你用的是MATLAB、Mathematica,大可不必准備,因為象數值分析中有很多函數一般的數學軟體是具備的。
2.10 圖象處理演算法
01 年A 題中需要你會讀BMP 圖象、美國賽98 年A 題需要你知道三維插值計算,03 年B 題要求更高,不但需要編程計算還要進行處理,而數模論文中也有很多圖片需要展示,因此圖象處理就是關鍵。做好這類問題,重要的是把MATLAB 學好,特別是圖象處理的部分。