深度學習與金融市場——基於SVM的特徵提取(二)

在上篇文章裡,我們主要討論如何使用SVM分類器來抓取出表現最好的技術指標。而我們提到的一個關鍵點在於我們使用了極端隨機樹來選擇技術指標中的一部分來生成一組模型進行訓練。在本文中,我們重點來介紹極端隨機樹如何來實現這部分功能以及其原理。
極端隨機樹(Extremely Randomized trees)也叫極限樹(Extra-trees)。極端隨機樹事實上是用Bagging的方法(Bootstrap Aggregating),比一般的隨機樹多一層隨機機制。 那麼什麼是Bagging方法呢?其實是相對於Boosting方法來說的!Bagging是生成平行的一組模型,而Boosting則是生成一個模型佇列,後面的模型會依據前面的模型來進行優化。這麼講通俗易懂吧!對,本文作者不裝,寫文章的目的就是為了讓大家看的懂,所以儘量都用通俗的語言來講。講到這裡,那麼我們知道其實我們用極端隨機樹的目的其實就是為了找到最優的那一些技術指標。基本的過程就是,我們可以設定極端隨機樹隨機的從100個技術指標裡隨機的選擇30個來,當然並非只選一次,而是很多,這樣就生成了一堆選用不同技術指標的模型。最後使用分類器模型進行訓練,得出最優的指標組合。
下面給出一份早些年使用sklearn包寫的極端隨機樹的模型程式碼:
import pandas
from sklearn import model_selection
from sklearn.ensemble import ExtraTreesClassifier
features = pandas.read_csv('technical_indicator.csv')# 使用TA-lib生成的技術指標
array = features .values
X = array[:,0:features.shape[1]-1] # 最後一列為標籤
Y = array[:,features.shape[1]-1]
num_trees = 100 # 生成樹的數量
max_features = 30 # 選取技術指標的個數
cross_vali= model_selection.KFold(n_splits=10, random_state=13) # 將資料分為10份進行交叉驗證,設定隨機種子保證每次劃分的交叉驗證資料集相同
model = ExtraTreesClassifier(n_estimators=num_trees, max_features=max_features)
results = model_selection.cross_val_score(model, X, Y, cv=cross_vali)
接下來討論一下很多同學比較關注的問題,調參。其實這部分現在已經有很多的方法,包括tensorflow裡也已經整合了一些方法,會將一些以前需要自己去寫自動調參演算法的部分融合到高階模型中去。先從原始的方法來討論一下這個問題,如果我們僅僅使用一個CNN分類器,我們如何去篩選最優的技術指標呢?有同學可能會使用窮舉,或者說Grid search。配合上你可憐的1050TI,訓練到山無稜,天地合也沒有看到結果。除非你擁有谷歌的雲伺服器,否則其實最優的方法還是random search,從100個技術指標裡隨機選擇30個指標,然後不斷迴圈訓練,並保證每次訓練的環境是對齊的,對於股票資料,尤其需要了解這一點。每次返回最優的結果,並且將所有的結果儲存。有同學要說了,這和窮舉有什麼差別?事實證明Random Search的效果是最優的,特別是在你的機器配置不是那麼讓人開心的前提下。但是整體來說,這種演算法顯然是不如Bagging方法的效率來的高,也不如Boosting方法的準確率來的高。所以大家可以看到在kaggle上,Boosting演算法仍然時不時一覽眾山小。 同學們可能發現有時候文章裡出現的是方法,有時是演算法。原因是因為我們從生成一堆模型,他們之間的聯絡來講的時候我們說是方法。而實際上,比如adaboost則是一種演算法。這個不細表了,以免混淆視聽。
總體來說,我們在調參的時候,如果沒有合適的選擇,或者說不太方便去將一個search演算法結合到模型中的時候,我們可以自己去寫一個Random Search的演算法,實踐證明它也是比較高效的。當然,這裡有一個點要提醒大家。要選取到一個可以參照的準確率或者loss,這樣你就可以及時的知道什麼時候其實已經獲得了相對最優解。比如股市分類準確率到達了60%,或者loss小於一個你曾經達到的最小值,這都是你可以決定是否從漫長的等待期跳出的訊號。做金融市場相關的深度學習或者說機器學習是一件需要無數次實驗的事情,而每一次的實驗時間都不短,所以記錄和總結就顯得尤為重要。當然訓練的時候也有讓你等待的覺得遙遙無期,所以不要太追求特別高配的電腦,多臺電腦,或者多張顯示卡要更為重要!這就是我建議大家如果有兩萬塊花在顯示卡上的時候,買兩塊2080TI,配上64個PCIE通道AMD的執行緒撕裂者1950X即可,並行能力在Bagging方法上尤其有效,可以極大的提高你的尋求最優解之路。
瞭解更多技巧,請移步我的星球:AI量化(https://t.zsxq.com/RvfY37y) 星球限時免費,如需加入,請私信我獲得免費邀請碼!

零基礎學習Python與深度學習應用請關注星球:Python與深度學習 https://t.zsxq.com/bUFayZ3

微信公眾號:QTechAI
