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