高心怡,韓 飛
(江蘇大學(xué) 計(jì)算機(jī)與通信工程學(xué)院,江蘇 鎮(zhèn)江 212013)
對(duì)于中國(guó)這個(gè)糧食大國(guó)來(lái)說(shuō),農(nóng)業(yè)經(jīng)濟(jì)預(yù)測(cè)十分重要,它為國(guó)家、政企及其他有關(guān)部門(mén)把握未來(lái)經(jīng)濟(jì)運(yùn)行狀況、判斷發(fā)展后勁、制定相關(guān)決策等提供科學(xué)依據(jù).早先,國(guó)內(nèi)外學(xué)者對(duì)農(nóng)業(yè)經(jīng)濟(jì)預(yù)測(cè)進(jìn)行了大量研究,提出了很多預(yù)測(cè)方法,如因果預(yù)測(cè)法、時(shí)間序列預(yù)測(cè)法、決策樹(shù)法、先期調(diào)查等,這些都是傳統(tǒng)經(jīng)濟(jì)預(yù)測(cè)的基本方法.此后有學(xué)者提出BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)模型[1-3],但BP神經(jīng)網(wǎng)絡(luò)在非線性預(yù)測(cè)中易于陷入局部極值,影響預(yù)測(cè)精度,即農(nóng)業(yè)經(jīng)濟(jì)預(yù)測(cè)對(duì)于模型的非線性預(yù)測(cè)性能有著比較高的要求.支持向量機(jī)回歸算法[4]是一種用于趨勢(shì)預(yù)測(cè)的支持向量機(jī),它通過(guò)一個(gè)映射函數(shù)將輸入數(shù)據(jù)非線性地映射到高維特征空間,并在此高維空間進(jìn)行回歸.由于支持向量機(jī)中核參數(shù)γ、懲罰參數(shù)C的選取對(duì)其預(yù)測(cè)效果有一定影響,因此求得較優(yōu)的參數(shù)組合可以提高支持向量機(jī)的預(yù)測(cè)性能.粒子群算法(PSO)[5]是根據(jù)鳥(niǎo)群覓食行為而產(chǎn)生的仿生設(shè)計(jì)算法,屬于一種較為簡(jiǎn)單有效的全局優(yōu)化算法,但在進(jìn)化后期收斂慢,粒子容易趨于同一化,失去多樣性,優(yōu)化精度較差.針對(duì)此缺陷,文中提出一種改進(jìn)的基于混合智能算法的支持向量機(jī)的農(nóng)業(yè)經(jīng)濟(jì)預(yù)測(cè)方法,融合了改進(jìn)的PSO算法與人工魚(yú)群算法,通過(guò)自身內(nèi)部的變異交叉以及族外競(jìng)爭(zhēng)機(jī)制,使得目標(biāo)函數(shù)值向全局最優(yōu)解快速收斂,提高粒子的多樣性以及算法的全局搜索能力,最終得到支持向量機(jī)的最優(yōu)參數(shù)組合.并以BP 神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)模型、PSO-SVM預(yù)測(cè)模型與文中預(yù)測(cè)模型進(jìn)行試驗(yàn)對(duì)比,結(jié)果表明基于混合智能算法的支持向量機(jī)的農(nóng)業(yè)經(jīng)濟(jì)預(yù)測(cè)模型比其他方法有著更高的預(yù)測(cè)精度.
支持向量機(jī)(support vector machine,SVM)是一種機(jī)器學(xué)習(xí)過(guò)程,其基本原理是將樣本數(shù)據(jù)映射到一個(gè)高維空間,并在高維空間中尋找一個(gè)最大間隔超平面,將不同類(lèi)別的樣本數(shù)據(jù)隔離,使得間隔最大,從而正確分類(lèi)樣本數(shù)據(jù).對(duì)于給定的線性可分?jǐn)?shù)據(jù)集{xi,yi},i=1,2,…,l,yi∈{-1,+1},xi∈Rn,滿足
yi[w·xi+b]-1≥0,i=1,2,…,l,
(1)
利用Lagrange乘子法并滿足KKT(Karush Kuhn Tucher)條件,最終可得到解上述問(wèn)題的最優(yōu)分類(lèi)函數(shù)為
(2)
式中:a*,b*為確定最優(yōu)劃分超平面的參數(shù).
對(duì)于線性不可分情況,通過(guò)在約束條件中引入松弛變量以及在目標(biāo)函數(shù)中加入懲罰變量來(lái)解決這一問(wèn)題.這時(shí)廣義最優(yōu)分類(lèi)面問(wèn)題可以進(jìn)一步演化為求取下列函數(shù)的極小值:
(3)
式中:C為懲罰系數(shù),用于控制錯(cuò)分樣本懲罰的程度.
支持向量機(jī)引入核函數(shù),避免了高維空間的向量?jī)?nèi)積而造成大量運(yùn)算.目前,徑向基函數(shù)是應(yīng)用最廣泛的核函數(shù),函數(shù)形式如下:
K(xi,yi)=exp(-γ‖xi-xj‖2),γ>0,
(4)
式中:參數(shù)γ是核函數(shù)中的重要參數(shù),影響著SVM分類(lèi)算法的復(fù)雜程度[6].
綜上所述,支持向量機(jī)中核參數(shù)γ、懲罰參數(shù)C的選取對(duì)其預(yù)測(cè)效果有一定影響[7],因此,擬采用混合智能算法選取合適的支持向量機(jī)參數(shù)組合.
粒子群算法(particle swarm optimization,PSO)將搜索最優(yōu)解的過(guò)程看成是鳥(niǎo)類(lèi)覓食活動(dòng),用粒子來(lái)模擬鳥(niǎo)類(lèi)個(gè)體,每個(gè)粒子可視為n維搜索空間中的一個(gè)搜索個(gè)體,粒子的當(dāng)前位置即為對(duì)應(yīng)優(yōu)化問(wèn)題的一個(gè)候選解,粒子的飛行過(guò)程即為該個(gè)體的搜索過(guò)程.粒子的飛行速度可以根據(jù)粒子的歷史最優(yōu)位置和種群的歷史最優(yōu)位置進(jìn)行動(dòng)態(tài)調(diào)整.粒子僅具有兩個(gè)屬性:速度和位置,速度代表移動(dòng)的快慢,位置代表移動(dòng)的方向.每個(gè)粒子單獨(dú)搜尋的最優(yōu)解叫做個(gè)體極值pbest,當(dāng)前全局最優(yōu)解即為粒子群中最優(yōu)的個(gè)體極值.通過(guò)不斷的迭代,粒子更新速度和位置,最終可以得到滿足終止條件的最優(yōu)解.
設(shè)一個(gè)包含M個(gè)粒子的粒子群在n維空間中進(jìn)行搜索,將食物視為最優(yōu)解,所有的粒子都清楚它們自身的位置.同時(shí),能夠依據(jù)適應(yīng)度的值判斷位置的優(yōu)劣.粒子根據(jù)它們自身的經(jīng)驗(yàn)和群體的經(jīng)驗(yàn)更新粒子的速度和方向,直到能夠達(dá)到停止條件為止.首先對(duì)i個(gè)粒子進(jìn)行初始化,粒子i的位置矢量和速度矢量分別記做xi=(xi1,xi2,…,xin)和vi=(vi1,vi2,…,vin,記為pi=(pi1,pi2,…,pin),群體最優(yōu)解為gbest,記為gi=(gi1,gi2,…,gin),在迭代期間,粒子i在n維子空間中的飛行速度和位置按下式調(diào)整:
vid=wvid+c1r1(pid-xid)+c2r2(pgd-xid),
(5)
xid=xid+vid,
(6)
(7)
式中:i=1,2,…,M;d=1,2,…,n;w為慣性權(quán)重;c1和c2是加速常數(shù);r1和r2是[0,1]之間的隨機(jī)數(shù);vmax,vmin是粒子運(yùn)動(dòng)速度的限制范圍.
在PSO的搜索過(guò)程中,粒子之間會(huì)互相分享信息而得到最優(yōu)解.這樣的分享方式可以讓粒子在剛開(kāi)始的時(shí)候擁有較快的收斂速度,但是在迭代的后期,粒子的更新受到限制,速度變慢,陷入局部最優(yōu)的可能性增大.因此,需要針對(duì)這些問(wèn)題對(duì)PSO算法加以改進(jìn).
單一的群智能算法通常會(huì)存在許多局限性,例如蟻群算法不能處理連續(xù)優(yōu)化問(wèn)題,混合蛙跳算法易陷入局部最優(yōu)等問(wèn)題.因此很多學(xué)者通過(guò)融合多種算法特性來(lái)改進(jìn)這些缺陷,同時(shí)提出了混合群智能算法優(yōu)化支持向量機(jī)參數(shù)[8-12]的方法.群智能算法之間的混合使用,可以幫助尋找到更優(yōu)的參數(shù)組合,并且更大程度地提高SVM 的預(yù)測(cè)與分類(lèi)精度,多數(shù)混合群智能算法在SVM 參數(shù)優(yōu)化的試驗(yàn)結(jié)果中表明,改進(jìn)的算法不僅具備了其中一種群智能算法的優(yōu)點(diǎn),還具備其他群智能算法的優(yōu)點(diǎn),比單一的算法更加可行且有效.
遺傳算法具有更好的全局尋優(yōu)能力以及能自動(dòng)獲取和指導(dǎo)優(yōu)化的搜索空間,自適應(yīng)地調(diào)整搜索方向,不需要確定的規(guī)則.而人工魚(yú)群算法具有尋優(yōu)速度快、全局尋優(yōu)能力以及較強(qiáng)的并行處理能力等優(yōu)點(diǎn).兩者皆能改善粒子群算法易于陷入局部最優(yōu)的缺陷,因此采用這兩種算法對(duì)粒子群算法進(jìn)行改進(jìn).針對(duì)PSO易于陷入局部最優(yōu)解的缺陷,文中提出一種引入內(nèi)部交叉變異與外部競(jìng)爭(zhēng)機(jī)制的算法.
PSO算法提高個(gè)體的方式是分享個(gè)體之間的有用信息以及個(gè)體的自學(xué)習(xí).改進(jìn)的PSO算法在個(gè)體提高以后,采用GA算法中的交叉和變異步驟,得到更加優(yōu)秀的下一代群體,流程圖如圖1所示.新的算法既保證了粒子群的個(gè)體之間交流與位置轉(zhuǎn)移的思想,又同時(shí)融合了遺傳算法強(qiáng)大的全局搜索性能.這樣,經(jīng)過(guò)改進(jìn)的算法充分利用了粒子群算法中的種群的信息和個(gè)體的信息,其尋優(yōu)過(guò)程更有效率,所得到的結(jié)果精度更高.
圖1 改進(jìn)的粒子群算法流程圖
改進(jìn)的粒子群算法首先計(jì)算適應(yīng)度函數(shù)值,對(duì)群體中的個(gè)體按適應(yīng)度函數(shù)值的大小進(jìn)行排序,再采用PSO算法對(duì)群體中的優(yōu)秀個(gè)體進(jìn)行提高,提高以后的個(gè)體被保留并進(jìn)入下一代,其他適應(yīng)度函數(shù)值差的個(gè)體則被淘汰.對(duì)已經(jīng)提高的優(yōu)秀個(gè)體再通過(guò)交叉和變異步驟得到剩下的個(gè)體.采用新方法得到的下一代個(gè)體比采用單一算法得到的下一代個(gè)體要優(yōu)秀,不過(guò)這仍然是在一個(gè)種群中不斷優(yōu)化的內(nèi)部競(jìng)爭(zhēng).
人工魚(yú)群算法(artificial fish-swarm algorithm,AFSA) 是一種基于模擬魚(yú)群行為的隨機(jī)搜索優(yōu)化算法.它是說(shuō)在一片水域中,魚(yú)往往能自行或尾隨其他魚(yú)找到營(yíng)養(yǎng)物質(zhì)多的地方,因而魚(yú)生存數(shù)目最多的地方一般就是本水域中營(yíng)養(yǎng)物質(zhì)最多的地方.人工魚(yú)群算法就是根據(jù)仿生學(xué)特點(diǎn),通過(guò)構(gòu)造人工魚(yú)來(lái)模仿魚(yú)群的覓食、聚群及追尾行為,從而實(shí)現(xiàn)尋優(yōu),過(guò)程如下:
(8)
為了加強(qiáng)個(gè)體之間的競(jìng)爭(zhēng)壓力,將個(gè)體的內(nèi)部的競(jìng)爭(zhēng)擴(kuò)大到不同種群之間,將進(jìn)化種群中的最優(yōu)解的個(gè)體與隨機(jī)組成的種群的最優(yōu)解形成競(jìng)爭(zhēng).引入AFSA算法,通過(guò)族外競(jìng)爭(zhēng)使目標(biāo)函數(shù)值向全局最優(yōu)解快速收斂.既利用了PSO算法追逐當(dāng)前全局最優(yōu)點(diǎn)來(lái)保證算法的收斂性,又利用人工魚(yú)群算法的搜索隨機(jī)性,加大了搜索范圍,克服了PSO陷入局部極值點(diǎn)和AFSA算法運(yùn)行速度慢等缺點(diǎn).
GAPSO-AFSA算法的基本思想:將種群一分為二成A,B兩個(gè)子群體,在每次的迭代中,A子群體利用改進(jìn)的粒子群算法進(jìn)化,而B(niǎo)子群體利用人工魚(yú)群算法進(jìn)化,然后通過(guò)對(duì)比兩種進(jìn)化算法的最優(yōu)解得到整個(gè)群體中能夠搜索到的最優(yōu)解,流程如圖2所示.這種算法既利用了改進(jìn)的粒子群算法追逐當(dāng)前全局最優(yōu)點(diǎn)來(lái)保證算法的收斂性,又利用人工魚(yú)群算法的搜索隨機(jī)性,加大了算法的搜索范圍,同時(shí)克服了PSO易陷入局部極值點(diǎn)和 AFSA 算法尋優(yōu)精度不高等缺點(diǎn),從而兼顧了算法的優(yōu)化精度和效率,提高了算法的優(yōu)化性能.
圖2 GAPSO-AFSA算法的流程圖
GAPSO-AFSA預(yù)測(cè)模型基本流程:
1) 對(duì)所有樣本數(shù)據(jù)進(jìn)行初始化.
2) 人工魚(yú)群算法的思想:
① 設(shè)定魚(yú)群的參數(shù),包括魚(yú)群規(guī)模m,最大迭代次數(shù)iter,最大嘗試次數(shù)try_number,最大移動(dòng)步長(zhǎng)step,擁擠度因子δ等;
② 計(jì)算初始適應(yīng)度值,把最優(yōu)值存儲(chǔ)起來(lái);
③ 計(jì)算得到追尾行為和群聚行為的值,魚(yú)的前進(jìn)方向即為最優(yōu)的行為值,同時(shí)與存儲(chǔ)起來(lái)的最優(yōu)值進(jìn)行比較,如果優(yōu)于存儲(chǔ)起來(lái)的最優(yōu)值則更新最優(yōu)解;
④ 判斷是否已經(jīng)滿足最大迭代次數(shù),若已經(jīng)滿足則終止尋優(yōu)過(guò)程,輸出存儲(chǔ)的最優(yōu)值;否則,返回到②,繼續(xù)運(yùn)行.
3) GAPSO算法的基本思想:
① 生成初始種群,初始化種群,賦值種群中的參數(shù);
② 計(jì)算種群中個(gè)體的初始適應(yīng)度值,按適應(yīng)度的值大小進(jìn)行排序,保留更優(yōu)的前ps/2個(gè)個(gè)體,拋棄后ps/2個(gè)個(gè)體;
③ 對(duì)前ps/2中的個(gè)體進(jìn)行提高和進(jìn)化并直接進(jìn)入下一代;
④ 對(duì)下一代的剩下的ps/2個(gè)體,從已經(jīng)進(jìn)化后的ps/2個(gè)個(gè)體中按競(jìng)爭(zhēng)選擇方法,先隨機(jī)選擇2個(gè)較為優(yōu)秀的個(gè)體,然后比較2個(gè)個(gè)體的適應(yīng)度函數(shù)值大小,選擇其中適應(yīng)度函數(shù)值大的作為父體,再以同樣的方式選擇一個(gè)母體,最后以概率pc進(jìn)行交叉,生成2個(gè)新的個(gè)體,重復(fù)上述過(guò)程直到獲得ps/2個(gè)個(gè)體;
⑤ 對(duì)于選擇交叉后獲得的ps/2個(gè)個(gè)體以概率pm進(jìn)行變異.變異操作完后,把ps/2個(gè)個(gè)體帶入到下一代種群中再次競(jìng)爭(zhēng);
⑥ 判斷是否達(dá)到迭代次數(shù)或者當(dāng)前種群是否滿足預(yù)設(shè)的條件,若滿足則終止尋優(yōu),否則跳轉(zhuǎn)回②.
4) 比較2種算法所取得的懲罰系數(shù)C和核參數(shù)γ的值,取最佳組合(C,γ).
5) 將最優(yōu)(C,γ)帶入到SVM預(yù)測(cè)模型中對(duì)數(shù)據(jù)進(jìn)行預(yù)測(cè)試驗(yàn).
文中使用的數(shù)據(jù)源自于國(guó)家統(tǒng)計(jì)局歷年糧食報(bào)告(中國(guó)1949—2016年的糧食產(chǎn)量),如圖3所示.選擇1949年至2016年我國(guó)糧食的產(chǎn)量數(shù)據(jù)及影響其產(chǎn)量的因素作為數(shù)據(jù)集,數(shù)據(jù)源自中國(guó)國(guó)家統(tǒng)計(jì)局網(wǎng)站.選取了全國(guó)總體統(tǒng)計(jì)數(shù)據(jù)以及江蘇、山西、黑龍江等多個(gè)省或直轄市的地區(qū)統(tǒng)計(jì)數(shù)據(jù),由于影響糧食產(chǎn)量的因素眾多,并且各因素之間還有相互影響的可能,因此在綜合考慮以后,選擇糧食播種面積、農(nóng)作物有效灌溉面積、施用農(nóng)用化肥的總量、本年度末所擁有的農(nóng)業(yè)機(jī)械總動(dòng)力、農(nóng)村用電總量以及從事農(nóng)業(yè)的勞動(dòng)力共六項(xiàng)指標(biāo)作為函數(shù)的輸入值,以糧食總產(chǎn)量這一項(xiàng)作為整個(gè)函數(shù)的輸出.
圖3 中國(guó)實(shí)際糧食產(chǎn)量曲線圖
選取1949—1999 年的糧食產(chǎn)量數(shù)據(jù)作為訓(xùn)練數(shù)據(jù),以每5年的數(shù)據(jù)預(yù)測(cè)下一年的數(shù)據(jù),分別采用BP,PSO-SVM[11],GAPSO-AFSA算法對(duì)數(shù)據(jù)進(jìn)行訓(xùn)練,同時(shí)將訓(xùn)練好的預(yù)測(cè)模型帶入試驗(yàn)數(shù)據(jù)進(jìn)行測(cè)試.對(duì)于混合智能算法選取合適的支持向量機(jī)的參數(shù)組合,其中徑向基核參數(shù)γ搜索范圍為[0.1,10],懲罰參數(shù)C的搜索范圍為[1,500],設(shè)定染色體種群大小為40,并設(shè)定最大進(jìn)化代數(shù)為160,交叉率與變異率分別為0.6,0.003,try_number=3,Visual和Step按式(8)動(dòng)態(tài)調(diào)整,s=3.
將得到的最優(yōu)參數(shù)組合賦予支持向量機(jī)以獲得優(yōu)化的支持向量機(jī)預(yù)測(cè)模型.以BP神經(jīng)網(wǎng)絡(luò)、PSO-SVM預(yù)測(cè)模型與文中GAPSO-AFSA預(yù)測(cè)模型進(jìn)行對(duì)比分析,三者的預(yù)測(cè)產(chǎn)量與實(shí)際值如圖4所示,BP神經(jīng)網(wǎng)絡(luò)平均相對(duì)誤差為1.034 0,PSO-SVM預(yù)測(cè)模型的平均相對(duì)誤差為0.020 4,而GAPSO-AFSA平均相對(duì)誤差僅為0.014 1.表1為2005—2016年GAPSO-AFSA預(yù)測(cè)模型及PSO-SVM預(yù)測(cè)模型的差值比較.由表可見(jiàn),基于混合智能算法的支持向量機(jī)的農(nóng)業(yè)經(jīng)濟(jì)預(yù)測(cè)模型比其他單一預(yù)測(cè)模型有著更高的預(yù)測(cè)精度.
圖4 各算法預(yù)測(cè)的糧食產(chǎn)量以及實(shí)際產(chǎn)量對(duì)比圖
表1 PSO-SVM和GAPSO-AFSA預(yù)測(cè)模型對(duì)比
為了進(jìn)一步驗(yàn)證文中所提出的GAPSO-AFSA預(yù)測(cè)模型的優(yōu)越性,又分別采用GAPSO-AFSA與PSO-SVM 預(yù)測(cè)模型對(duì)江蘇省糧食產(chǎn)量、黑龍江省糧食產(chǎn)量、山西省糧食產(chǎn)量等多個(gè)案例進(jìn)行測(cè)試與分析,測(cè)試結(jié)果表明采用PSO-SVM預(yù)測(cè)糧食產(chǎn)量的平均相對(duì)誤差處于0.02 ~ 0.05,而基于GAPSO-AFSA的糧食產(chǎn)量預(yù)測(cè)的平均相對(duì)誤差處于0.007 ~ 0.024,可以看出,基于混合智能算分的支持向量機(jī)預(yù)測(cè)模型有著更高的預(yù)測(cè)精度.
提出了基于混合智能算法的支持向量機(jī)的農(nóng)業(yè)經(jīng)濟(jì)預(yù)測(cè)方法,支持向量機(jī)通過(guò)一個(gè)映射函數(shù)將輸入數(shù)據(jù)非線性地映射到高維特征空間,并在此高維空間進(jìn)行回歸,通過(guò)混合智能算法選取合適的支持向量機(jī)參數(shù)組合,以PSO-SVM預(yù)測(cè)模型與文中的GAPSO-AFSA預(yù)測(cè)模型進(jìn)行對(duì)比分析.試驗(yàn)結(jié)果表明,基于混合智能算法的支持向量機(jī)的糧食產(chǎn)量預(yù)測(cè)模型比基于單一智能算法支持向量機(jī)的預(yù)測(cè)模型有著更高預(yù)測(cè)精度.與此同時(shí),通過(guò)此次試驗(yàn),以下兩點(diǎn)改進(jìn)及創(chuàng)新還有待后續(xù)研究:①雖然引入人工魚(yú)群算法提高了算法的精度,但此算法的時(shí)間復(fù)雜度較高,在迭代的過(guò)程中消耗的時(shí)間稍長(zhǎng),因此在未來(lái)的工作中可對(duì)其進(jìn)行改進(jìn),以提高算法的效率;② 由于影響糧食產(chǎn)量因素較多也比較復(fù)雜,后續(xù)工作中還將引入多目標(biāo)算法,通過(guò)多目標(biāo)對(duì)多個(gè)因素的最優(yōu)規(guī)劃來(lái)得到更精確的預(yù)測(cè)值.