乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      用Python結合人工智能嘗試預測股票,會成就下一個股神?

       云雪頌 2020-06-24

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

      用Python結合人工智能嘗試預測股票,會成就下一個股神?

      預備條件:

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

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

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

      安裝所需的庫

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

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

      開始編碼

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

      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ù)集的形狀,結果為(2035,8)表示數(shù)據(jù)集中有2035行和8列。之后,將數(shù)據(jù)集上下顛倒過來,以便日期從最早的日期開始到最近的日期,這樣做還必須重置索引。然后,打印數(shù)據(jù)集的一些開始行head()。

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

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

      僅選擇了一個“ 開放”功能來訓練的模型,但是您可以自由選擇多個功能,但是隨后將相應地更改代碼。在訓練集中,有2000個值,而在測試中,只選擇35個值。然后簡單地打印了兩個類別的數(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格式以方便地進行繪制。然后簡單地用于plot_date繪制整個時間軸上的股票開盤價的圖,并使用保存該圖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)的每個值的。這是非常重要的一步,因為當特征處于相對相似的縮放比例時,神經(jīng)網(wǎng)絡和其他算法的收斂速度更快。

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

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

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

      在代碼中,序列的長度為60,這意味著只有前60個值將決定下一個值,而不是整個數(shù)據(jù)集。之后,創(chuàng)建了NumPy x_train和NumPy數(shù)組以y_train進行快速計算,并根據(jù)模型的要求重塑了訓練集。的最終形狀為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)建模型的架構。使用Keras是因為與其他可用庫相比,使用Keras進行深度學習模型非常容易。在這里,初始化了Sequential對象,該對象充當模型內(nèi)所有圖層的捆綁程序。模型總共有4個LSTM層和1個致密層。

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

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

      然后,只需使用優(yōu)化程序編譯模型,然后將模型擬合到數(shù)據(jù)上,然后運行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)

      每次迭代的損失

      如您所見,模型收斂于15 個epoch,總共花了90分鐘才能運行20次。是的,RNN模型需要時間訓練。

      RNN模型需要時間

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

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

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

      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

      最終,只是預測使用值predict定義的模型的功能,并繪制最后35個某種給定股票的實際和預測值。

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

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

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

      下一步目標

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

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多