一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

用Python結(jié)合人工智能?chē)L試預(yù)測(cè)股票,會(huì)成就下一個(gè)股神?

 云雪頌 2020-06-24

股票市場(chǎng)漲漲跌跌,好像毫無(wú)規(guī)律,但有一些人卻憑借自己的直覺(jué)掌握了一些特殊規(guī)律,從而實(shí)現(xiàn)在股票上的實(shí)現(xiàn)斬獲?,F(xiàn)在在人工智能時(shí)代,Python+AI框架,無(wú)疑會(huì)利用人工智能優(yōu)勢(shì)可以對(duì)股票市場(chǎng)進(jìn)行特征學(xué)習(xí),抓取比憑借個(gè)人感覺(jué)更多的股票數(shù)字特征。本文要介紹的就是利用Python+keras對(duì)股票進(jìn)行時(shí)間序列上的數(shù)字特征預(yù)測(cè)。

用Python結(jié)合人工智能?chē)L試預(yù)測(cè)股票,會(huì)成就下一個(gè)股神?

預(yù)備條件:

假設(shè)您熟悉python,并且已經(jīng)在系統(tǒng)中安裝了python 3。本教程中使用了jupyter筆記本。您可以使用自己喜歡的IDE。

使用的數(shù)據(jù)集:

本教程中使用的數(shù)據(jù)集是基于Tushare獲取的股票信息。更多股票代碼可以用下面的搜索工具獲取。至于Tushare的使用,可以參考以前的python神級(jí)技巧,不要爬蟲(chóng)一分鐘獲取股票基金持股情況文章學(xué)習(xí)。

安裝所需的庫(kù)

對(duì)于此項(xiàng)目,您需要在python中安裝以下軟件包。如果未安裝,則只需使用即可pip install PackageName。

  • NumPy —該庫(kù)提供快速計(jì)算的n維數(shù)組對(duì)象。
  • Pandas —它提供了一個(gè)數(shù)據(jù)框和序列,可以對(duì)數(shù)據(jù)執(zhí)行操作和分析。
  • matplotlib —該庫(kù)有助于使用各種圖表來(lái)可視化數(shù)據(jù)。
  • scikit-learn —這是一個(gè)機(jī)器學(xué)習(xí)庫(kù),提供了用于預(yù)測(cè)分析的各種工具和算法。我們將使用其工具或功能進(jìn)行數(shù)據(jù)預(yù)處理。
  • Keras —這是一個(gè)基于TensorFlow的高級(jí)深度學(xué)習(xí)庫(kù),用于提供神經(jīng)網(wǎng)絡(luò)的簡(jiǎn)單實(shí)現(xiàn)。我們之所以使用它,是因?yàn)樗鼘?duì)初學(xué)者友好且易于實(shí)施。
  • TensorFlow -這個(gè)庫(kù)是由所需Keras作為Keras運(yùn)行在TensorFlow本身。

開(kāi)始編碼

首先,需要導(dǎo)入將在項(xiàng)目中使用的庫(kù)。在這里,numpy用于創(chuàng)建NumPy數(shù)組以訓(xùn)練和測(cè)試數(shù)據(jù)。pandas用于制作數(shù)據(jù)集的數(shù)據(jù)框并輕松檢索值。matplotlib.pyplot繪制總體股價(jià)和預(yù)測(cè)價(jià)格之類(lèi)的數(shù)據(jù)。MinMaxScaler從sklearn的(scikit-learn)預(yù)處理程序包中進(jìn)行歸一化處理。Sequential dense LSTM Dropout從Keras導(dǎo)入了數(shù)據(jù),將有助于創(chuàng)建深度學(xué)習(xí)模型。稍后將討論這些模塊。

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.preprocessing import MinMaxScaler#for deep learning modelfrom keras import Sequentialfrom keras.layers import Densefrom keras.layers import LSTMfrom keras.layers import Dropout

現(xiàn)在,將數(shù)據(jù)集作為數(shù)據(jù)框加載到名為df的變量中。然后,檢查了數(shù)據(jù)集的形狀,結(jié)果為(2035,8)表示數(shù)據(jù)集中有2035行和8列。之后,將數(shù)據(jù)集上下顛倒過(guò)來(lái),以便日期從最早的日期開(kāi)始到最近的日期,這樣做還必須重置索引。然后,打印數(shù)據(jù)集的一些開(kāi)始行head()。

