摘? 要:為提高BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)股票收盤價(jià)的準(zhǔn)確性和高效性,文章使用Python語(yǔ)言,通過(guò)遺傳算法(GA)對(duì)BP神經(jīng)網(wǎng)絡(luò)算法中的權(quán)值和閾值進(jìn)行優(yōu)化(GA-BP),并將優(yōu)化后的系統(tǒng)用于股票預(yù)測(cè)當(dāng)中。優(yōu)化后的算法收斂速度更快,同時(shí)克服了BP算法容易陷入局部最優(yōu)的缺陷,提高了整個(gè)系統(tǒng)的預(yù)測(cè)精度。最后對(duì)股票“千金藥業(yè)”的仿真結(jié)果表明,該方法在股票收盤價(jià)的短期預(yù)測(cè)方面具有一定的應(yīng)用價(jià)值。此外,在對(duì)股票收盤價(jià)預(yù)測(cè)過(guò)程中,添加輸入?yún)?shù)盤口,能夠有效降低GA-BP神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)誤差。
關(guān)鍵詞:遺傳算法優(yōu)化;BP神經(jīng)網(wǎng)絡(luò);股票預(yù)測(cè)
中圖分類號(hào):TP391.4? 文獻(xiàn)標(biāo)識(shí)碼:A? 文章編號(hào):2096-4706(2023)20-0147-04
Prediction of Stock Closing Price Based on GA-BP Neural Network
CHEN Shuai
(Xinhua College of Ningxia University, Yinchuan? 750021, China)
Abstract: In order to improve the accuracy and efficiency of BP neural network in predicting the closing price of stocks, this paper uses Python language to optimize the weights and thresholds of BP neural network (GA-BP) through Genetic Algorithm (GA), , and uses the optimized system in stock prediction. Compared with BP, the optimized algorithm converges faster and overcomes the defect of BP which is prone to fall into local optimization, improving the prediction accuracy of the entire system. Finally, the simulation results of the stock named “Qianjin Medicine” show that this method has certain application value in short-term prediction of stock closing prices. In addition, in the process of predicting the closing price of stocks, adding input parameters named “Pan Kou” can effectively reduce the prediction error of the GA-BP neural network.
Keywords: Genetic Algorithm optimization; BP neural network; stock prediction
0? 引? 言
隨著市場(chǎng)經(jīng)濟(jì)的發(fā)展,證券市場(chǎng)作為二級(jí)市場(chǎng)的主要組成部分,越來(lái)越受到投資者的青睞,投資者希望準(zhǔn)確地預(yù)測(cè)股票價(jià)格,從而把握股票走向,使收益最大化。股票價(jià)格的變化具有非線性,傳統(tǒng)的SVM、決策樹、線性回歸模型對(duì)于股票的預(yù)測(cè)雖然有較好的表現(xiàn),但應(yīng)用廣泛的BP神經(jīng)網(wǎng)在股票預(yù)測(cè)中表現(xiàn)一般。主要是BP神經(jīng)網(wǎng)絡(luò)存在如下缺陷:收斂速度慢;容易陷入局部最優(yōu),從而無(wú)法得到全局最優(yōu)解[1,2];網(wǎng)絡(luò)結(jié)構(gòu)難以確定[3]。而遺傳算法(GA)具有良好的并行性以及全局最優(yōu)性,既能夠降低BP神經(jīng)網(wǎng)絡(luò)陷入局部最優(yōu)解的風(fēng)險(xiǎn),又能夠優(yōu)化的初始權(quán)重和閾值,從而提高了BP神經(jīng)網(wǎng)絡(luò)的穩(wěn)定性。
本文采用遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)進(jìn)行股票市場(chǎng)的短期收盤價(jià)預(yù)測(cè),充分利用BP神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)能力和GA算法的全局搜索能力。
1? BP神經(jīng)網(wǎng)絡(luò)和遺傳算法
1.1? BP神經(jīng)網(wǎng)絡(luò)算法
標(biāo)準(zhǔn)的BP神經(jīng)網(wǎng)絡(luò)由輸入層、隱含層、輸出層這三部分組成,其中輸入輸出層為單層結(jié)構(gòu),隱藏層為單層或者多層結(jié)構(gòu),層與層之間各節(jié)點(diǎn)完全連通,隱含層中每層各節(jié)點(diǎn)相互不連通[4]。擁有一個(gè)隱藏層的BP神經(jīng)網(wǎng)絡(luò)模型如圖1所示。
整個(gè)BP神經(jīng)網(wǎng)絡(luò)可以看成是一個(gè)n維向量x = (x1, x2, x3,…,xn)T到一個(gè)m維向量y = ( y1, y2, y3,…, yn)T的映射,獲取預(yù)測(cè)結(jié)果后,根據(jù)誤差通過(guò)反向傳播對(duì)權(quán)值和閾值進(jìn)行調(diào)整,如此反復(fù)循環(huán)直到誤差足夠小或循環(huán)次數(shù)達(dá)到最大值時(shí)結(jié)束模型訓(xùn)練。如圖1所示,wij為鏈接神經(jīng)元i和神經(jīng)元j的權(quán)值,θ為閾值。則單個(gè)神經(jīng)元j的輸出與輸入的關(guān)系表示為:
激勵(lì)公式選用sigmoid函數(shù),經(jīng)過(guò)激勵(lì)函數(shù)得到該層正向傳播的最終值yi,公式如下:
yi為系統(tǒng)輸出值,Yi為真實(shí)值,e為輸出值與真實(shí)值的均方差,公式如下:
根據(jù)每次迭代的誤差值,按梯度下降的方向,更新各個(gè)節(jié)點(diǎn)的權(quán)值,更新權(quán)值公式如下,其中φ為更新速率也就是后文中所說(shuō)的訓(xùn)練速率。
1.2? 遺傳算法
遺傳算法借鑒了達(dá)爾文的進(jìn)化論和孟德爾的遺傳學(xué)說(shuō),通過(guò)計(jì)算機(jī)模擬自然進(jìn)化過(guò)程,從而實(shí)現(xiàn)全局搜索,該方法具有高效性、并行性、全局性的特點(diǎn)[5]。GA算法主要步驟有:染色體編碼、初始化種群、適應(yīng)度函數(shù)評(píng)估、擇優(yōu)選擇、基因交叉、基因變異和產(chǎn)生后代[2]。在GA算法中,每一條染色體對(duì)應(yīng)GA算法的一個(gè)解決方案,初始化種群就是生成包含多種解決法案的個(gè)體,這些初始的個(gè)體基因組合應(yīng)該包含問題的最優(yōu)解。通過(guò)適應(yīng)度函數(shù)來(lái)衡量方案的優(yōu)劣,選擇優(yōu)良的個(gè)體基因,以繁衍后代。而繁衍的過(guò)程就是“基因”進(jìn)行交換和突變的過(guò)程,通過(guò)突變可以增加種群基因的多樣性,避免整個(gè)種群陷入局部最優(yōu)。最后將進(jìn)化后的最優(yōu)個(gè)體的“基因序列”進(jìn)行解碼,得到最終解。本文將GA與BP神經(jīng)網(wǎng)絡(luò)相結(jié)合,用于股票收盤價(jià)的預(yù)測(cè),從而克服了BP算法收斂速度慢、容易陷入局部最優(yōu)等不足。
2? 基于GA算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)
本文使用Python語(yǔ)言,通過(guò)遺傳算法,對(duì)BP神經(jīng)網(wǎng)絡(luò)中的權(quán)值和閾值進(jìn)行優(yōu)化。在BP神經(jīng)網(wǎng)絡(luò)中,當(dāng)確定權(quán)值和閾值時(shí),整個(gè)BP網(wǎng)絡(luò)模型也隨即確定,但在單獨(dú)使用BP網(wǎng)絡(luò)反向傳播時(shí),發(fā)現(xiàn)整個(gè)模型容易陷入局部最優(yōu),所以本文將BP網(wǎng)絡(luò)中所有的權(quán)值和閾值編碼成GA算法中一個(gè)個(gè)體基因序列[w11, …, wij, θ1, …, θj, w11, …, wj1],通過(guò)GA算法fitness適應(yīng)度函數(shù)來(lái)尋找最優(yōu)權(quán)值和閾值序列。適應(yīng)度函數(shù)返回值為BP網(wǎng)絡(luò)中輸出值與真實(shí)值的歐幾里得距離。
具體流程如圖2所示,首先需要設(shè)定BP神經(jīng)網(wǎng)絡(luò)的隱藏層個(gè)數(shù)以及各隱藏層的神經(jīng)元個(gè)數(shù),通過(guò)實(shí)驗(yàn)調(diào)整初始BP神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)。然后將樣本輸入到BP神經(jīng)網(wǎng)絡(luò)中進(jìn)行迭代,迭代一定輪數(shù)后,將BP神經(jīng)網(wǎng)絡(luò)中的閾值和權(quán)值轉(zhuǎn)換成遺傳算法中個(gè)體的“基因序列”,該過(guò)程稱為染色體編碼,編碼過(guò)程需按照每層神經(jīng)元節(jié)點(diǎn)的權(quán)值和閾值依次排列,并將排列好的序列轉(zhuǎn)化成二進(jìn)制序列作為初始種群中個(gè)體的“基因序列”。然后初始化種群,構(gòu)建初始種群時(shí)將不同的訓(xùn)練數(shù)據(jù)依次進(jìn)行BP迭代,以獲取不同的權(quán)值、閾值序列作為初始種群的“基因庫(kù)”,生成多個(gè)個(gè)體,一般初始種群個(gè)體數(shù)量不少于20。計(jì)算初始種群的適應(yīng)度,根據(jù)fitness適應(yīng)函數(shù)篩選優(yōu)秀個(gè)體,篩選后的優(yōu)秀個(gè)體通過(guò)交叉和變異產(chǎn)生后代,以下為GA交叉算法的Python代碼實(shí)現(xiàn):
后代個(gè)體“基因編碼”具有BP神經(jīng)網(wǎng)絡(luò)全部的權(quán)值和閾值,再將篩選后的優(yōu)秀個(gè)體的基因解碼后,得到BP的權(quán)值和閾值。系統(tǒng)再通過(guò)BP神經(jīng)網(wǎng)絡(luò)得到預(yù)測(cè)結(jié)果,根據(jù)預(yù)測(cè)結(jié)果和實(shí)際結(jié)果的誤差值構(gòu)建適應(yīng)度函數(shù),淘汰適應(yīng)度差的個(gè)體并篩選出種群中的優(yōu)秀個(gè)體。優(yōu)秀個(gè)體保留,并通過(guò)“基因序列”的交換和突變產(chǎn)生新的個(gè)體,再根據(jù)適應(yīng)度函數(shù)進(jìn)行篩選,如此循環(huán),直到種群中出現(xiàn)滿足誤差小于設(shè)定誤差值的優(yōu)秀個(gè)體或者種群代數(shù)達(dá)到臨界值時(shí)結(jié)束循環(huán)。最后,再將種群中最優(yōu)個(gè)體的“基因”解碼成BP神經(jīng)網(wǎng)絡(luò)中的權(quán)值和閾值,以構(gòu)建最終模型。
3? 股票收盤價(jià)預(yù)測(cè)仿真
3.1? 數(shù)據(jù)獲取
運(yùn)用Python第三方庫(kù)Tushare獲取“千金藥業(yè)”(證券代碼:600479)2022年1月1日到2022年12月31日的歷史行情數(shù)據(jù),共獲得300組數(shù)據(jù)并將此數(shù)據(jù)集分成訓(xùn)練集和測(cè)試集兩部分,預(yù)測(cè)未來(lái)10個(gè)交易日的收盤價(jià)。其中訓(xùn)練集240組,測(cè)試集60組數(shù),每組數(shù)據(jù)由若干輸入?yún)?shù)和10個(gè)交易日后的收盤價(jià)構(gòu)成。然后將240組數(shù)據(jù)再分為20小組,每小組有12組數(shù)據(jù),這12組數(shù)據(jù)用來(lái)確定BP神經(jīng)網(wǎng)絡(luò)中的一組權(quán)值和閾值,將確定的權(quán)值和閾值編碼,生成GA初始種群中的一個(gè)單獨(dú)個(gè)體,這樣一共得到20個(gè)個(gè)體作為初始種群。
3.2? GA-BP輸入?yún)?shù)的選擇
股票市場(chǎng)中每時(shí)每刻都產(chǎn)生大量數(shù)據(jù),本文數(shù)據(jù)輸入?yún)?shù)包括:每日開盤價(jià)、收盤價(jià)、最高價(jià)、最低價(jià)、成交量以及盤口。并對(duì)原始數(shù)據(jù)進(jìn)行歸一化處理,以減少數(shù)值范圍波動(dòng)對(duì)系統(tǒng)的影響。其中盤口選自東方財(cái)富網(wǎng)站中投票統(tǒng)計(jì)值,該值是統(tǒng)計(jì)看漲人數(shù)的占比情況,該項(xiàng)數(shù)據(jù)更能體現(xiàn)人們對(duì)股票走勢(shì)的期望。再結(jié)合上文提到的5種輸入?yún)?shù),就能夠準(zhǔn)確地反映出股票的波動(dòng)特征。輸入?yún)?shù)分為兩組,第一組輸入?yún)?shù)只有開盤價(jià)、收盤價(jià)、最高價(jià)、最低價(jià)、成交量5個(gè)輸入?yún)?shù),第二組輸入加入盤口參數(shù)也就是有6個(gè)輸入?yún)?shù)。兩組參數(shù)用于對(duì)比盤口參數(shù)對(duì)預(yù)測(cè)結(jié)果的影響。
3.3? GA-BP基礎(chǔ)參數(shù)設(shè)定
BP網(wǎng)絡(luò)層數(shù):3層網(wǎng)絡(luò)結(jié)構(gòu),即輸入層、隱藏層、輸出層。
BP隱藏層節(jié)點(diǎn)個(gè)數(shù):經(jīng)過(guò)實(shí)驗(yàn)得到隱藏層節(jié)點(diǎn)個(gè)數(shù)為8個(gè)時(shí)較為合適。該參數(shù)的設(shè)置對(duì)模型預(yù)測(cè)的精度有很大的影響,隱藏層節(jié)點(diǎn)數(shù)量和隱藏層層數(shù)過(guò)多,會(huì)導(dǎo)致訓(xùn)練率底下,增加模型迭代的時(shí)間開銷,降低訓(xùn)練效率;而過(guò)多的訓(xùn)練又容易導(dǎo)致過(guò)度訓(xùn)練從而出現(xiàn)過(guò)擬合現(xiàn)象,使得預(yù)測(cè)精度降低。本文通過(guò)如下公式獲取隱藏層節(jié)點(diǎn)個(gè)數(shù): 其中N為隱藏層節(jié)點(diǎn)個(gè)數(shù),n為輸入層節(jié)點(diǎn)個(gè)數(shù),m為輸出層節(jié)點(diǎn)個(gè)數(shù),a為1到10之間的常數(shù)。
BP神經(jīng)網(wǎng)絡(luò)權(quán)值初始化:隨機(jī)產(chǎn)生一組-0.5到+0.5的隨機(jī)數(shù)作為權(quán)值的初始值。訓(xùn)練速率設(shè)置為0.5。BP網(wǎng)絡(luò)最大迭代次數(shù)設(shè)置為12輪,用于生成遺傳算法中的初始種群。最小誤差取值為0.000 1,當(dāng)兩輪迭代誤差值小于最小誤差時(shí),可提前結(jié)束迭代。激勵(lì)函數(shù)使用Sigmoid函數(shù)。種群初始化采用BP進(jìn)行12輪迭代后的閾值和權(quán)值作為最初種群的一個(gè)個(gè)體基因。種群規(guī)模為20。變異概率取值為0.05,變異概率過(guò)小,種群的多樣性下降太快,容易導(dǎo)致有效基因的迅速丟失且不容易修補(bǔ);而變異概率過(guò)大,盡管可以保證種群的多樣性,但很大程度上會(huì)破壞已存在的有利模式,導(dǎo)致難以收斂。交配概率選取0.6,交配概率過(guò)大容易破壞已有的有利模式,隨機(jī)性增大,容易錯(cuò)失最優(yōu)個(gè)體;而交配概率過(guò)小則不能有效地更新種群。遺傳算法中交叉策略選取兩點(diǎn)交叉法。進(jìn)化代數(shù)選取100為最大進(jìn)化代數(shù)。
3.4? 仿真結(jié)果分析
從圖3可以看出,訓(xùn)練過(guò)程中GA-BP的收斂速度較快,誤差值隨著迭代次數(shù)的增加逐漸減少,只需大約18輪迭代,就基本收斂,模型趨于穩(wěn)定;而傳統(tǒng)的BP神經(jīng)網(wǎng)絡(luò),收斂速度較慢,需要將近300次迭代才能收斂。從訓(xùn)練集的收斂速度上來(lái)看,優(yōu)化后的GA-BP效率更高。此外GA-BP迭代初期出現(xiàn)較大范圍波動(dòng),反映出GA算法模擬種群進(jìn)化過(guò)程中的不確定性,而BP的反向傳播梯度下降法使得系統(tǒng)的整體誤差隨著訓(xùn)練次數(shù)的增多,平滑下降。此外對(duì)于GA-BP而言,由于收斂速度較快,迭代次數(shù)不易過(guò)多,以避免出現(xiàn)過(guò)擬合現(xiàn)象。從圖中還能觀察到GA-BP系統(tǒng)的進(jìn)化代數(shù)在15到20代時(shí)較優(yōu),在20代以后容易出現(xiàn)過(guò)擬合現(xiàn)象。
訓(xùn)練數(shù)據(jù)放入GA-BP中進(jìn)行訓(xùn)練后,再對(duì)60組測(cè)試數(shù)據(jù)進(jìn)行預(yù)測(cè),預(yù)測(cè)誤差如表1所示。
根據(jù)表1數(shù)據(jù)可以得到,相對(duì)于BP神經(jīng)網(wǎng)絡(luò),改進(jìn)后的GA-BP神經(jīng)網(wǎng)絡(luò)平均誤差值更小。GA-BP神經(jīng)網(wǎng)絡(luò)利用遺傳算法的全局搜索能力,有效地克服了標(biāo)準(zhǔn)BP神經(jīng)網(wǎng)絡(luò)局部收斂的弊端,預(yù)測(cè)結(jié)果更加精準(zhǔn)。此外輸入?yún)?shù)的選取也對(duì)預(yù)測(cè)結(jié)果的精度產(chǎn)生一定的影響,當(dāng)輸入?yún)?shù)加入盤口參數(shù)后,系統(tǒng)的最小誤差更小,最大誤差更大,而整體預(yù)測(cè)精度有所提高。
4? 結(jié)? 論
GA-BP神經(jīng)網(wǎng)絡(luò)模型克服了標(biāo)準(zhǔn)BP神經(jīng)網(wǎng)絡(luò)容易陷入局部最優(yōu),收斂速度慢的弊端,使得該模型可以有效地提高對(duì)股票收盤價(jià)格短期預(yù)測(cè)的精度。輸入?yún)?shù)盤口的引入,能夠降低GA-BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)的誤差,提高預(yù)測(cè)精度。該方法在股票預(yù)測(cè)方面有較高的應(yīng)用價(jià)值。
參考文獻(xiàn):
[1] 富宇,李倩,劉澎.改進(jìn)的BP神經(jīng)網(wǎng)絡(luò)算法的研究與應(yīng)用 [J].計(jì)算機(jī)與數(shù)字工程,2019,47(5):1037-1041.
[2] 墨蒙,趙龍章,龔嬡雯,等.基于遺傳算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)研究應(yīng)用 [J].現(xiàn)代電子技術(shù),2018,41(9):41-44.
[3] 魏海坤.神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)的理論與方法 [M].北京:國(guó)防工業(yè)出版社,2005:234.
[4] DING S,ZHANG Y,CHEN J,et al. Research on using genetic algorithms to optimize Elman neural networks [J].Neural computing and applications,2013(23): 293-297.
[5] 楊梅,卿曉霞,王波.基于改進(jìn)遺傳算法的神經(jīng)網(wǎng)絡(luò)優(yōu)化方法 [J].計(jì)算機(jī)仿真,2009,26(5):198-201.
作者簡(jiǎn)介:陳帥(1989—),男,漢族,寧夏銀川人,助教,碩士,研究方向:多媒體與感知。
收稿日期:2023-03-26