轉自JoinQuant量化課堂
一、相關概念
分類器:分類器就是給定一個樣本的數據,判定這個樣本屬于哪個類別的算法。例如在股票漲跌預測中,我們認為前一天的交易量和收盤價對于第二天的漲跌是有影響的,那么分類器就是通過樣本的交易量和收盤價預測第二天的漲跌情況的算法。
分裂:在決策樹的訓練過程中,需要一次次的將訓練數據集分裂成兩個子數據集,這個過程就叫做分裂。
特征:在分類問題中,輸入到分類器中的數據叫做特征。以上面的股票漲跌預測問題為例,特征就是前一天的交易量和收盤價。
待選特征:在決策樹的構建過程中,需要按照一定的次序從全部的特征中選取特征。待選特征就是在目前的步驟之前還沒有被選擇的特征的集合。例如,全部的特征是 ABCDE,第一步的時候,待選特征就是ABCDE,第一步選擇了C,那么第二步的時候,待選特征就是ABDE。
分裂特征:接待選特征的定義,每一次選取的特征就是分裂特征,例如,在上面的例子中,第一步的分裂特征就是C。因為選出的這些特征將數據集分成了一個個不相交的部分,所以叫它們分裂特征。
二、決策樹的構建過程
要說隨機森林,必須先講決策樹。決策樹是一種基本的分類器,一般是將特征分為兩類(決策樹也可以用來回歸,不過本文中暫且不表)。構建好的決策樹呈樹形結構,可以認為是if-then規則的集合,主要優點是模型具有可讀性,分類速度快。
我們用選擇量化工具的過程形象的展示一下決策樹的構建。假設現在要選擇一個優秀的量化工具來幫助我們更好的炒股,怎么選呢?
第一步:看看工具提供的數據是不是非常全面,數據不全面就不用。
第二步:看看工具提供的API是不是好用,API不好用就不用。
第三步:看看工具的回測過程是不是靠譜,不靠譜的回測出來的策略也不敢用啊。
第四步:看看工具支不支持模擬交易,光回測只是能讓你判斷策略在歷史上有用沒有,正式運行前起碼需要一個模擬盤吧。
這樣,通過將“數據是否全面”,“API是否易用”,“回測是否靠譜”,“是否支持模擬交易”將市場上的量化工具貼上兩個標簽,“使用”和“不使用”。
上面就是一個決策樹的構建,邏輯可以用下圖表示:
在上圖中,綠顏色框中的“數據”“API”“回測”“模擬交易”就是這個決策樹中的特征。如果特征的順序不同,同樣的數據集構建出的決策樹也可能不同。特征的順序分別是“數據”“API”“回測”“模擬交易”。如果我們選取特征的順序分別是“數據”“模擬交易”“API”“回測”,那么構建的決策樹就完全不同了。
可以看到,決策樹的主要工作,就是選取特征對數據集進行劃分,最后把數據貼上兩類不同的標簽。如何選取最好的特征呢?還用上面選擇量化工具的例子:假設現在市場上有100個量化工具作為訓練數據集,這些量化工具已經被貼上了“可用”和“不可用”的標簽。
我們首先嘗試通過“API是否易用”將數據集分為兩類;發現有90個量化工具的API是好用的,10個量化工具的API是不好用的。而這90個量化工具中,被貼上“可以使用”標簽的占了40個,“不可以使用”標簽的占了50個,那么,通過“API是否易用”對于數據的分類效果并不是特別好。因為,給你一個新的量化工具,即使它的API是易用的,你還是不能很好貼上“使用”的標簽。
再假設,同樣的100個量化工具,通過“是否支持模擬交易”可以將數據集分為兩類,其中一類有40個量化工具數據,這40個量化工具都支持模擬交易,都最終被貼上了“使用”的標簽,另一類有60個量化工具,都不支持模擬交易,也都最終被貼上了“不使用”的標簽。如果一個新的量化工具支持模擬交易,你就能判斷這個量化工具是可以使用。我們認為,通過“是否支持模擬交易”對于數據的分類效果就很好。
在現實應用中,數據集往往不能達到上述“是否支持模擬交易”的分類效果。所以我們用不同的準則衡量特征的貢獻程度。主流準則的列舉3個:ID3算法(J. Ross Quinlan于1986年提出),采用信息增益最大的特征;C4.5算法(J. Ross Quinlan于1993年提出)采用信息增益比選擇特征;CART算法(Breiman等人于1984年提出)利用基尼指數最小化準則進行特征選擇。
(如果想進行更深一步的學習,可以參考《統計學習方法》或者相關博文進行更一步的學習。未來的量化課堂也會涉及這方面的內容。)
三、隨機森林的構建過程
決策樹相當于一個大師,通過自己在數據集中學到的知識對于新的數據進行分類。但是俗話說得好,一個諸葛亮,玩不過三個臭皮匠。隨機森林就是希望構建多個臭皮匠,希望最終的分類效果能夠超過單個大師的一種算法。
那隨機森林具體如何構建呢?有兩個方面:數據的隨機性選取,以及待選特征的隨機選取。
數據的隨機選取:
首先,從原始的數據集中采取有放回的抽樣,構造子數據集,子數據集的數據量是和原始數據集相同的。不同子數據集的元素可以重復,同一個子數據集中的元素也可以重復。第二,利用子數據集來構建子決策樹,將這個數據放到每個子決策樹中,每個子決策樹輸出一個結果。最后,如果有了新的數據需要通過隨機森林得到分類結果,就可以通過對子決策樹的判斷結果的投票,得到隨機森林的輸出結果了。如下圖,假設隨機森林中有3棵子決策樹,2棵子樹的分類結果是A類,1棵子樹的分類結果是B類,那么隨機森林的分類結果就是A類。
待選特征的隨機選取:
與數據集的隨機選取類似,隨機森林中的子樹的每一個分裂過程并未用到所有的待選特征,而是從所有的待選特征中隨機選取一定的特征,之后再在隨機選取的特征中選取最優的特征。這樣能夠使得隨機森林中的決策樹都能夠彼此不同,提升系統的多樣性,從而提升分類性能。
下圖中,藍色的方塊代表所有可以被選擇的特征,也就是目前的待選特征。黃色的方塊是分裂特征。左邊是一棵決策樹的特征選取過程,通過在待選特征中選取最優的分裂特征(別忘了前文提到的ID3算法,C4.5算法,CART算法等等),完成分裂。右邊是一個隨機森林中的子樹的特征選取過程。