《數(shù)據(jù)處理與智能決策》課程設(shè)計(jì)報(bào)告 設(shè)計(jì)題目: 基于ANN算法的數(shù)據(jù)倉(cāng)庫(kù)分析 專 業(yè): 物聯(lián)網(wǎng)工程 指導(dǎo)教師: 劉帥,、婁鑫坡,、蘇靖楓 學(xué) 號(hào): 姓 名: 同組人員: 計(jì)算機(jī)與數(shù)據(jù)科學(xué)學(xué)院 2019 年 12月 20日 目錄 4.2.4 計(jì)算輸出層和隱藏層誤差............................................................................ 12 1緒論1.1 選題背景和意義1.1.1 背景目前,股票已成為最常見(jiàn)的投資之一,。股票市場(chǎng)上的直接融資行為與銀行儲(chǔ)蓄的間接融資相比,有著更高的效率與靈活性:與保守的股票投資策略相比,,收益和風(fēng)險(xiǎn)博弈的積極型股票投資策略,,對(duì)促進(jìn)經(jīng)濟(jì)發(fā)展有著更加明顯、更大的意義,。在經(jīng)濟(jì)發(fā)展方面,,股票交易可以廣泛動(dòng)員和聚集社會(huì)閑散資金,發(fā)揮市場(chǎng)機(jī)制的作用,,打破地區(qū)壁壘,,促進(jìn)資源的優(yōu)化配置,從而促進(jìn)經(jīng)濟(jì)的發(fā)展;對(duì)企業(yè)而言,,提高股票交易市場(chǎng)監(jiān)管與自律,,同時(shí)企業(yè)自身提高管理能力,從廣大投資者中滿足自身長(zhǎng)期資金需求;對(duì)于投資者來(lái)說(shuō),,股票交易無(wú)疑為其提供了多元的投資選擇,,拓寬了投資渠道:股票是經(jīng)濟(jì)的晴雨表,股市的表現(xiàn)能預(yù)示一定時(shí)間段內(nèi)未來(lái)經(jīng)濟(jì)的發(fā)展,。因此,,對(duì)于國(guó)家而言,對(duì)股票進(jìn)行預(yù)測(cè),,能一定程度上地反映未來(lái)的國(guó)民經(jīng)濟(jì)形勢(shì):對(duì)于投資者而言,,獲取收益的同時(shí)需要一種方法來(lái)控制和規(guī)避風(fēng)險(xiǎn),這種方法就是股價(jià)預(yù)測(cè),。 股價(jià)預(yù)測(cè)在人們生活中發(fā)揮著越發(fā)越重要的作用,,國(guó)內(nèi)外許多學(xué)者都已致力于股價(jià)預(yù)測(cè)的研究。從宏觀經(jīng)濟(jì)和微觀企業(yè)著手進(jìn)行分析的經(jīng)濟(jì)學(xué)家們,,已經(jīng)不斷深入探討社會(huì)經(jīng)濟(jì)形勢(shì)和企業(yè)經(jīng)營(yíng)狀況,,用于預(yù)測(cè)股票的未來(lái)趨勢(shì):股票投資者們也從投資的收益風(fēng)險(xiǎn)比的角度對(duì)股票價(jià)值進(jìn)行了分析,以確定某個(gè)股票的商業(yè)價(jià)值和商業(yè)機(jī)會(huì):學(xué)術(shù)研究領(lǐng)域,,無(wú)論是基于理論的角度和還是實(shí)證股票研究,,都在探尋著股票市場(chǎng)運(yùn)行機(jī)制,總結(jié)股價(jià)運(yùn)行規(guī)律,,并期望預(yù)測(cè)股票價(jià)格的走勢(shì),。 實(shí)踐證明,股價(jià)變化具有一定的可預(yù)測(cè)性,。因此,,如何找到一個(gè)更準(zhǔn)確的預(yù)測(cè)方法已成為股市領(lǐng)域最重要也最惹人關(guān)注的研究方向,。本文嘗試運(yùn)用一種基于BP神經(jīng)網(wǎng)絡(luò)建立的綜合股價(jià)預(yù)測(cè)模型,并用此模型預(yù)測(cè)股價(jià)的漲跌情況,。 1.1.2 意義在股市選股和股價(jià)預(yù)測(cè)時(shí),,絕大部分研究人員依據(jù)上市公司財(cái)務(wù)數(shù)據(jù)對(duì)該股票進(jìn)行估值,或者運(yùn)用傳統(tǒng)統(tǒng)計(jì)回歸方法針對(duì)交易數(shù)據(jù)對(duì)股價(jià)短期漲跌情況進(jìn)行預(yù)測(cè),。本文擬建立一種綜合股價(jià)預(yù)測(cè)模型,,全面分析影響股價(jià)的市場(chǎng)面因素,運(yùn)用主成分分析方法對(duì)影響股價(jià)因素進(jìn)行篩選,,再運(yùn)用思維進(jìn)化算法優(yōu)化基于BP神經(jīng)網(wǎng)絡(luò)的綜合模型的初始權(quán)值和國(guó)值,,此模型能為投資者在基于基本面選擇適當(dāng)股票后,從市場(chǎng)面判斷該只股票未來(lái)價(jià)格的漲跌情況,,對(duì)股票短線投資具有一定的參考價(jià)值,。 2 股票價(jià)格預(yù)測(cè)2.1 股票價(jià)格預(yù)測(cè)的基礎(chǔ)指標(biāo)股價(jià),指股票的交易價(jià)格,。影響股票價(jià)格變動(dòng)的因素眾多,,大致可分為兩類:市場(chǎng)面因素、基本面因素,。市場(chǎng)面因素主要指股市的供給情況,,即股市中資金面和籌碼面的相對(duì)比例??捎膳c股票交易相關(guān)的各類交易數(shù)據(jù),,以及由交易數(shù)據(jù)衍生出來(lái)的統(tǒng)計(jì)技術(shù)指標(biāo)反映。一只股票價(jià)格的漲落,,最直接的推動(dòng)原因是該股票需求的增長(zhǎng)或減弱,,越來(lái)越多的投資者都加大力地購(gòu)買這只股票會(huì)推動(dòng)股價(jià)的上漲,反之亦然,。另一方面,,眾所周知,股價(jià)圍繞著內(nèi)在價(jià)值上下波動(dòng),。而股票的內(nèi)在價(jià)值背后要考量的正是影響基本面的各因素,。體現(xiàn)在宏觀方面,一些能夠引起股價(jià)變化國(guó)內(nèi)外重大活動(dòng)以及政府的政策,、措施、法令等重大事件,。體現(xiàn)在中觀上,,是該行業(yè)的景氣度、發(fā)展前景產(chǎn)業(yè)結(jié)構(gòu)等,。體現(xiàn)在微觀上,,則是一家公司的財(cái)務(wù)和經(jīng)營(yíng)管理狀況,。 (1)股票開(kāi)盤價(jià)格 (2)最高價(jià) (3)最低價(jià) (4)收盤價(jià) (5)成交量 (6)成交價(jià)格 2.2 股票價(jià)格預(yù)測(cè)的關(guān)鍵問(wèn)題2.2.1 預(yù)測(cè)投資分析對(duì)股市股票進(jìn)行預(yù)測(cè)的時(shí)候,首先要對(duì)股市進(jìn)行投資分析,,這是不能省略的重要部分,。在投資的整個(gè)過(guò)程中,也是最重要的一部分,。第一,,想要在投資的過(guò)程中成功規(guī)避風(fēng)險(xiǎn),進(jìn)行股票投資分析是必不可少的一方面,。在投資人購(gòu)買股票的期間,,持有股票的過(guò)程中,會(huì)獲得相應(yīng)的股票回報(bào),,這和它所承擔(dān)的風(fēng)險(xiǎn)是成正比的,。風(fēng)險(xiǎn)和回報(bào)并存,是股市的特點(diǎn)所在,,同時(shí)風(fēng)險(xiǎn)和回報(bào)是一種正比關(guān)系,,想要投資收益越多,就要承擔(dān)與此成正比的投資風(fēng)險(xiǎn),。其次,,如果想在證券市場(chǎng)進(jìn)行股票買賣,也必須對(duì)股票市場(chǎng)的行情有所了解,,也需要投資分析,。在準(zhǔn)備購(gòu)買某上市公司股票之前,必須首先明確這支股票的各方面的性能,,例如時(shí)間性,、風(fēng)險(xiǎn)性、收益性和流動(dòng)性等等,。 目前階段,對(duì)股票價(jià)格走向預(yù)測(cè)主要存在如下一些問(wèn)題: (1)股價(jià)數(shù)據(jù)中含有較多噪聲 2.2.2 預(yù)測(cè)方法的比較與其他的預(yù)測(cè)方法相比較,,神經(jīng)網(wǎng)絡(luò)模擬人的處理能力,適應(yīng)能力非常強(qiáng),通過(guò)網(wǎng)絡(luò)自身的學(xué)習(xí)和訓(xùn)練,,變量之間的規(guī)律就能夠被發(fā)現(xiàn)。在線性回歸中,,當(dāng)求解逆矩陣間的病態(tài)會(huì)產(chǎn)生很大的誤差,,在相關(guān)性很強(qiáng)的數(shù)據(jù)中,運(yùn)用神經(jīng)網(wǎng)絡(luò)模型就不會(huì)產(chǎn)生這個(gè)方面的問(wèn)題,。非線性回歸模型對(duì)誤差的分布沒(méi)有規(guī)則,,具有隨機(jī)性,并且數(shù)據(jù)不完全,。線性回歸的誤差項(xiàng)要求具有嚴(yán)格的對(duì)應(yīng)關(guān)系,。進(jìn)行預(yù)測(cè)的目的,就是要從這些數(shù)據(jù)中找出規(guī)律,,得到統(tǒng)計(jì)的方法,。在傳統(tǒng)的預(yù)測(cè)中,一段時(shí)間內(nèi)的大趨勢(shì)是可以預(yù)測(cè)的,,但是短時(shí)間內(nèi)的跳躍,,往往是研究者和投資者更為關(guān)注的焦點(diǎn)。 3 人工神經(jīng)網(wǎng)絡(luò)模型3.1 人工神經(jīng)網(wǎng)絡(luò)的發(fā)展背景1943年,,心理學(xué)家W.S.McCulloch和數(shù)理邏輯學(xué)家W.Pitts建立了神經(jīng)網(wǎng)絡(luò)和數(shù)學(xué)模型,,稱為MP模型。他們通過(guò)MP模型提出了神經(jīng)元的形式化數(shù)學(xué)描述和網(wǎng)絡(luò)結(jié)構(gòu)方法,,證明了單個(gè)神經(jīng)元能執(zhí)行邏輯功能,,從而開(kāi)創(chuàng)了人工神經(jīng)網(wǎng)絡(luò)研究的時(shí)代。60年代,,人工神經(jīng)網(wǎng)絡(luò)得到了進(jìn)一步發(fā)展,,更完善的神經(jīng)網(wǎng)絡(luò)模型被提出人工神經(jīng)網(wǎng)絡(luò),其中包括感知器和自適應(yīng)線性元件等,。在此期間,,一些人工神經(jīng)網(wǎng)絡(luò)的研究者仍然致力于這一研究,提出了適應(yīng)諧振理論(ART網(wǎng)),、自組織映射,、認(rèn)知機(jī)網(wǎng)絡(luò),同時(shí)進(jìn)行了神經(jīng)網(wǎng)絡(luò)數(shù)學(xué)理論的研究,。以上研究為神經(jīng)網(wǎng)絡(luò)的研究和發(fā)展奠定了基礎(chǔ),。1982年,美國(guó)加州工學(xué)院物理學(xué)家J.J.Hopfield提出了Hopfield神經(jīng)網(wǎng)格模型,,引入了“計(jì)算 能量”概念,,給出了網(wǎng)絡(luò)穩(wěn)定性判斷。1984年,,他又提出了連續(xù)時(shí)間Hopfield神經(jīng)網(wǎng)絡(luò)模型,,為神經(jīng)計(jì)算機(jī)的研究做了開(kāi)拓性的工作,開(kāi)創(chuàng)了神經(jīng)網(wǎng)絡(luò)用于聯(lián)想記憶和優(yōu)化計(jì)算的新途徑,,有力地推動(dòng)了神經(jīng)網(wǎng)絡(luò)的研究,,1985年,又有學(xué)者提出了波耳茲曼模型,,在學(xué)習(xí)中采用統(tǒng)計(jì)熱力學(xué)模擬退火技術(shù),,保證整個(gè)系統(tǒng)趨于全局穩(wěn)定點(diǎn)。1986年進(jìn)行認(rèn)知 微觀結(jié)構(gòu)地研究,提出了并行分布處理的理論,。1986年,,Rumelhart, Hinton, Williams發(fā)展了BP算法。人工神經(jīng)網(wǎng)絡(luò)的研究受到了各個(gè) 發(fā)達(dá)國(guó)家的重視,, 美國(guó)國(guó)會(huì)通過(guò)決議將1990年1月5日開(kāi)始的十年定為“腦的十年”,,國(guó)際研究組織號(hào)召它的成員國(guó)將“腦的十年”變?yōu)槿蛐袨椤T?日本的“真實(shí)世界計(jì)算(RWC)”項(xiàng)目中,,人工智能的研究成了一個(gè)重要的組成部分,。 3.2 人工神經(jīng)網(wǎng)絡(luò)分析人工神經(jīng)網(wǎng)絡(luò)(artificial neural networks,ANN)模型系統(tǒng)出現(xiàn)在20世紀(jì)40年代后期,人工神經(jīng)網(wǎng)絡(luò)里面有很多相互連接的神經(jīng)元,,連接神經(jīng)元之間的權(quán)值可以調(diào)節(jié),,形成網(wǎng)絡(luò)模型。這個(gè)模型具有優(yōu)良的自組織自學(xué)習(xí)的能力,,并且能進(jìn)行大規(guī)模的數(shù)據(jù)處理,,對(duì)于模式識(shí)別,也能達(dá)到令人滿意的效果,。這個(gè)模型在多個(gè)層面越來(lái)越多得到了廣泛地應(yīng)用,,如智能控制、信息處理,、模式識(shí)別等建模領(lǐng)域,。在訓(xùn)練之前,需要提供一組學(xué)習(xí)數(shù)據(jù),,利用這些規(guī)律相互迭代訓(xùn)練,,來(lái)掌握兩者之間存在的規(guī)律。這些樣本數(shù)據(jù)之間的迭代過(guò)程,學(xué)習(xí)和分析的過(guò)程,,被叫做“訓(xùn)練”,。人工神經(jīng)網(wǎng)絡(luò)具有其他預(yù)測(cè)方法不具有的優(yōu)點(diǎn),就是自學(xué)習(xí)能力和自適應(yīng)能力,。人工神經(jīng)網(wǎng)絡(luò)在現(xiàn)在為解決一些傳統(tǒng)方法不能解決的難題提供了有效途徑,,因?yàn)樗哂杏洃浐屯评淼墓δ埽瑢?duì)復(fù)雜模式就行聯(lián)想的功能,。圖3.1表示了作為神經(jīng)網(wǎng)絡(luò)的基本單元的神經(jīng)元模型,。 圖3.1 神經(jīng)元模型 在理論上已經(jīng)證明,無(wú)論已知函數(shù)具有怎樣的形式,,人工神經(jīng)網(wǎng)絡(luò)都可以根據(jù)規(guī)律刻畫(huà)出樣本函數(shù)并逼近數(shù)據(jù),并且在股市股價(jià)的預(yù)測(cè)中取得了令人滿意的成績(jī),。跟傳統(tǒng)的預(yù)測(cè)方法相比較,人工神經(jīng)網(wǎng)絡(luò)模型在股市預(yù)測(cè)中體現(xiàn)出了一系列的優(yōu)越性。以往的傳統(tǒng)方法依靠數(shù)學(xué)模型的推導(dǎo),,參數(shù)需要找出最優(yōu)解并且要求非常精確,,所以局限了算法,,而神經(jīng)網(wǎng)絡(luò)是通過(guò)學(xué)習(xí),來(lái)掌握數(shù)據(jù)直接的內(nèi)在關(guān)系,,與傳統(tǒng)方法相比有很大的優(yōu)勢(shì),。 3.3 BP神經(jīng)網(wǎng)絡(luò)及算法3.3.1 BP神經(jīng)網(wǎng)絡(luò) BP神經(jīng)網(wǎng)絡(luò)模型是目前應(yīng)用最為廣泛的一種神經(jīng)網(wǎng)絡(luò)模型,。BP神經(jīng)網(wǎng)絡(luò)可以把大量的輸入一輸出數(shù)據(jù)的映射關(guān)系存儲(chǔ)在神經(jīng)網(wǎng)絡(luò)之中,這些映射關(guān)系不需要再訓(xùn)練之前描述出來(lái),。它采用最快下降法進(jìn)行訓(xùn)練迭代、擬合,,通過(guò)反向調(diào)節(jié)的過(guò)程,神經(jīng)元之間的閾值和權(quán)值經(jīng)過(guò)神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)和訓(xùn)練可以進(jìn)行調(diào)節(jié)和調(diào)整,,目的是將網(wǎng)絡(luò)的誤差平方達(dá)到最小的值,。BP神經(jīng)網(wǎng)絡(luò)模型的拓?fù)浣Y(jié)構(gòu)有三層組成一是輸入層、隱含層,、輸出層,。 圖3.2 BP神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu) BP神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí),,是有導(dǎo)師學(xué)習(xí)的一種。也就是說(shuō),,通過(guò)網(wǎng)絡(luò)外部“示教者”來(lái)學(xué)習(xí)訓(xùn)練,。對(duì)于確定的輸入模式,當(dāng)期望輸出和實(shí)際訓(xùn)練的輸出之前存在誤差的時(shí)候,,神經(jīng)網(wǎng)絡(luò)可以利用自身自動(dòng)調(diào)節(jié)連接強(qiáng)度的功能,,來(lái)調(diào)節(jié)連接強(qiáng)度,連接強(qiáng)度自動(dòng)向著較少誤差的方向改變,。經(jīng)過(guò)數(shù)次訓(xùn)練,,當(dāng)最后的輸出結(jié)果和正確的結(jié)果相一致的時(shí)候,BP神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過(guò)程終止,。其他方法可以和人工神經(jīng)網(wǎng)絡(luò)相結(jié)合,,揚(yáng)長(zhǎng)避短,這樣可以推動(dòng)人工智能信息技術(shù)向前發(fā)展,,比如與遺傳算法,、進(jìn)化機(jī)制、模糊系統(tǒng)相結(jié)合,形成了人工智能一個(gè)重要的發(fā)展方向,。由此可以得出,,BP神經(jīng)網(wǎng)絡(luò)是一種一邊向后傳播學(xué)習(xí)過(guò)程修改權(quán)值和系數(shù)的過(guò)程,網(wǎng)絡(luò)同時(shí)包括正向?qū)W習(xí)和反向誤差傳播兩個(gè)過(guò)程,。下圖3.3就是神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的原理圖,。 圖3.3 BP網(wǎng)絡(luò)學(xué)習(xí)過(guò)程原理圖 3.3.2 BP神經(jīng)網(wǎng)絡(luò)算法BP神經(jīng)算法產(chǎn)生之后才獲得了BP神經(jīng)網(wǎng)絡(luò)。BP神經(jīng)網(wǎng)絡(luò)算法的運(yùn)算需要有兩個(gè)過(guò)程,,信息的正向傳遞和誤差的反向傳播,。BP神經(jīng)算法是一種有效地監(jiān)督式學(xué)習(xí)算法,,是屬于δ算法的一種。 BP神經(jīng)網(wǎng)絡(luò)進(jìn)行實(shí)驗(yàn)的時(shí)候,,正向運(yùn)算學(xué)習(xí)需要把輸入數(shù)據(jù)經(jīng)過(guò)輸入層,,經(jīng)過(guò)隱含層,最后從輸出層將數(shù)據(jù)輸出,。各層神經(jīng)元之間的學(xué)習(xí)狀態(tài)會(huì)影響到下一層的神經(jīng)元訓(xùn)練,。最終從輸出層輸出的數(shù)據(jù)如果和期望數(shù)據(jù)之間存在誤差的話,需要反向傳播來(lái)修改各層與層之間的參數(shù)值,。神經(jīng)網(wǎng)絡(luò)會(huì)將反向傳播的信號(hào)再沿著正向傳播的過(guò)程傳播回去,,并且修改各層神經(jīng)元的權(quán)值。當(dāng)達(dá)到期望的輸出目標(biāo)的時(shí)候,,誤差信號(hào)趨向最小值,。 BP神經(jīng)網(wǎng)絡(luò)算法的基本思想和學(xué)習(xí)過(guò)程,有兩方面組成,,就是數(shù)據(jù)的正向傳播學(xué)習(xí)訓(xùn)練和逐層反轉(zhuǎn)學(xué)習(xí)訓(xùn)練,。如果實(shí)驗(yàn)的輸出數(shù)據(jù)和期望數(shù)據(jù)之間存在差值,不相符的時(shí)候,,就開(kāi)始反向訓(xùn)練,,將誤差的差值平均分配給各個(gè)神經(jīng)元。這個(gè)雙向?qū)W習(xí)訓(xùn)練的過(guò)程是BP神經(jīng)網(wǎng)絡(luò)的優(yōu)勢(shì)所在,,比線性預(yù)測(cè)更準(zhǔn)確,。網(wǎng)絡(luò)模型周而復(fù)始的進(jìn)行信號(hào)正向傳播還有反向傳播的過(guò)程,,對(duì)于權(quán)值逐層修改和訓(xùn)練,。在此過(guò)程中獲取各層單元的誤差信號(hào),這個(gè)信號(hào)也是修改各層神經(jīng)元權(quán)值的依據(jù),。正向傳播,,顧名思義就是輸入層開(kāi)始,通過(guò)隱含層神經(jīng)元,,得出輸出變量的過(guò)程,。直到輸出變量的誤差達(dá)到可以接受的范圍之內(nèi),學(xué)習(xí)訓(xùn)練過(guò)程結(jié)束,。 下圖3.4是最常用的三層網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),。這種拓?fù)浣Y(jié)構(gòu)的特點(diǎn)有如下幾點(diǎn), 相鄰的神經(jīng)元之間有連接,層內(nèi)的神經(jīng)元與神經(jīng)元之間沒(méi)有任何連接,并且沒(méi)有 任何反饋,。在輸出層采用純線性作用的函數(shù),。BP神經(jīng)網(wǎng)絡(luò)的拓?fù)淠P椭校[含 層的數(shù)目可以有-層或者多層,。隱含層神經(jīng)元的激活函數(shù)采用Sigmoid函數(shù),。在下圖中,,描述了一個(gè)只具有一層隱含層的BP神經(jīng)網(wǎng)絡(luò)模型,用這個(gè)模型可以逼 近非線性函數(shù),。 圖3.4 BP網(wǎng)絡(luò)結(jié)構(gòu) 4 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)4.1 流程圖圖4.1 程序流程圖 4.2 詳細(xì)設(shè)計(jì)4.2.1 調(diào)用返回隨機(jī)數(shù)生成器的值private void randomSizeWeights(double[][] matrix) { for (int i = 0, len = matrix.length; i != len; i++) for (int j = 0, len2 = matrix[i].length; j != len2; j++) { //方法調(diào)用返回下一個(gè)從這個(gè)隨機(jī)數(shù)生成器的序列中均勻分布的0.0和1.0之間的double值 double real = random.nextDouble(); matrix[i][j] = random.nextDouble() > 0.5 ? real : -real; } } 4.2.2 訓(xùn)練數(shù)據(jù)可以加大訓(xùn)練次數(shù)來(lái)提高準(zhǔn)確率,,神經(jīng)網(wǎng)絡(luò)會(huì)根據(jù)傳入的訓(xùn)練集不斷反饋錯(cuò)誤,從而調(diào)整權(quán)重矩陣,,所以訓(xùn)練次數(shù)越多,,準(zhǔn)確率越高。對(duì)于任意的整數(shù),,在經(jīng)過(guò)訓(xùn)練之后,,能夠準(zhǔn)確地判斷出它是奇數(shù)還是偶數(shù),正數(shù)還是負(fù)數(shù),。首先對(duì)于訓(xùn)練的樣本(是隨機(jī)生成的數(shù)字),,將它轉(zhuǎn)化為一個(gè)32位的向量,向量的每個(gè)分量就是其二進(jìn)制形式對(duì)應(yīng)的位上的0或1,。將目標(biāo)輸出視作一個(gè)4維的向量,,[1,0,0,0]代表正奇數(shù),[0,1,0,0]代表正偶數(shù),,[0,0,1,0]代表負(fù)奇數(shù),,[0,0,0,1]代表負(fù)偶數(shù)。 public static void main(String[] args) throws IOException { BP bp = new BP(32, 15, 4); //隨機(jī)生成1000個(gè)數(shù)放入數(shù)組 Random random = new Random(); List<Integer> list = new ArrayList<Integer>(); for (int i = 0; i != 1000; i++) { //訓(xùn)練樣本為1000個(gè) int value = random.nextInt(); list.add(value); } for (int i = 0; i != 200; i++) { //學(xué)習(xí)200次 for (int value : list) { //real數(shù)組存放value最終結(jié)果 [1,0,0,0]代表>0奇數(shù),,[0,1,0,0]代表>0偶數(shù),,[0,0,1,0]代表<0奇數(shù),[0,0,0,1]代表<0偶數(shù),。 double[] real = new double[4]; if (value >= 0) if ((value & 1) == 1) real[0] = 1; else real[1] = 1; else if ((value & 1) == 1) real[2] = 1; else real[3] = 1; double[] binary = new double[32];// 將value數(shù)字轉(zhuǎn)化為32位二進(jìn)制向量 int index = 31; do { binary[index--] = (value & 1); value >>>= 1; // >>>= 右移賦值,,左邊空出的位以0填充 } while (value != 0); for (int j = 0; j < binary.length; j++) { System.out.println("binary"+j+":"+binary[j]+"\n"); } for (int j = 0; j < real.length; j++) { System.out.println("real"+j+real[j]+"\n"); } bp.train(binary, real); } } //構(gòu)造函數(shù) 默認(rèn) eta = 0.25 and momentum = 0.3. public BP(int inputSize, int hiddenSize, int outputSize) { //用this方法調(diào)用類中的構(gòu)造方法 this(inputSize, hiddenSize, outputSize, 0.25, 0.3); } /*public BP(int inputSize, int hiddenSize, int outputSize,double eta, double momentum) { this(inputSize, hiddenSize, outputSize,eta,momentum); }*/ /** * Entry method. The train data should be a one-dim vector. * 錄入方法。訓(xùn)練數(shù)據(jù)是一維向量 * trainData 訓(xùn)練數(shù)據(jù) * target 目標(biāo) */ public void train(double[] trainData, double[] target) { loadInput(trainData); loadTarget(target); forward(); calculateDelta(); adjustWeight(); } 4.2.3 加載數(shù)據(jù)// Load the target data. 加載目標(biāo)數(shù)據(jù) private void loadTarget(double[] arg) { if (arg.length != target.length - 1) { throw new IllegalArgumentException("Size Do Not Match."); } System.arraycopy(arg, 0, target, 1, arg.length); } // Load the training data. 加載訓(xùn)練數(shù)據(jù) private void loadInput(double[] inData) { if (inData.length != input.length - 1) { throw new IllegalArgumentException("Size Do Not Match."); } //把一個(gè)數(shù)組中某一段字節(jié)數(shù)據(jù)放到另一個(gè)數(shù)組中,。 //把一個(gè)數(shù)組中的某一段字節(jié)數(shù)據(jù)放到另一個(gè)數(shù)組中,, //至于從第一個(gè)數(shù)組中取出幾個(gè)數(shù)據(jù),放到第二個(gè)數(shù)組中的什么位置都是可以通知這個(gè)方法的參數(shù)控制的,。 System.arraycopy(inData, 0, input, 1, inData.length);//參數(shù)分別代表:源數(shù)組,、源數(shù)組的要復(fù)制的起始位置、目的數(shù)組,、目的數(shù)組放置的起始位置,、復(fù)制的長(zhǎng)度 } 4.2.4 計(jì)算輸出層和隱藏層誤差//計(jì)算輸出層誤差 private void outputErr() { double errSum = 0; for (int idx = 1, len = optDelta.length; idx != len; ++idx) { double o = output[idx]; optDelta[idx] = o * (1d - o) * (target[idx] - o); errSum += Math.abs(optDelta[idx]); } optErrSum = errSum; } //計(jì)算隱藏層誤差 private void hiddenErr() { double errSum = 0; for (int j = 1, len = hidDelta.length; j != len; ++j) { double o = hidden[j]; double sum = 0; for (int k = 1, len2 = optDelta.length; k != len2; ++k) sum += hidOptWeights[j][k] * optDelta[k]; hidDelta[j] = o * (1d - o) * sum; errSum += Math.abs(hidDelta[j]); } hidErrSum = errSum; } //計(jì)算所有層誤差 private void calculateDelta() { outputErr(); hiddenErr(); } 4.3 運(yùn)行結(jié)果圖如圖4.2是對(duì)輸入的數(shù)據(jù)訓(xùn)練后生成的結(jié)果圖: 圖4.2 訓(xùn)練數(shù)據(jù)圖 如圖4.3是對(duì)數(shù)據(jù)進(jìn)行預(yù)測(cè)后的結(jié)果圖: 圖4.3 預(yù)測(cè)結(jié)果圖 5 總結(jié)神經(jīng)網(wǎng)絡(luò)是一種很好的時(shí)間序列預(yù)測(cè)方法。BP網(wǎng)絡(luò)是目前最常用的神經(jīng)網(wǎng)絡(luò),。由于BP網(wǎng)絡(luò)具有逼近任意復(fù)雜連續(xù)函數(shù)關(guān)系的能力,,因此非常適用于對(duì)時(shí)間序列進(jìn)行預(yù)測(cè),在具體使用中,,僅用一個(gè)BP網(wǎng)絡(luò)來(lái)擬合該時(shí)間序列即可,。因此,,本文在對(duì)傳統(tǒng)改進(jìn)BP神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)及其算法的特點(diǎn)進(jìn)行研究和分析的基礎(chǔ)上,提出了一種改進(jìn)的BP算法,,即基于BP神經(jīng)網(wǎng)絡(luò)模型,,并將其應(yīng)用到股票預(yù)測(cè)中,并進(jìn)行了有效地實(shí)證分析,。通過(guò)對(duì)常用的股票預(yù)測(cè)方法進(jìn)行分析比較,針對(duì)BP算法本身存在收斂速度慢,、精度不高等問(wèn)題,給出了傳統(tǒng)改進(jìn)的BP算法,,重新選取激活函數(shù),,使網(wǎng)絡(luò)在調(diào)整權(quán)值w的基礎(chǔ)上,通過(guò)對(duì)單個(gè)神經(jīng)元的更一般形式tan.sigmoid轉(zhuǎn)換函數(shù)的縮放系數(shù)幾位移參數(shù)白的動(dòng)態(tài)調(diào)整,,以縮小飽和區(qū)間,,加快網(wǎng)絡(luò)收斂,有效地避免了神經(jīng)網(wǎng)絡(luò)易于陷入局部最小點(diǎn)的問(wèn)題,。這次課設(shè)對(duì)于我們來(lái)說(shuō)很有難度,,畢竟以前沒(méi)深入了解,但是這樣卻激發(fā)了我們對(duì)知識(shí)的渴望,,在我和我們隊(duì)友的積極討論下,,又通過(guò)上網(wǎng)查資料學(xué)習(xí),了解掌握了一種新的數(shù)據(jù)處理方法,。通過(guò)本次課設(shè),,進(jìn)一步了解掌握神經(jīng)網(wǎng)絡(luò)強(qiáng)大的自學(xué)習(xí)能力和適應(yīng)能力,以及對(duì)復(fù)雜問(wèn)題的解決能力,,也激發(fā)了進(jìn)一步深入學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)知識(shí)的熱情,。根據(jù)我們?cè)谡n程設(shè)計(jì)中遇到得問(wèn)題,我們將在以后的學(xué)習(xí)過(guò)程中注意以下幾點(diǎn):1,、專業(yè)課不能放下,,要扎實(shí)基礎(chǔ),。2,、團(tuán)隊(duì)精神很重要。3,、編寫程序的時(shí)候要細(xì)心,,有耐心,切勿浮躁,。 6 參考文獻(xiàn)[1]胡守仁.神經(jīng)網(wǎng)絡(luò)應(yīng)用技術(shù).長(zhǎng)沙:國(guó)防科技大學(xué)出版社,1993 [2]焦李成.神經(jīng)網(wǎng)絡(luò)系統(tǒng)理論.西安:西安電子科技大學(xué)出版社.1992 [3] EIman JL.FindingStnlctureinTirac.CognitiveScience.1990(14):179-211 [4]樓順天,,旌陽(yáng).基于MATLAB的系統(tǒng)分析與設(shè)計(jì)一神經(jīng)網(wǎng)絡(luò).西安:西安電子科 技大學(xué)出版社.1998 [5]施彥,韓力群,廉小親.神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)方法與實(shí)例分析[M].北京:北京郵電大學(xué)出版社,2009 [6]史忠植.人工神經(jīng)網(wǎng)絡(luò)[M].北京:高等 教育出版社2009. [7]王行愚. RBF神經(jīng)網(wǎng)絡(luò)在股市趨勢(shì)預(yù)測(cè)中的應(yīng)用[].華東理工大學(xué)學(xué)報(bào),2002,28(5):5-7 [8]王曉原,李軍,灰色GM(1,1)模型在區(qū)域物流規(guī)模預(yù)測(cè)中的應(yīng)用[I].武漢理工大學(xué)報(bào)(交通科學(xué)與工程版),2005 |
|