劉園園,賀興時
(西安工程大學(xué) 理學(xué)院,西安 710048)
中國證券市場于20世紀末逐漸形成,經(jīng)過20多年的發(fā)展,已成為國民經(jīng)濟發(fā)展的重要組成部分。[1]隨著國民經(jīng)濟的發(fā)展以及人們對投資理財?shù)闹匾暎善蓖顿Y受到越來越多的關(guān)注,因其收益比較高,并且股票的投資門檻較低,對于投資者來說是一個不錯的投資渠道,故逐漸成為大多數(shù)人的投資理財方式之一。然而國內(nèi)股市發(fā)展時間較短,各類規(guī)章制度尚不夠完善。加之股市是一個極其復(fù)雜的非線性時變動態(tài)系統(tǒng),股票價格受各種宏觀、微觀因素以及突發(fā)事件的影響[2],股價的走勢往往呈現(xiàn)出較強的非線性特征。為了降低投資風(fēng)險,保證穩(wěn)定的投資收益,人們迫切需要一種合理的、有效的方法來掌握股價的變化規(guī)律,并預(yù)測其走勢[3],因此研究股票市場,構(gòu)建一種高效的股價預(yù)測模型,具有十分重要的現(xiàn)實意義。
股票預(yù)測即以股市信息及統(tǒng)計資料為依據(jù),運用數(shù)學(xué)方法預(yù)測未來的股票價格。雖然學(xué)術(shù)界提出了多種方法來預(yù)測股價,如多元回歸、時間序列法、混沌理論、證券投資分析法等[4-7],但由于諸多內(nèi)部、外部因素的影響,致使股票預(yù)測時存在很多難點[8],如存在高噪聲數(shù)據(jù)、股價波動呈非線性特點及投資者意向的不確定性,因此傳統(tǒng)的線性分析方法在解決此類非線性問題時有一定的局限性,預(yù)測結(jié)果難以令人滿意。人工神經(jīng)網(wǎng)絡(luò)的非線性關(guān)系映射能力極強[9-10],不需要構(gòu)建非線性系統(tǒng)的數(shù)學(xué)模型或顯示數(shù)學(xué)解析式,便能夠?qū)崿F(xiàn)任意維數(shù)向量之間的映射關(guān)系,非常適用于對股市等非線性系統(tǒng)的預(yù)測,其中BP(Back Propagation)神經(jīng)網(wǎng)絡(luò)在此方面表現(xiàn)出了極其強大的能力。它不僅能夠?qū)⒂嘘P(guān)經(jīng)濟活動類的知識從歷史數(shù)據(jù)中自動提取出來,還能夠克服傳統(tǒng)的定量預(yù)測方法中存在的諸多局限及困難,同時也能夠避免人為因素的影響。BP神經(jīng)網(wǎng)絡(luò)的優(yōu)勢雖然明顯,但也存在著諸多不足,如BP調(diào)整其權(quán)、閾值采用的是梯度下降法,這樣會導(dǎo)致網(wǎng)絡(luò)收斂速度慢且易陷入局部極小值點。因此,學(xué)者為了彌補算法自身的缺陷,將兩種以上的算法結(jié)合到一起,規(guī)避算法缺陷,凸顯算法優(yōu)勢。目前主要研究成果有以下幾個方面:許曉兵等人[11]提出將小波變換和BP神經(jīng)網(wǎng)絡(luò)結(jié)合的股價預(yù)測算法,對股票價格先去干擾再預(yù)測,能夠提高預(yù)測精度,但去干擾的參數(shù)選擇對于股價的預(yù)測影響較大。尹璐[12]提出了一種利用遺傳算法優(yōu)化BP網(wǎng)絡(luò)初始權(quán)值和閾值,從而實現(xiàn)股價預(yù)測和發(fā)掘。但大量實驗表明,隨著時間的推移,該算法模型易使算法的絕對誤差呈上升趨勢變化。劉媛媛等人[13]提出了一種將遺傳算法與BP網(wǎng)絡(luò)相結(jié)合的算法,能夠提高收斂速度、改善尋優(yōu)精度,從而提高預(yù)測精度。Huang Fu-Yuan等人[14]提出了一種利用蜂群算法來優(yōu)化模糊神經(jīng)網(wǎng)絡(luò)的股價預(yù)測算法,該算法提高了BP神經(jīng)網(wǎng)絡(luò)的預(yù)測性能。
智能算法近年來受到諸多學(xué)者的關(guān)注,如遺傳算法、蟻群算法、布谷鳥算法、螢火蟲算法等,其中螢火蟲算法(Firefly Algorithm,FA)[15]概念簡單,流程清晰,需要調(diào)整的參數(shù)較少,收斂速度較快,同時搜索精度較高,更加容易實現(xiàn)。本文在詳細研究了標準BP算法和標準FA算法原理的基礎(chǔ)上,針對FA算法存在的缺陷,通過將混沌優(yōu)化方法應(yīng)用到螢火蟲算法中,并對螢火蟲算法中的步長因子進行自適應(yīng)調(diào)整,提出了一種自適應(yīng)螢火蟲優(yōu)化算法(SFA);針對BP算法的不足,提出了利用自適應(yīng)的螢火蟲算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的方法,改善股票的預(yù)測精度、提高BP算法的收斂速度,據(jù)此對4種股票指數(shù)走勢進行預(yù)測。通過與傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)、基于FA算法的BP網(wǎng)絡(luò)模型(FA-BP)對比,發(fā)現(xiàn)基于SFA算法的BP網(wǎng)絡(luò)模型(SFA-BP)明顯優(yōu)于另外兩種模型,能有效預(yù)測股票價格。
螢火蟲算法(FA)的核心思想是通過亮度比較來調(diào)整位置、更新數(shù)據(jù),即亮度大的螢火蟲吸引亮度小的螢火蟲向其移動,同時兩者均更新自身位置。故亮度、吸引度、位置更新公式為螢火蟲算法中的幾個要素。 當(dāng)螢火蟲i的亮度大于螢火蟲j的亮度時,螢火蟲j向i移動。故有如下定義:
(1)螢火蟲i對j的相對亮度為:
(1)
其中:Ii為螢火蟲i的最大熒光亮度;γ為光強吸收系數(shù),通常設(shè)為常數(shù);rij為螢火蟲i到j(luò)的空間距離。
(2)螢火蟲i對j的吸引力為:
(2)
其中:β0為在光源(r=0)處的吸引力,是最大吸引力。
(3)螢火蟲j向i移動并進行位置更新,螢火蟲j的位置更新公式如下:
Xj(t+1)=Xj(t)+βij(Xi(t)-Xj(t))+α(rand-1/2)。
(3)
其中:t為迭代次數(shù);Xi、Xj表示螢火蟲i與j的空間位置;步長因子α為[0,1]上的常數(shù);rand是[0,1]上的隨機因子,且服從均勻分布。 由于其他螢火蟲無法吸引最亮的螢火蟲,故最亮的螢火蟲位置更新公式不能按式(3)執(zhí)行。
下面給出最亮螢火蟲位置更新公式:
XB(t+1)=XB(t)+α(rand-1/2)。
(4)
基本螢火蟲算法步驟如下:
Step 1:設(shè)置相關(guān)參數(shù),隨機初始化n個候選解作為螢火蟲的初始種群。
Step 2:計算適應(yīng)度值,更新空間位置,重新計算各螢火蟲的亮度、吸引度,計算移動到的新位置。
Step 3:評估新解,更新螢火蟲熒光亮度,排列各螢火蟲,并且找出當(dāng)前最優(yōu)解。
Step 4:移動最亮螢火蟲。
Step 5:判斷是否滿足迭代結(jié)束條件:若滿足,轉(zhuǎn)至Step 6;若不滿足,轉(zhuǎn)至Step 2。
Step 6:輸出結(jié)果。
BP神經(jīng)網(wǎng)絡(luò)作為目前應(yīng)用最為廣泛的一項人工神經(jīng)網(wǎng)絡(luò)[16-18],是基于反向傳播的多層前饋式網(wǎng)絡(luò),其特點是信號正向傳播、誤差反向傳播。BP網(wǎng)絡(luò)一般為三層結(jié)構(gòu)的網(wǎng)絡(luò),即輸入層、輸出層和隱含層,隱含層可為單層或多層。各層間的神經(jīng)元僅和相鄰層神經(jīng)元之間通過權(quán)值傳遞信息,同層神經(jīng)元之間無連接。假設(shè)網(wǎng)絡(luò)的輸入層神經(jīng)元個數(shù)、隱含層神經(jīng)元個數(shù)、輸出層神經(jīng)元個數(shù)分別為n、m、s,則BP神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)即為:n-m-s。
BP神經(jīng)網(wǎng)絡(luò)算法步驟如下:
Step 1:初始化各層之間的連接權(quán)值、閾值,ωij為輸入層和隱含層間的連接權(quán)值,ωki為隱含層和輸出層間的連接權(quán)值,θi為隱含層閾值,αk為輸出層閾值,均取[0,1]區(qū)間內(nèi)的隨機值。
Step 2:選擇一個樣本作為輸入樣本xj進行訓(xùn)練,則隱含層第i個節(jié)點的輸入變量zi、輸出變量yi如下:
(5)
(6)
Step 3:通過確定隱含層輸出變量yi,則輸出層第k個節(jié)點處的輸入變量mk、輸出變量nk、輸出變量與實際輸出值Ok的均方差E如下:
(7)
nk=ψ(mk),
(8)
(9)
Step 4:比較E的值與訓(xùn)練目標誤差值的大小:若小于誤差值,則返回Step 2,選擇下一個樣本;反之進行誤差反向傳播,修正各層連接權(quán)值、閾值,直至滿足誤差要求。其中應(yīng)用梯度下降法獲得權(quán)值的學(xué)習(xí)率η的修正公式如下:
(10)
其中:
(11)
(12)
則輸出層的權(quán)值修正公式如下:
Δωkj=-?(Ek-nk)ψ′(mk)yi。
(13)
同理,可得閾值的修正公式。隱含層的權(quán)值、閾值修正公式亦可得。
Step 5:選擇下一個樣本,返回Step 2繼續(xù)訓(xùn)練,直至將所有樣本訓(xùn)練完。
傳統(tǒng)的BP神經(jīng)網(wǎng)絡(luò)是基于梯度下降法獲得的權(quán)值和閾值,是隨機的,且收斂速度較慢,易陷入局部極小值點。而通過BP神經(jīng)網(wǎng)絡(luò)和螢火蟲算法相結(jié)合的方法(FA-BP)可以在一定程度上改善BP算法的不足。其基本思想是:首先由輸入和輸出的參數(shù)將BP神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)加以確定,這樣也就能夠?qū)⑽灮鹣x算法內(nèi)每個螢火蟲個體的編碼長度加以確定。每個螢火蟲個體都包含了BP網(wǎng)絡(luò)的所有權(quán)值、閾值,且螢火蟲個體的維度與BP網(wǎng)絡(luò)中起作用的權(quán)值和閾值的總個數(shù)相對應(yīng)。再根據(jù)適應(yīng)度函數(shù)計算每個螢火蟲個體的適應(yīng)度值,并且進行迭代,更新亮度、吸引度、位置等信息,找到最優(yōu)個體,然后將得到的螢火蟲個體信息給BP網(wǎng)絡(luò)賦值,作為其初始權(quán)值和閾值,最后通過BP算法進行股價預(yù)測,從而得到精確度較高的預(yù)測結(jié)果。
但是,傳統(tǒng)的螢火蟲算法存在對初始解較為依賴、迭代后期收斂速度較慢、搜索精度不高等缺陷。為解決這些問題,提高算法的全局搜索效率,本文提出了一種利用自適應(yīng)的螢火蟲算法來優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的方法,并構(gòu)建了模型(SFA-BP),從而獲得最優(yōu)的初始權(quán)值和閾值,提高預(yù)測精度。
混沌是一種復(fù)雜的非線性系統(tǒng)動態(tài)行為,因其具有對初值敏感依賴性、遍歷性、隨機性等優(yōu)點,近些年得到廣泛關(guān)注,還被廣大學(xué)者應(yīng)用到啟發(fā)式算法中,將其與啟發(fā)式算法相結(jié)合,提高算法的尋優(yōu)性能?;舅枷胧前褍?yōu)化變量空間通過混沌映射線性地映射到混沌變量中,再根據(jù)混沌變量的遍歷性、隨機性進行優(yōu)化搜索,最后將得到的解線性地轉(zhuǎn)化到優(yōu)化變量空間。
Tent映射混沌序列分布均勻,并且搜索效率較高,有更快的收斂速度,其數(shù)學(xué)表達式為:
(14)
該映射經(jīng)貝努力移位變換后數(shù)學(xué)表達式為:
xn+1=(2xn)mod 1。
(15)
利用混沌序列優(yōu)化螢火蟲算法已經(jīng)受到眾多學(xué)者的研究,本節(jié)利用Tent映射具有更好的遍歷均勻性及更快的搜索速度的特點,優(yōu)化螢火蟲算法,其基本思想如下:
(1)利用Tent映射初始化種群。利用Tent映射隨機產(chǎn)生分布均勻的初始種群,這樣既能保證初始種群個體的隨機性,又能使種群多樣性得以提升,從而提高算法的收斂速度。
(2)自適應(yīng)動態(tài)調(diào)整較優(yōu)解混沌搜索。本文假設(shè)算法第i只螢火蟲在尋優(yōu)時出現(xiàn)停滯。對當(dāng)前進化第t代的所有螢火蟲按適應(yīng)值從大到小排序,取前百分之p個個體n(其中p=5),分別求出這n只螢火蟲第d維的最小值Xdmin和最大值Xdmax作為混沌搜索空間。并從這n只螢火蟲中隨機選擇1個螢火蟲位置XB作為基礎(chǔ)解,產(chǎn)生Tent混沌序列,進而用產(chǎn)生的混沌序列中的最優(yōu)解更新螢火蟲位置,使算法跳出局部最優(yōu)。
利用Tent映射對種群中較優(yōu)解進行局部搜索的主要步驟如下:
Step 1:在螢火蟲種群Xi(i=1,2,…,n)中,從前百分之p個個體當(dāng)中隨機選擇一個螢火蟲位置XB作為基礎(chǔ)解。
Step 2:利用式(16)將XB映射到(0,1),其中i=1,2,…,n;d=1,2,…,D。
(16)
(17)
Step 5:計算XC的適應(yīng)度值,并與XB的適應(yīng)度值作比較,保留最好的解。
Step 6:如果達到最大混沌迭代次數(shù),運行結(jié)束,否則轉(zhuǎn)至Step 3。
錦標賽選擇策略是一種基于局部競爭機制的方法,即從種群當(dāng)中隨機選出q個個體進行比較,并且將適應(yīng)度大的個體作為最優(yōu)個體。本文中螢火蟲采用錦標賽選擇策略進行群體位置更新,并且取q=2,給適應(yīng)度大的個體加1分,所有螢火蟲進行此過程,最終得分最高的螢火蟲個體其權(quán)重也最大。因為該選擇策略僅將適應(yīng)度值的相對值當(dāng)作選擇的標準,而對適應(yīng)度值的正負不作要求,故能避免超級個體對螢火蟲算法的影響。適應(yīng)度選擇概率為:
(18)
其中:ci為每個個體的得分。
基本FA算法中步長因子α為常數(shù),采用的是[0,1]間的固定值,且在迭代過程中值不變。較大的α在進化初期有利于算法的全局搜索,但進化后期會降低搜索精度,容易出現(xiàn)震蕩現(xiàn)象,不易找到全局最優(yōu)解;較小的α在進化后期有利于算法的局部搜索,搜索精度較高,但將導(dǎo)致算法收斂速度過慢等問題。本文采用隨著迭代次數(shù)而遞減的 α,從而使算法具有更快的搜索速度和搜索精度,α計算公式如下:
αt+1=αtδ,0.5<δ<1。
(19)
其中:δ為冷卻系數(shù),通過式(19)迭代計算得到的α,每次會得到一個更小的值,從而能更好地平衡螢火蟲算法的全局搜索能力和局部開發(fā)能力。
SFA算法采用Tent混沌優(yōu)化、錦標賽選擇策略和自適應(yīng)步長參數(shù)優(yōu)化方法,避免算法早熟收斂及陷入局部極值,具體算法流程如下:
Step 1:設(shè)置相關(guān)參數(shù):螢火蟲種群規(guī)模n、最大迭代次數(shù)T抑或求解精度σ、步長因子α初始值、最大吸引度β0、光強吸收系數(shù)γ、位置維數(shù)D、混沌搜索最大迭代次數(shù)Cmax。
Step 2:設(shè)置迭代次數(shù)初始值t=0,在可行域中利用Tent映射初始化種群,隨機初始化n個D維候選解作為螢火蟲的初始種群Xi(i=1,2,…,n)。
(20)
Step 3:根據(jù)適應(yīng)值函數(shù)f(Xi)計算各螢火蟲的亮度I(Xi)。初始標志向w(i)=0,記錄最亮螢火蟲為同一螢火蟲的次數(shù)。
Step 4:每只螢火蟲都會向著比自身亮的螢火蟲移動,更新螢火蟲之間距離,更新吸引度值,根據(jù)式(19)更新步長因子,根據(jù)式(3)或(4)進行位置更新,計算亮度。
Step 5:如果f(Xj)>f(Xi),則Xi=Xj,w(i)=0;反之保持原解Xi不變,w(i)=w(i)+1。
Step 6:利用錦標賽選擇策略,通過式(18)計算選擇概率Pi(t)。
Step 7:螢火蟲根據(jù)概率Pi(t)選擇最亮螢火蟲,從而確定自身位置更新,計算適應(yīng)度值,轉(zhuǎn)至Step 5。
Step 8:若w(i)>Limit,則第i只螢火蟲為停滯解,根據(jù)第2.2節(jié)的自適應(yīng)混沌搜索產(chǎn)生一個新解替換停滯解。
Step 9:記錄當(dāng)前所有螢火蟲自身的最優(yōu)解,保存種群當(dāng)前最優(yōu)解。
Step 10:更新t=t+1,判斷是否達到求解精度σ要求或滿足最大迭代次數(shù)T。若滿足,則輸出當(dāng)前最優(yōu)解;反之返回Step 4。
本文采用實數(shù)編碼的形式,將BP神經(jīng)網(wǎng)絡(luò)的連接權(quán)值和閾值表示為螢火蟲個體。該個體被映射為4部分,即輸入層到隱含層間的連接權(quán)值ωij、隱含層的閾值θi、隱含層到輸出層間的連接權(quán)值ωki、輸出層的閾值αk。由于輸入層節(jié)點個數(shù)為n、隱含層節(jié)點個數(shù)為m、輸出層節(jié)點個數(shù)為s,因此,螢火蟲個體的字符串長度為:L=n×m+m+m×s+s。
各連接層之間的權(quán)值和閾值表示如下:
(21)
θi=[θ1,θ2,…,θm]Τ,
(22)
(23)
αk=[α1,α2,…,αs]Τ。
(24)
則螢火蟲個體的編碼形式為:
X= [ω11,ω12,…,ω1m,ω21,ω22,…,ωnm,θ1,θ2,…,θm,
ω11,ω12,…,ω1s,ω21,ω22,…,ωms,α1,α2,…,αs]。
(25)
本文將網(wǎng)絡(luò)的實際輸出值和真實值之間的均方誤差作為BP網(wǎng)絡(luò)的評價標準,因此在螢火蟲算法中可將適應(yīng)度函數(shù)設(shè)置為:
(26)
其中:N為輸入的樣本總數(shù),yi為預(yù)測的股票價格,xi為真實的股票價格。fitness的值越小,表示網(wǎng)絡(luò)的性能越好。
根據(jù)傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的實現(xiàn)步驟及自適應(yīng)螢火蟲算法的實現(xiàn)步驟,得到基于自適應(yīng)螢火蟲算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)(SFA-BP)的算法實現(xiàn)步驟如下:
Step 1:初始化參數(shù):初始化SFA算法以及BP算法的參數(shù),并設(shè)置最大迭代次數(shù)。
Step 2:編碼:采用實數(shù)編碼方法,依照式(25)將BP的權(quán)值和閾值統(tǒng)一編碼,并對應(yīng)到螢火蟲個體中,使得每個螢火蟲個體代表一個BP網(wǎng)絡(luò)結(jié)構(gòu)。
Step 3:根據(jù)2.5節(jié)自適應(yīng)螢火蟲算法步驟,找出當(dāng)前最優(yōu)解。
Step 4:解碼:將螢火蟲個體解碼,得到相應(yīng)BP網(wǎng)絡(luò)的權(quán)值和閾值。并以此作為BP的初始權(quán)、閾值,進而訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)。
Step 5:判斷是否達到BP網(wǎng)絡(luò)停止條件:若滿足,得到最優(yōu)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu);反之,繼續(xù)訓(xùn)練。
由上文可知,載有BP神經(jīng)網(wǎng)絡(luò)初值信息的螢火蟲個體進行尋優(yōu),然后將輸出的最優(yōu)值解碼為神經(jīng)網(wǎng)絡(luò)的權(quán)值、閾值,因此FA-BP、SFA-BP算法性能的好壞在一定程度上依賴于FA、SFA算法的性能。為了評估FA、SFA算法的優(yōu)化性能,本文選取4個標準測試函數(shù)來進行仿真實驗,這4個測試函數(shù)表達式、搜索區(qū)間和最優(yōu)值如表1所示。
表 1 4個基準測試函數(shù)
這些測試函數(shù)均為國際通用的全局優(yōu)化問題常用的測試函數(shù),分別具有不同的特性,可用來充分考察算法的尋優(yōu)能力。其中,Rosenbrock和Sphere是單峰函數(shù),這些函數(shù)可以用來測試算法的尋優(yōu)精度、收斂速度和執(zhí)行效率;Rastrigin 和Ackley為多峰多極值函數(shù),這些函數(shù)的特點是有許多局部極值,可以用來考察算法的全局尋優(yōu)能力、跳出局部極值點和避免算法早熟收斂的能力。將標準FA算法和SFA算法進行對比實驗。所有實驗均在硬件環(huán)境為Intel Core I5-7200,CPU 2.70 GHz,內(nèi)存4 GB;軟件環(huán)境為Windows 10操作系統(tǒng)的計算機上進行,所有算法在Matlab R2016a下進行仿真。
在實驗中,算法的相關(guān)參數(shù)設(shè)置為:螢火蟲種群個數(shù)為100個,最大迭代次數(shù)為2 000次,最大吸引度β0=1,步長因子初值α=0.05,光強吸收系數(shù)γ=1.0,函數(shù)維數(shù)設(shè)置為30。相比FA算法,SFA算法又引入了3個參數(shù),參數(shù)值的設(shè)定分別為混沌搜索次數(shù)為30次、δ=0.97、Limit=100。為了避免算法偶然性帶來的誤差,每個測試函數(shù)分別獨立運行30次,并統(tǒng)計其結(jié)果。規(guī)定當(dāng)求解精度達到10-20時假定結(jié)果為0,通過記錄FA算法和SFA算法在迭代后的平均值、最優(yōu)值、最差值、平均運行時間等來評價各算法的優(yōu)化性能,平均值、最優(yōu)值、最差值反映的是解的質(zhì)量,平均值反映的是算法所能達到的精度,平均運行時間反映的是算法的尋優(yōu)速度。測試結(jié)果比較如表2所示。
由表2可知,SFA算法的尋優(yōu)精度明顯優(yōu)于FA算法,無論是對于單峰函數(shù)還是對于多峰函數(shù),SFA算法的收斂速度均明顯優(yōu)于FA算法。
表2 FA算法和SFA算法測試結(jié)果比較
對于單峰函數(shù)Sphere,SFA算法在尋優(yōu)精度、尋優(yōu)率及收斂速度方面均明顯優(yōu)于FA算法,能夠持續(xù)有效地搜索函數(shù)全局最小值。對于非凸病態(tài)單峰函數(shù)Rosenbrock而言,因其在取值范圍內(nèi)走勢較平坦,可收斂至全局最優(yōu)點的機會很少,但SFA算法依然表現(xiàn)出了強大的全局尋優(yōu)能力;對于多峰函數(shù)Rastrigin和Ackley函數(shù),SFA算法的求解精度及收斂速度均高于FA算法,主要由于SFA采用自適應(yīng)Tent混沌搜索和自適應(yīng)步長因子,不僅能動態(tài)調(diào)整混沌搜索空間,還能動態(tài)調(diào)整步長,因而既能保證種群多樣性、提高求解精度和收斂速度,也能使算法跳出局部最優(yōu)。故初步推斷SFA-BP預(yù)測精度優(yōu)于FA-BP。
BP網(wǎng)絡(luò)進行預(yù)測時,若樣本個數(shù)太少,會導(dǎo)致網(wǎng)絡(luò)的泛化能力較弱;反之,樣本個數(shù)太多,又會出現(xiàn)過擬合現(xiàn)象。因此,樣本個數(shù)的選取應(yīng)當(dāng)適中。本節(jié)選取了4種股票指數(shù)從2015年1月5日—11月12日的歷史收盤價數(shù)據(jù),分別是中證1000指數(shù)、深證1000指數(shù)、上證商業(yè)指數(shù)及香港恒生指數(shù)。中證1000指數(shù)能夠整體反映滬深證券市場內(nèi)小市值公司的綜合狀況,深證1000指數(shù),旨在反映深圳證券市場內(nèi)大中小市值企業(yè)的整體狀況。上證商業(yè)指數(shù)能總體反映多種行業(yè)的景氣情況及其股價的波動情況,香港恒生指數(shù)在反映香港整體股市價幅趨勢中是最具權(quán)威影響的股價指數(shù)。
(1)網(wǎng)絡(luò)層數(shù)的確定。Cybenko等人[19]已經(jīng)用理論證明,三層的BP網(wǎng)絡(luò)能夠以任何精度逼近任意非線性函數(shù)。因此本文選擇三層BP網(wǎng)絡(luò)進行研究,即只含一個隱含層的BP神經(jīng)網(wǎng)絡(luò)。
(3)其他參數(shù)的確定。利用隨機函數(shù)設(shè)置初始權(quán)值,通常為(-1,1)之間的隨機數(shù),學(xué)習(xí)步長取0.2,期望誤差取0.000 1,螢火蟲種群個數(shù)取100個,最大迭代次數(shù)取2 000次,步長因子初值α=0.05,最大吸引度β0=1,光強吸收系數(shù)γ=1.0。相比FA算法,SFA算法又引入了3個參數(shù),參數(shù)值的設(shè)定分別為混沌搜索次數(shù)為30次,δ=0.97,Limit=100。
本文通過已選取的股票數(shù)據(jù),對BP網(wǎng)絡(luò)模型、FA-BP網(wǎng)絡(luò)模型和SFA-BP網(wǎng)絡(luò)模型進行股價預(yù)測精度的仿真對比分析。表3為3種算法對4種股票指數(shù)預(yù)測的平均誤差數(shù)據(jù)對比。
由表3的統(tǒng)計結(jié)果可以看出,對于4種股票指數(shù)數(shù)據(jù)而言,SFA-BP網(wǎng)絡(luò)模型的預(yù)測精度最高,明顯優(yōu)于BP網(wǎng)絡(luò)模型及FA-BP網(wǎng)絡(luò)模型的預(yù)測精度,具有一定的實際應(yīng)用價值。
表3 BP算法、FA-BP算法和SFA-BP算法誤差對比
為了克服傳統(tǒng)BP網(wǎng)絡(luò)收斂速度慢、容易陷入局部極值點等不足,提出了利用自適應(yīng)的螢火蟲算法(SFA)來優(yōu)化BP網(wǎng)絡(luò)的方法,構(gòu)建了BP優(yōu)化模型(SFA-BP),并將其用于股價預(yù)測,構(gòu)建了股票價格的預(yù)測系統(tǒng)模型,通過仿真實驗可以看出,該預(yù)測系統(tǒng)取得了較為理想的預(yù)測效果,在實際生活與工作中,具有一定的實用價值。但股票價格預(yù)測作為一個長期的工作,若能擴大其樣本規(guī)模,將開盤價數(shù)據(jù)、最高最低價數(shù)據(jù)、成交量數(shù)據(jù)等引入,將進一步提高預(yù)測精度,進行更為精確的預(yù)測,將有更好的應(yīng)用前景。