R語言氣象模型集成預(yù)報技術(shù):神經(jīng)網(wǎng)絡(luò)、回歸、svm、決策樹用環(huán)流因子預(yù)測降雨降水?dāng)?shù)據(jù)
全文鏈接:http://tecdat.cn/?p=31664
原文出處:拓端數(shù)據(jù)部落公眾號
隨著天氣預(yù)報技術(shù)的發(fā)展,數(shù)值預(yù)報產(chǎn)品日益豐富,預(yù)報方法多種多樣。我們被客戶要求撰寫關(guān)于氣象集成預(yù)報技術(shù)的研究報告,包括一些圖形和統(tǒng)計輸出。在實際應(yīng)用中,對每個具體的問題,各種預(yù)報方法得出的結(jié)果通常是不一致的,因而不知道如何將它們統(tǒng)一起來。因此需要采用一種較好的處理方法,把不同預(yù)報方法對同一要素的多種預(yù)報結(jié)果綜合在一起,從而得出一個優(yōu)于單一預(yù)報方法的預(yù)報結(jié)論,這就是預(yù)報方法的集成問題。
本文分析了傳統(tǒng)的基于加權(quán)的集成預(yù)報方法及其在氣象預(yù)測應(yīng)用中存在的問題,在此基礎(chǔ)上提出了一種新的基于數(shù)據(jù)挖掘的集成預(yù)報方法,該方法選用BP人工神經(jīng)網(wǎng)絡(luò)建立集成預(yù)報分類器,對文中BP人工神經(jīng)網(wǎng)絡(luò)、多元回歸、SVM、決策樹模型四種子預(yù)報方法的預(yù)報結(jié)果進(jìn)行集成和綜合。
基于數(shù)據(jù)挖掘的集成預(yù)報方法利用從子預(yù)報方法中篩選的訓(xùn)練集進(jìn)行訓(xùn)練,得到集成預(yù)報分類器;該集成預(yù)報分類器可以根據(jù)環(huán)流因子的輸入,直接得到一種最優(yōu)子預(yù)報方法,然后利用得到的最優(yōu)子預(yù)報方法去預(yù)測,將最優(yōu)子預(yù)報方法的預(yù)報結(jié)果作為集成預(yù) 報的預(yù)報結(jié)果。
實驗數(shù)據(jù)集描述
實驗使用的輸入數(shù)據(jù)是環(huán)流因子,是由國家氣候中心氣候系統(tǒng)診斷預(yù)測室再處理資料,資料數(shù)據(jù)全都為整型。
環(huán)流因子數(shù)據(jù)

30年降水?dāng)?shù)據(jù)

本文介紹了四種常見的氣象子預(yù)報方法:BP人工神經(jīng)網(wǎng)絡(luò)、多元回歸、SVM、決策樹模型,并通過實際的數(shù)據(jù)集進(jìn)行預(yù)報檢驗。從實驗結(jié)果可以得出,對于不同的預(yù)報環(huán)境和預(yù)報樣本,并沒有哪一種子預(yù)報方法的預(yù)報結(jié)果能夠保證始終是最優(yōu)的。
環(huán)流因子=read.csv("環(huán)流因子.csv")
降水?dāng)?shù)據(jù)=read.csv("30年降水?dāng)?shù)據(jù).csv")

轉(zhuǎn)換降水?dāng)?shù)據(jù)
?
y=0 ?? ?
?for(i in 2:ncol(降水?dāng)?shù)據(jù))){ ?
?y=c(y,降水?dāng)?shù)據(jù)[,i])
環(huán)流因子=環(huán)流因子[1:length(yy),] ?? ?
?datanew=data.frame(降水?dāng)?shù)據(jù)=yy,環(huán)流因子[,-1])
?

多元回歸
model=lm(降水?dāng)?shù)據(jù)~.,data=datanew)

plot(datanew[,2:1]) ?
?abline(model)

