亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

(三)使用Python進行交易的隨機森林算法

系統 1696 0

作者:chen_h
微信號 & QQ:862251340
微信公眾號:coderpai


(一)機器學習中的集成學習入門

(二)bagging 方法

(三)使用Python進行交易的隨機森林算法


在這篇文章中,我們將討論什么是隨機森林,他們如何工作,他們如何幫助克服決策樹的局限性。

隨著機器學習及其技術在當前環(huán)境中的蓬勃發(fā)展,越來越多的算法在各種領域中找到應用。 機器學習各個算法的工作彼此不同,其中一個算法對于某個問題可能比另一個算法更好。 機器學習算法不斷更新和升級,以擴大其應用范圍并最大限度地減少其缺點。

隨機森林算法就是這樣一種算法,旨在克服決策樹的局限性。在這篇博客中,我們將介紹它。在直接介紹隨機森林之前,讓我們首先簡要了解決策樹及其工作原理。

什么是決策樹?

正如其名稱所示,決策樹具有分層或者樹狀結構,其分支充當節(jié)點。我們可以通過遍歷這些節(jié)點來做出某個決策,這些節(jié)點通過數據特征進行參數選擇。
但是,決策樹存在過度擬合的問題。 過度擬合通常在樹中添加越來越多的節(jié)點來增加樹內的特異性以達到某個結論,從而增加樹的深度并使其更復雜。

此外,在本博客中,我們將了解 Random Forest 如何幫助克服決策樹的這一缺點。

什么是隨機森林?

隨機森林是一種使用集成方法的監(jiān)督分類機器學習算法。 簡而言之,隨機森林由眾多決策樹組成,有助于解決決策樹過度擬合的問題。 通過從給定數據集中選擇隨機特征來隨機構造這些決策樹。
隨機森林根據從決策樹收到的最大投票數得出決策或預測。 通過眾多決策樹達到最大次數的結果被隨機森林視為最終結果。

隨機森林的工作原理

隨機森林基于集成學習技術,簡單地表示一個組合或集合,在這種情況下,它是決策樹的集合,一起稱為隨機森林。集合模型的準確性優(yōu)于單個模型的準確性,因為它匯總了單個模型的結果并提供了最終結果。
那么,如何從數據集中選擇特征以構建隨機森林的決策樹呢?

我們使用稱為 bagging 的方法隨機選擇特征。根據數據集中可用的特征集,通過選擇具有替換的隨機特征來創(chuàng)建許多訓練子集。這意味著可以在不同的訓練子集中同時重復一個特征。

例如,如果數據集包含20個特征,并且要選擇5個特征的子集來構建不同的決策樹,則將隨機選擇這5個特征,并且任何特征都可以是多個子集的一部分。這確保了隨機性,使樹之間的相關性更小,從而克服了過度擬合的問題。

選擇特征后,將根據最佳分割構建樹。每棵樹都給出一個輸出,該輸出被認為是從該樹到給定輸出的“投票”。輸出

接收最大’投票’的隨機森林選擇最終輸出/結果,或者在連續(xù)變量的情況下,所有輸出的平均值被視為最終輸出。

(三)使用Python進行交易的隨機森林算法_第1張圖片

例如,在上圖中,我們可以觀察到每個決策樹已經投票或者預測了特定的類別。隨機森林選擇的最終輸出或類別將是N類,因為它具有多數投票或者是四個決策樹中的兩個預測輸出。

隨機森林的 Python 代碼

在此代碼中,我們將創(chuàng)建一個隨機森林分類器并對其進行訓練,并且給出每日回報。

導入庫
            
              
                import
              
               quantrautil 
              
                as
              
               q

              
                import
              
               numpy 
              
                as
              
               np

              
                from
              
               sklearn
              
                .
              
              ensemble 
              
                import
              
               RandomForestClassifier

            
          