df = pd.read_csv('tu.csv')df.shapedf = df[::-1]df = df.reset_index(drop=True)df.head()

數(shù)據(jù)集的前5個(gè)條目

僅選擇了一個(gè)“ 開(kāi)放”功能來(lái)訓(xùn)練的模型,但是您可以自由選擇多個(gè)功能,但是隨后將相應(yīng)地更改代碼。在訓(xùn)練集中,有2000個(gè)值,而在測(cè)試中,只選擇35個(gè)值。然后簡(jiǎn)單地打印了兩個(gè)類(lèi)別的數(shù)據(jù),分別train_set test_set是(2000,1)和(35,1)。

open_price = df.iloc[:,1:2]train_set = open_price[:2000].valuestest_set = open_price[2000:].valuesprint('Train size: ',train_set.shape)print('Test size:',test_set.shape)

在這里,將Date列轉(zhuǎn)換為DateTime格式以方便地進(jìn)行繪制。然后簡(jiǎn)單地用于plot_date繪制整個(gè)時(shí)間軸上的股票開(kāi)盤(pán)價(jià)的圖,并使用保存該圖savefig。

dates = pd.to_datetime(df['Date'])plt.plot_date(dates, open_price,fmt='-')plt.savefig('test1final.png')

現(xiàn)在,已經(jīng)初始化了MinMaxScalar用于縮放0到1范圍內(nèi)的每個(gè)值的。這是非常重要的一步,因?yàn)楫?dāng)特征處于相對(duì)相似的縮放比例時(shí),神經(jīng)網(wǎng)絡(luò)和其他算法的收斂速度更快。

sc = MinMaxScaler()train_set_scaled = sc.fit_transform(train_set)

棘手的部分到了?,F(xiàn)在,必須使數(shù)據(jù)適合我們的RNN模型,即使用目標(biāo)最終值制作數(shù)據(jù)序列。讓我用這個(gè)例子來(lái)解釋。假設(shè)數(shù)據(jù)集的值介于1到10之間,并且序列長(zhǎng)度為3。在這種情況下,訓(xùn)練數(shù)據(jù)如下所示:

序列訓(xùn)練數(shù)據(jù)示例

在代碼中,序列的長(zhǎng)度為60,這意味著只有前60個(gè)值將決定下一個(gè)值,而不是整個(gè)數(shù)據(jù)集。之后,創(chuàng)建了NumPy x_train和NumPy數(shù)組以y_train進(jìn)行快速計(jì)算,并根據(jù)模型的要求重塑了訓(xùn)練集。的最終形狀為x_train(1940,60,1)。

x_train = []y_train = []for i in range(60,2000):    x_train.append(train_set_scaled[i-60:i,0])    y_train.append(train_set_scaled[i,0])x_train = np.array(x_train)y_train = np.array(y_train)x_train = np.reshape(x_train,(x_train.shape[0],x_train.shape[1],1))x_train.shape

現(xiàn)在,將創(chuàng)建模型的架構(gòu)。使用Keras是因?yàn)榕c其他可用庫(kù)相比,使用Keras進(jìn)行深度學(xué)習(xí)模型非常容易。在這里,初始化了Sequential對(duì)象,該對(duì)象充當(dāng)模型內(nèi)所有圖層的捆綁程序。模型總共有4個(gè)LSTM層和1個(gè)致密層。

LSTM(長(zhǎng)期短期記憶)是一種遞歸神經(jīng)網(wǎng)絡(luò),具有一些上下文狀態(tài)單元,它們充當(dāng)長(zhǎng)期或短期記憶單元,并且這些單元調(diào)節(jié)輸出。當(dāng)需要根據(jù)歷史背景而不是僅根據(jù)最后的輸入來(lái)預(yù)測(cè)輸出時(shí),這一點(diǎn)很重要。例如,必須預(yù)測(cè)序列3,4,5 ,?中的下一個(gè)數(shù)字。那么輸出就是6(x + 1),但是順序?yàn)?strong>0,2,4 ,?輸出也是6,但是它也取決于上下文信息。

Dropout用于通過(guò)一次簡(jiǎn)單地停用某些單元(神經(jīng)元)來(lái)防止數(shù)據(jù)過(guò)擬合。在案例中,一次會(huì)停用20%的單元。最后,有一個(gè)包含1個(gè)單位的密集層,可提供預(yù)測(cè)值。

然后,只需使用優(yōu)化程序編譯模型,然后將模型擬合到數(shù)據(jù)上,然后運(yùn)行20次迭代即可。