svm支持向量機(jī)
現(xiàn)在我們在訓(xùn)練集上使用來訓(xùn)練線性SVM
## ?## ?## Parameters: ?##??? SVM-Type:? eps-regression ?##? SVM-Kernel:? radial ?##??????? cost:? 1 ?##?????? gamma:? 0.01351351 ?##???? epsilon:? 0.1 ?## ?## ?## Number of Support Vectors:? 107
繪制擬合圖
points(datanew[,2], predictedY, col = "red", pch=4)

mse <- function(error) ?
?{ ?
?? sqrt(mean(error^2)) ?
?}
## [1] 599.4382
決策樹
繪制決策樹
## Variables actually used in tree construction: ?## [1] X.19 X.30 X.57 X.72 X.73 ?## ?## Root node error: 328275991/372 = 882462draw.tree(CARTmodel)

根據(jù)cp值對決策樹進(jìn)行剪枝?
?cable[which.min(CARTmodel$cptable[,"xerror"]),"CP"]
對數(shù)據(jù)進(jìn)行預(yù)測
plot(tree.pred,? datanew.test$降水?dāng)?shù)據(jù) ) ?
?abline(0,1)

神經(jīng)網(wǎng)絡(luò)
y=datanew$降水?dāng)?shù)據(jù) ?
#? y<-data.frame((y-min(y))/(max(y)-min(y))) ?
?names(y)<-'y' ?? ?
?mod1<-net(datanew
summary(mod1)
## a 75-10-1 network with 771 weights ?
## options were - linear output units ?
##?? b->h1? i1->h1? i2->h1? i3->h1? i4->h1? i5->h1? i6->h1? i7->h1? i8->h1 ?
##?? -0.26??? 0.53?? -0.19??? 0.00?? -0.39?? -0.57??? 0.40?? -0.05??? 0.54 ?##? i9->h1 i10->h1 i11->h1 i12->h1 i13->h1 i14->h1 i15->h1 i16->h1 i17->h1 ?
##??? 0.57?? -0.51??? 0.53? ??0.66?? -0.18?? -0.15??? 0.36?? -0.67?? -0.54 ?## i18->h1 i19->h1 i20->h1 i21->h1 i22->h1 i23->h1 i24->h1 i25->h1 i26->h1 ?
? ?
##?? h9->o? h10->o ?
##?? 47.66?? 55.81

模型集成
在實際應(yīng)用中,對每個具體的問題,各種預(yù)報方法得出的結(jié)果通常是不一致的,因而不知道如何將它們統(tǒng)一起來。一般地,每個具體預(yù)報方法的預(yù)報思想不同,其適應(yīng)的具體環(huán)境也就不同,得到的預(yù)報結(jié)果的準(zhǔn)確程度也不相同,對某類數(shù)據(jù)有較好預(yù)報結(jié)果的方法,對其它數(shù)據(jù)不一定有較好結(jié)果。因此需要采用一種較好的處理方法,把不同數(shù)值模式對同一要素的多種預(yù)報結(jié)果綜合集成在一起,從而得出一個優(yōu)于單一預(yù)報方法的預(yù)報結(jié)論,這就是預(yù)報方法的集成問題。
盡管常用的集成預(yù)報方法有回歸集成、平均集成、多數(shù)表決和加權(quán)集成預(yù)報方法等,然而這些集成預(yù)報方法本質(zhì)上屬于一種基于加權(quán)的集成方法。
本文方法的大致思想如下:以各子預(yù)報方程的歷史擬合樣本作為神經(jīng)網(wǎng)絡(luò)集成預(yù)報模型學(xué)習(xí)矩陣輸入,相應(yīng)的預(yù)報量序列作為學(xué)習(xí)矩陣的期望輸出。只是確定權(quán)值的方式是不斷地進(jìn)行學(xué)習(xí)訓(xùn)練,權(quán)值存在于復(fù)雜的人工神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中,并不是線性和容易理解的。最后,把該子預(yù)報方法的預(yù)報結(jié)果作為集成預(yù)報方法的預(yù)報結(jié)果。
使用神經(jīng)網(wǎng)絡(luò)對訓(xùn)練結(jié)果進(jìn)行集成
? ?
?mod1<-net(trainerror,y,size=10,linout=T)
## # weights:? 61 ?## initial? value 526570419.869292 ?## iter? 10 value 119410102.980870 ?## iter? 20 value 25370475.287456 ?## final? value 25370458.492646 ?## convergedsummary(mod1)## a 4-10-1 network with 61 weights ?## options were - linear output units ?##?? b->h1? i1->h1? i2->h1? i3->h1? i4->h1 ?##??? 0.37? 148.56? 162.50?? -2.06??? 2.30 ?##?? b->h2? i1->h2? i2->h2? i3->h2? i4->h2 ?##??? 0.48? -56.65?? 46.85??? 2.23?? -1.23 ?##?? b->h3? i1->h3? i2->h3? i3->h3? i4->h3 ?##?? -0.11??? 7.56?? 15.11?? -1.18??? 1.41 ?##?? b->h4? i1->h4? i2->h4? i3->h4? i4->h4 ?##??? 0.42? -14.15? -11.55??? 1.49?? -1.12 ?##?? b->h5? i1->h5? i2->h5? i3->h5? i4->h5 ?##?? -0.34?? 57.24?? 79.60 -176.40??? 6.91 ?##?? b->h6? i1->h6? i2->h6? i3->h6? i4->h6 ?##?? -0.44?? -0.22??? 6.17??? 0.82?? -0.01 ?##?? b->h7? i1->h7? i2->h7? i3->h7? i4->h7 ?##??? 0.03?? -0.14?? -0.61??? 0.04?? -0.14 ?##?? b->h8? i1->h8? i2->h8? i3->h8? i4->h8 ?##?? -0.34?? 65.01? -72.91? -10.22??? 9.67 ?##?? b->h9? i1->h9? i2->h9? i3->h9? i4->h9 ?##??? 0.20?? -1.31?? 14.80??? 0.90?? -0.73 ?##? b->h10 i1->h10 i2->h10 i3->h10 i4->h10 ?##?? -0.46?? -2.63? -23.62?? -0.60??? 1.51 ?##??? b->o?? h1->o?? h2->o?? h3->o?? h4->o?? h5->o?? h6->o?? h7->o?? h8->o ?##? 368.20 -340.26?? -4.79 4963.64 -158.47? 517.21?? 24.37?? -5.77?? 23.41 ?##?? h9->o? h10->o ?##?? 30.60? 336.40
繪制擬合數(shù)據(jù)


最受歡迎的見解
1.R語言實現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸
2.r語言實現(xiàn)擬合神經(jīng)網(wǎng)絡(luò)預(yù)測和結(jié)果可視化
3.python用遺傳算法-神經(jīng)網(wǎng)絡(luò)-模糊邏輯控制算法對樂透分析
4.R語言結(jié)合新冠疫情COVID-19股票價格預(yù)測:ARIMA,KNN和神經(jīng)網(wǎng)絡(luò)時間序列分析
5.Python TensorFlow循環(huán)神經(jīng)網(wǎng)絡(luò)RNN-LSTM神經(jīng)網(wǎng)絡(luò)預(yù)測股票市場價格時間序列和MSE評估準(zhǔn)確性
6.Matlab用深度學(xué)習(xí)長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對文本數(shù)據(jù)進(jìn)行分類
7.用于NLP的seq2seq模型實例用Keras實現(xiàn)神經(jīng)機(jī)器翻譯
8.R語言用FNN-LSTM假近鄰長短期記憶人工神經(jīng)網(wǎng)絡(luò)模型進(jìn)行時間序列深度學(xué)習(xí)預(yù)測
9.Python用RNN循環(huán)神經(jīng)網(wǎng)絡(luò):LSTM長期記憶、GRU門循環(huán)單元、回歸和ARIMA對COVID-19新冠疫情新增人數(shù)時間序列預(yù)測