基于BP神经网络模型在matlab上实现对中国每年出生人口数量的预测
目錄
- 代碼
- 采集數據
- 簡要分析
- 結論
代碼
1、matlab代碼
?我借鑒了BP神經網絡的實現實例,這個例子數據全部都給好了
采集數據
2. 數據來源
????????????????C-J列我認為是影響人口每年出生率的因素
??1949-2019的數據,是我花了一天從國家統計局、年鑒、查閱論文或者是推算得到的數據,我就不給了,收集數據是要下功夫的,比如一年國賽中的出租車問題就需要去爬取數據,可以考慮爬蟲~
簡要分析
3. 分析
? ?這個例子里面,由于我建模時間比較匆忙,所以其中輸入神經元的八個特征值,我理想化認為都直接影響中國的每年出生人口的量綱。正常來說,應該對這八個因素進行邏輯回歸分析和顯著性水平檢驗,篩選掉一些顯著性水平不達標的因素/特征值(例如就業人口等)。可以用多種模型和指標來進行探究。例如說AIC、BIC指標,引入激勵函數,損失函數等方法。總而言之,還是很有意思的。
? ?首先對這70年的人口數據進行分析,結合歷史背景,我們可以清晰地看到在5年-10年的小時間段內,影響人口的主要因素。例如:
1)建國初期,國內外環境相對穩定,中國迎來了第一波嬰兒潮;
2)1959年,1960年,1961年我國遭受三年自然災害,圖表1中可以看到這三年出生人口驟減。1961年-1963年是中國建國后70年人口增幅最大的兩年,中國迎來第二波嬰兒潮。
3)然而在2000-2015年的十五年之間,中國每年出生人口比較平緩。直到2016年之后,人口開始呈現明顯的下降趨勢。
????????????????????? 圖表1.中國每年出生人口的折線圖
????通過中國國家統計局和快易理財網的數據,共收集到九組數據,分別是中國每年出生人口、總人口統計(萬/人)、人均GPA(按照美元算)、性別比例(按照女生等于100人計算)、人口自然增長率、城鎮人口和鄉村人口(兩者加起來等于100)、美元兌換人民幣匯率、總就業人口(萬/人)。數據的范圍從1949年不間斷統計直到2019年為止。
我采用了BP 神經網絡模型來預測中國每年的出生人口數據,表格中(詳見“人口.xlsx”)每一行,分別利用總人口、人均GPA、性別比例、自然增長率、城鎮人口、鄉村人口、美元兌換人民幣匯率、就業人口共八列數據作為特征值,來影響中國每年出生人口的數量。
??為獲得2020年特征值中的擬合數據
??首先對八個特征值近10年-20年的數據進行分析,得到兩種擬合的方向:
?1、初步分析呈線性的數據:
?包括“人口”表中的總人口、人均GPA、性別比例、城鎮人口、鄉村人口共5列的數據。我通過灰色模型GM(1,1)來對這五項數據進行預測,目的是得到未知的2020年的5項人口特征值。圖表在GM(1,1)模型求解中展示
?通過以上的分析,可以得到近似地擬合得到2020年的總人口數為140908萬人,人均GDP為11158美元,男女比例為104.58:100,城鄉村人口比例為61.65:38.35。之所以采用近十年來預測,是因為近十年我國在科技、軍事、文化等方面飛速發展,綜合國力和文化軟實力顯著提升,采用近十年的數據能較好地反應出中國在這一段時間內數據的總體趨勢。
?????????????????????圖表2.GPA
? 2、初步分析呈非線性的數據:
? ?通過觀察自然增長率、美元兌換人民幣匯率和中國就業人口數據,可以發現近10年-20年,這些數據都是上下波動的。為此,我利用matlab數據擬合的工具箱Curve Fitting進行的擬合。
?????????????????????圖表3.自然增長率
???????????????????以上圖表我就不一一給出!!!
結論
4.得出結論
? ?matalb代碼段的第三部分,我分別采用兩種方式訓練模型:
第一種是固定訓練樣本,采用了1949年-2010年共61/62年的訓練樣本,然后訓練得到的結果非常不理想。我這里的評價指標采用了決定系數R^2以及相對誤差矩陣。
????????????????????? 圖表4.評價指標
?????????????????????圖表5.R^2太小了
????????????????圖表6.2020年預測樣本
當我們要預測2020年出生人口數據的時候,要加多2020年這一列,因為要輸入八個特征值以及擬合預測結果:
??導入數據的代碼塊全部要改為:
由于寫的比較快,不足之處希望可以指正,希望大家國賽、美賽取得好成績,考研保研出國都能一切順利!
—————————————————————————————更新—————————————————————————————
??之前有朋友在評論或者私信我說如何預測2060年或者2070年的數據,我在這里做一下解釋。
??在文章中我們要預測2020年的出生人口數據,首先我們要假定1950-2019年收集的數據是真實的,事實上也是我們從網站上爬取或者從文獻中找到的數據,八九不離十。我們將這69年的數據喂入網絡,用matlab的黑盒訓練后,這個bp神經網絡就有了一定的能力。這是什么能力呢?就是你輸入一行八個特征值(上文中有提到,這也是我們定義的網絡的輸入神經元個數),網絡就能給你輸出一個數,這個數就是bp網絡預測的出生人口數。
??有不少人在看到這篇博文有點疑惑,我要預測2050年的數據,是不是要將1950年到2049年的數據都進行輸入呢,也就是將100×8100\times8100×8的矩陣輸入到網絡中,讓網絡學習。答案是否定的。這是為什么呢?因為你要獲得2021-2049年的數據(現在是2021年底,今年的數據應該還沒統計出來),只能通過擬合值來估計。就好像上文中我將每一列的數據通過matlab工具箱預測,得到2020的八個特征值輸入數據(之前寫這篇博文的時候是2020年,還沒有2020年的數據),但這不一定準確,很有可能是fake的,存在比較大的出入。我用2000-2019預測2020的八個特征值都不一定準確了,更加何況預測今后30年的30×830\times830×8的數據呢?那可能是災難性的錯誤,如果將這些特征值輸入網絡,會導致網絡的理解能力有很大偏差,甚至是不穩定。
??但毫無疑問,你要讓網絡輸出2050年的出生人口數,你得有2050年的八個特征值數據呀(人均GPA、性別比例等)。最簡單的方法就是通過matlab工具箱預測,選擇一個合適的擬合曲線去擬合數值。雖然這個數據不一定準確,但是我們的bp神經網絡的理解能力是基本上準確的,因為輸入的數據都是沒有問題的。到這里,你應該明白了吧。最后一點我還想提一下,就是如果你要預測未來n年的數據,最好不要選擇1978之前的年份數據輸入網絡中訓練,因為在那一年的春天之后,我們的生活發生了很大的變化,陳舊的數據(生產力的差異太大)對預測未來還是有一定的影響。
————————————————————————————2022.6.13 更新————————————————————————————
??本文的神經網絡模型保存后,輸入一行特征值就能預測任何一年的數據,而不需要一年年去測。
總結
以上是生活随笔為你收集整理的基于BP神经网络模型在matlab上实现对中国每年出生人口数量的预测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同时安装vs2005团队开发版和sql
- 下一篇: matlab基于瑞利信道,基于matla