上面導入的庫將按照如下方式使用:

  • quantrautil:這將用于從雅虎 finance 中獲取 BAC 股票的價格數據;
  • numpy:對BAC股票價格執(zhí)行數據操作,以計算輸入特征和輸出結果。如果你想要了解更多關于 numpy 的信息,可以查看 numpy 官網;
  • Sklearn:sklearn 是很多工具和機器學習模型的集合,你可以很自由使用;
  • RandomForestClassifier:將用于創(chuàng)建 Random Forest 分類器模型;
獲取數據

下一步是從 quantrautil 導入 BAC 庫存的價格數據。quantrautil 的 get_data 函數用于獲取從 2000 年1月1日到2019年1月31日的 BAC 數據。如下所示:

            
              data 
              
                =
              
               q
              
                .
              
              get_data
              
                (
              
              
                'BAC'
              
              
                ,
              
              
                '2000-1-1'
              
              
                ,
              
              
                '2019-2-1'
              
              
                )
              
              
                print
              
              
                (
              
              data
              
                .
              
              tail
              
                (
              
              
                )
              
              
                )
              
            
          
            
              [*********************100%***********************]  1 of 1 downloaded
             Open   High    Low  Close  Adj Close     Volume Source
Date                                                               
2019-01-25  29.28  29.72  29.14  29.58      29.27   72182100  Yahoo
2019-01-28  29.32  29.67  29.29  29.63      29.32   59963800  Yahoo
2019-01-29  29.54  29.70  29.34  29.39      29.08   51451900  Yahoo
2019-01-30  29.42  29.47  28.95  29.07      28.77   66475800  Yahoo
2019-01-31  28.75  28.84  27.98  28.47      28.17  100201200  Yahoo

            
          
創(chuàng)建輸入和輸出數據

在這一步中,我將創(chuàng)建輸入和輸出變量。

輸入變量:我使用 (open-close)/open ,(High-Low)/Low,過去5議案的標準差(std_5),過去五天的平均值(ret_5)。

輸出變量:如果明天的收盤價大于今天的收盤價,則輸出變量設置為 1 ,否則設置為 -1。1 表示購買股票,-1表示賣出股票。

輸入和輸出數據的特征完全是隨機的,如果你有興趣可以查看 wiki 。

            
              
                # Features construction 
              
              
data
              
                [
              
              
                'Open-Close'
              
              
                ]
              
              
                =
              
              
                (
              
              data
              
                .
              
              Open 
              
                -
              
               data
              
                .
              
              Close
              
                )
              
              
                /
              
              data
              
                .
              
              Open
data
              
                [
              
              
                'High-Low'
              
              
                ]
              
              
                =
              
              
                (
              
              data
              
                .
              
              High 
              
                -
              
               data
              
                .
              
              Low
              
                )
              
              
                /
              
              data
              
                .
              
              Low
data
              
                [
              
              
                'percent_change'
              
              
                ]
              
              
                =
              
               data
              
                [
              
              
                'Adj Close'
              
              
                ]
              
              
                .
              
              pct_change
              
                (
              
              
                )
              
              
data
              
                [
              
              
                'std_5'
              
              
                ]
              
              
                =
              
               data
              
                [
              
              
                'percent_change'
              
              
                ]
              
              
                .
              
              rolling
              
                (
              
              
                5
              
              
                )
              
              
                .
              
              std
              
                (
              
              
                )
              
              
data
              
                [
              
              
                'ret_5'
              
              
                ]
              
              
                =
              
               data
              
                [
              
              
                'percent_change'
              
              
                ]
              
              
                .
              
              rolling
              
                (
              
              
                5
              
              
                )
              
              
                .
              
              mean
              
                (
              
              
                )
              
              
data
              
                .
              
              dropna
              
                (
              
              inplace
              
                =
              
              
                True
              
              
                )
              
              
                # X is the input variable
              
              