reg = Sequential()reg.add(LSTM(units = 50,return_sequences=True,input_shape=(x_train.shape[1],1)))reg.add(Dropout(0.2))reg.add(LSTM(units = 50,return_sequences=True))reg.add(Dropout(0.2))reg.add(LSTM(units = 50,return_sequences=True))reg.add(Dropout(0.2))reg.add(LSTM(units=50))reg.add(Dropout(0.2))reg.add(Dense(units=1))reg.compile(optimizer = 'adam',loss='mean_squared_error')reg.fit(x_train,y_train, epochs=20, batch_size =1,verbose=2)

每次迭代的損失

如您所見(jiàn),模型收斂于15 個(gè)epoch,總共花了90分鐘才能運(yùn)行20次。是的,RNN模型需要時(shí)間訓(xùn)練。

RNN模型需要時(shí)間

現(xiàn)在,是時(shí)候?yàn)闇y(cè)試創(chuàng)建輸入了。的形狀input為(95,1),下面也縮放了此數(shù)據(jù)。

input = open_price[len(open_price)-len(test_set)-60:].valuesinput.shapeinput = sc.transform(input)

這是最后一部分,其中簡(jiǎn)單地制作數(shù)據(jù)序列以預(yù)測(cè)最近35天的庫(kù)存值。第一個(gè)序列包含從1至60的數(shù)據(jù)來(lái)預(yù)測(cè)第61個(gè)值,第二個(gè)序列包含從2到61的數(shù)據(jù)來(lái)預(yù)測(cè)第62個(gè)值,依此類(lèi)推。的形狀x_test是(35,60,1),這說(shuō)明了這一點(diǎn)。

x_test = []for i in range(60,95): x_test.append(input[i-60:i,0])x_test = np.array(x_test)x_test = np.reshape(x_test,(x_test.shape[0],x_test.shape[1],1))x_test.shape

最終,只是預(yù)測(cè)使用值predict定義的模型的功能,并繪制最后35個(gè)某種給定股票的實(shí)際和預(yù)測(cè)值。

pred = reg.predict(x_test)pred = sc.inverse_transform(pred)plt.plot(test_set,color='green')plt.plot(pred,color='red')plt.title('股票預(yù)測(cè)')plt.show()

最后具體運(yùn)行結(jié)果就作為作業(yè)留給大家自行完成。但可以很樂(lè)觀的告訴大家,模型在某些特定時(shí)間段上預(yù)測(cè)給定股票的未來(lái)趨勢(shì)方面非常準(zhǔn)確。

但是,距離成為股票市場(chǎng)上的出色顧問(wèn)還會(huì)有比較大的挑戰(zhàn)。

下一步目標(biāo)

通過(guò)合并更多功能,增加數(shù)據(jù)集以及調(diào)整模型本身,可以進(jìn)一步改善模型

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多

    欧美日韩国产欧美日韩| 青青草草免费在线视频| 国产又猛又黄又粗又爽无遮挡| 91精品国产综合久久不卡| 日本二区三区在线播放| 欧美激情一区二区亚洲专区| 午夜久久精品福利视频| 色哟哟国产精品免费视频| 青青久久亚洲婷婷中文网 | 亚洲综合日韩精品欧美综合区| 人人妻在人人看人人澡| 日韩人妻精品免费一区二区三区| 五月婷日韩中文字幕四虎| 精品女同在线一区二区| 欧美六区视频在线观看| 亚洲妇女黄色三级视频| 丝袜美女诱惑在线观看| 91一区国产中文字幕| 扒开腿狂躁女人爽出白浆av| 黄色国产精品一区二区三区| 亚洲精品一区二区三区免| 久久99夜色精品噜噜亚洲av| 国产一区二区精品丝袜| 精品日韩中文字幕视频在线| 一区二区三区日韩在线| 九九热这里有精品20| 国产小青蛙全集免费看| 偷拍洗澡一区二区三区| 亚洲一区二区三区国产| 欧美日韩国产另类一区二区| 午夜精品福利视频观看| 深夜日本福利在线观看| 亚洲国产精品肉丝袜久久| 欧美日本道一区二区三区| 大香蕉精品视频一区二区| 一区二区三区四区亚洲专区| 99久久免费中文字幕| 欧美大胆美女a级视频| 99久久精品视频一区二区| 国内女人精品一区二区三区| 日韩精品一区二区毛片|