X 
              
                =
              
               data
              
                [
              
              
                [
              
              
                'Open-Close'
              
              
                ,
              
              
                'High-Low'
              
              
                ,
              
              
                'std_5'
              
              
                ,
              
              
                'ret_5'
              
              
                ]
              
              
                ]
              
              
                # Y is the target or output variable
              
              

y 
              
                =
              
               np
              
                .
              
              where
              
                (
              
              data
              
                [
              
              
                'Adj Close'
              
              
                ]
              
              
                .
              
              shift
              
                (
              
              
                -
              
              
                1
              
              
                )
              
              
                >
              
               data
              
                [
              
              
                'Adj Close'
              
              
                ]
              
              
                ,
              
              
                1
              
              
                ,
              
              
                -
              
              
                1
              
              
                )
              
            
          
訓練集合和測試集合的劃分

我們現在將數據集拆分為 75% 的訓練數據集,25% 的測試數據集。

            
              
                # Total dataset length
              
              
dataset_length 
              
                =
              
               data
              
                .
              
              shape
              
                [
              
              
                0
              
              
                ]
              
              
                # Training dataset length
              
              

split 
              
                =
              
              
                int
              
              
                (
              
              dataset_length 
              
                *
              
              
                0.75
              
              
                )
              
              

split

            
          
            
              3597

            
          
            
              
                # Splitiing the X and y into train and test datasets
              
              
X_train
              
                ,
              
               X_test 
              
                =
              
               X
              
                [
              
              
                :
              
              split
              
                ]
              
              
                ,
              
               X
              
                [
              
              split
              
                :
              
              
                ]
              
              
y_train
              
                ,
              
               y_test 
              
                =
              
               y
              
                [
              
              
                :
              
              split
              
                ]
              
              
                ,
              
               y
              
                [
              
              split
              
                :
              
              
                ]
              
              
                # Print the size of the train and test dataset
              
              
                print
              
              
                (
              
              X_train
              
                .
              
              shape
              
                ,
              
               X_test
              
                .
              
              shape
              
                )
              
              
                print
              
              
                (
              
              y_train
              
                .
              
              shape
              
                ,
              
               y_test
              
                .
              
              shape
              
                )
              
            
          
            
              
                (
              
              
                3597
              
              
                ,
              
              
                4
              
              
                )
              
              
                (
              
              
                1199
              
              
                ,
              
              
                4
              
              
                )
              
              
                (
              
              
                3597
              
              
                ,
              
              
                )
              
              
                (
              
              
                1199
              
              
                ,
              
              
                )
              
            
          
訓練機器學習模型

全部數據設置完畢!讓我們訓練一個決策樹分類器模型。樹中的 RandomForestClassifier 函數存儲在變量 clf 中,然后使用 X_train 和 y_train 數據集作為參數調用 fit 方法,以便分類器模型可以學習輸入和輸出之間的關系。

            
              clf 
              
                =
              
               RandomForestClassifier
              
                (
              
              random_state
              
                =
              
              
                5
              
              
                )
              
            
          
            
              
                # Create the model on train dataset
              
              
model 
              
                =
              
               clf
              
                .
              
              fit
              
                (
              
              X_train
              
                ,
              
               y_train
              
                )
              
            
          
            
              
                from
              
               sklearn
              
                .
              
              metrics 
              
                import
              
               accuracy_score

              
                print
              
              
                (
              
              
                'Correct Prediction (%): '
              
              
                ,
              
               accuracy_score
              
                (
              
              y_test
              
                ,
              
               model
              
                .
              
              predict
              
                (
              
              X_test
              
                )
              
              
                ,
              
               normalize
              
                =
              
              
                True
              
              
                )
              
              
                *
              
              
                100.0
              
              
                )
              
            
          
            
              Correct Prediction 
              
                (
              
              
                %
              
              
                )
              
              
                :
              
              
                50.29190992493745
              
            
          
            
              
                # Run the code to view the classification report metrics
              
              
                from
              
               sklearn
              
                .
              
              metrics 
              
                import
              
               classification_report
report 
              
                =
              
               classification_report
              
                (
              
              y_test
              
                ,
              
               model
              
                .
              
              predict
              
                (
              
              X_test
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              report
              
                )
              
            
          
            
                           precision    recall  f1-score   support

         -1       0.50      0.61      0.55       594
          1       0.51      0.40      0.45       605

avg / total       0.50      0.50      0.50      1199

            
          
策略回報
            
              data
              
                [
              
              
                'strategy_returns'
              
              
                ]
              
              
                =
              
               data
              
                .
              
              percent_change
              
                .
              
              shift
              
                (
              
              
                -
              
              
                1
              
              
                )
              
              
                *
              
               model
              
                .
              
              predict
              
                (
              
              X
              
                )
              
            
          
每日返回直方圖
            
              
                %
              
              matplotlib inline

              
                import
              
               matplotlib
              
                .
              
              pyplot 
              
                as
              
               plt
data
              
                .
              
              strategy_returns
              
                [
              
              split
              
                :
              
              
                ]
              
              
                .
              
              hist
              
                (
              
              
                )
              
              
plt
              
                .
              
              xlabel
              
                (
              
              
                'Strategy returns (%)'
              
              
                )
              
              
plt
              
                .
              
              show
              
                (
              
              
                )
              
            
          

(三)使用Python進行交易的隨機森林算法_第2張圖片

策略回報
            
              
                (
              
              data
              
                .
              
              strategy_returns
              
                [
              
              split
              
                :
              
              
                ]
              
              
                +
              
              
                1
              
              
                )
              
              
                .
              
              cumprod
              
                (
              
              
                )
              
              
                .
              
              plot
              
                (
              
              
                )
              
              
plt
              
                .
              
              ylabel
              
                (
              
              
                'Strategy returns (%)'
              
              
                )
              
              
plt
              
                .
              
              show
              
                (
              
              
                )
              
            
          

(三)使用Python進行交易的隨機森林算法_第3張圖片

圖中輸出是根據隨機森林分類器的代碼顯示策略回報和每日回報。

優(yōu)點
  • 避免過度擬合
  • 可用于分類和回歸
  • 可以處理缺失值
缺點
  • 大量的樹結構會占用大量的空間和利用大量時間

在這篇博客中,我們學習了利用隨機森林來進行簡單的策略編寫。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产成人a大片大片在线播放 | 美女被爆羞羞视频网站视频 | 玖玖在线国产精品 | 免费看真人a一级毛片 | 国产成人精品一区二区免费视频 | 中文字幕色综合久久 | 性色生活免费看性大片 | 97看片吧| 久色视频在线 | 真实偷拍激情啪啪对白 | 伊人久久国产精品 | 免费观看一级成人毛片软件 | 国产精品九九视频 | 日韩精品高清自在线 | 中文在线日韩 | 欧美jizz40性欧美 | 亚洲欧美日韩网站 | 一级毛片视频免费 | 五月婷影院 | 女人隐私秘视频黄www免费 | 国产精品美女免费视频大全 | 女人牲交视频一级毛片 | 国产欧美另类性视频 | 色黄啪啪网18以下免费进 | 久久98精品久久久久久婷婷 | 热思思久久 | 天天摸夜夜添 | 国产精品无码久久av | 亚洲欧美日韩高清专区一区 | 亚洲性夜夜综合久久麻豆 | 免费a级毛片大学生免费观看 | 欧美韩国日本在线观看 | 九九99香蕉在线视频免费 | 亚洲毛片一级带毛片基地 | 天天干夜夜爽天天操夜夜爽视频 | 四虎影院永久网址 | 久久毛片视频 | 欧美aaaa在线观看视频免费 | 中文精品久久久久中文 | 久草视频在线资源 | 性欧美精品久久久久久久 |