我們是否必須調整隨機森林中的樹木數量?
隨機森林分類器的軟件實現有許多參數,允許用戶微調算法的行為,包括樹的數量 $ T $ 在樹林裡。這是一個需要調整的參數嗎,和 $ m $ ,每次拆分要嘗試的功能數量(Leo Breiman 所說的
mtry
)?
找到處理的代碼片段很常見 $ T $ 作為超參數,並嘗試以與任何其他超參數相同的方式對其進行優化。這只是在浪費計算能力:當所有其他超參數都固定時,模型的損失會隨著樹數的增加而隨機減少。
直觀的解釋
隨機森林中的每棵樹都是相同分佈的。這些樹是相同分佈的,因為每棵樹都是使用對每棵樹重複的隨機化策略來生長的:boostrap 訓練數據,然後通過從 $ m $ 為該節點選擇的特徵。隨機森林過程與 boosting 形成對比,樹是在它們自己的引導子樣本上生長的,而不考慮其他樹。(從這個意義上說,隨機森林算法是“令人尷尬的並行”。)
在二元情況下,每個隨機森林樹對每個樣本的正類投 1 票或對負類投 0 票。所有這些投票的平均值作為整個森林的分類分數。(一般來說 $ k $ -nary case,我們只是有一個分類分佈,但所有這些論點仍然適用。)
大數的弱定律適用於這些情況,因為
- 樹的決策是同分佈的 rvs(從某種意義上說,隨機過程確定樹是投 1 票還是 0 票)和
- 感興趣的變量只取值 $ {0,1} $ 對於每棵樹,因此每個實驗(樹決策)具有有限方差(因為可數有限 rv 的所有矩都是有限的)。
在這種情況下應用 WLLN 意味著,對於每個樣本,隨著樹的數量趨於無窮大,集成將趨向於該樣本的特定平均預測值。此外,對於給定的一組樣本,這些樣本中感興趣的統計數據(例如預期的對數損失)也將收斂到一個平均值,因為樹的數量趨於無窮大。
統計學習的要素
哈斯蒂等人。在ESL(第 596 頁)中非常簡要地解決這個問題。
另一種說法是隨機森林“不能過度擬合”數據。確實,增加 $ \mathcal{B} $ [集成中樹的數量]不會導致隨機森林序列過擬合……但是,這個限制可以使數據過擬合;完全生長的樹的平均值可能會導致模型過於豐富,並產生不必要的方差。Segal (2004) 通過控制隨機森林中生長的單棵樹的深度證明了性能的小幅提升。我們的經驗是,使用成熟的樹很少會花費太多,並且會減少一個調整參數。
換句話說,對於一個固定的超參數配置,增加樹的數量並不能過擬合數據;但是,其他超參數可能是過擬合的來源。
數學解釋
本節總結了 Philipp Probst 和 Anne-Laure Boulesteix “調整或不調整隨機森林中的樹數? ”。關鍵結果是
- ROC 曲線下的預期錯誤率和麵積可以是樹數的非單調函數。
一個。預期錯誤率(相當於 $ \text{error rate} = 1 - \text{accuracy} $ ) 作為 $ T $ 樹的數量由下式給出 $$ E(e_i(T)) = P\left(\sum_{t=1}^T e_{it} > 0.5\cdot T\right) $$ 在哪裡 $ e_{it} $ 是具有期望的二項式 rv $ E(e_{it}) = \epsilon_i $ ,由索引的特定樹的決策 $ t $ . 這個功能在增加 $ T $ 為了 $ \epsilon_{i} > 0.5 $ 並減少 $ T $ 為了 $ \epsilon_{i} < 0.5 $ . 作者觀察到
我們看到錯誤率曲線的收斂速度只取決於 $ \epsilon_i $ 的意見。因此,錯誤率曲線的收斂速度並不直接取決於觀測數 n 或特徵數,但這些特徵可能會影響 $ \epsilon_i $ ,因此可能是第 4.3.1 節中概述的收斂速度
灣。作者指出,ROC AUC(又名 $ c $ -statistic ) 可以被操縱為具有單調或非單調曲線作為函數 $ T $ 取決於樣本的預期分數如何與其真實類別保持一致。 2. 基於概率的度量,例如交叉熵和 Brier 分數,是作為樹數的函數的單調函數。
一個。布雷爾分數有預期 $$ E(b_i(T)) = E(e_{it})^2 + \frac{\text{Var}(e_{it})}{T} $$ 這顯然是一個單調遞減的函數 $ T $ .
灣。對數損失(又名交叉熵損失)具有可以通過泰勒展開近似的期望 $$ E(l_i(T)) \approx -\log(1 - \epsilon_i + a) + \frac{\epsilon_i (1 - \epsilon_i) }{ 2 T (1 - \epsilon_i + a)^2} $$ 這同樣是一個減函數 $ T $ . (常數 $ a $ 是一個小的正數,它使對數和分母內的值遠離零。) 3. 考慮到 306 個數據集的實驗結果支持了這些發現。
實驗演示
diamonds
這是使用隨附的數據進行的實際演示ggplot2
。我把它變成了一個分類任務,將價格二值化為“高”和“低”類別,分界線由中間價確定。從交叉熵的角度來看,模型改進非常順利。(然而,情節不是單調的——與上述理論結果的分歧是因為理論結果與期望有關,而不是與任何一個實驗的特定實現有關。)
另一方面,從某種意義上說,錯誤率具有欺騙性,它可以上下波動,有時會在恢復之前停留在那裡等待許多額外的樹。這是因為它沒有衡量分類決策的不正確程度。這可能會導致錯誤率隨著樹的數量而出現性能提升的“光點”,我的意思是,決策邊界上的某些樣本將在預測的類之間來回反彈。要或多或少地抑制這種行為,可能需要大量的樹。
另外,看看極少數樹的錯誤率行為——結果大相徑庭!這意味著以這種方式選擇樹數為前提的方法受到大量隨機性的影響。此外,使用不同的隨機種子重複相同的實驗可能會導致人們純粹基於這種隨機性來選擇不同數量的樹。從這個意義上說,少數樹的錯誤率行為完全是一種人工製品,既因為我們知道 LLN 意味著隨著樹數的增加,這將趨向於它的預期,也因為理論結果在第 2 節中。(交叉驗證主持了許多問題,將錯誤率/準確性的優點與其他統計數據進行比較。)
相比之下,交叉熵測量在 200 棵樹之後基本穩定,在 500 棵樹之後幾乎持平。
最後,我用不同的隨機種子重複了完全相同的錯誤率實驗。小程序的結果明顯不同 $ T $ .
“那我該如何選擇 $ T $ 如果我不調整它呢?”
不需要調整樹的數量;相反,只需將樹的數量設置為一個大的、計算上可行的數字,然後讓 LLN 的漸近行為來完成其餘的工作。
如果您有某種約束(終端節點總數的上限、模型估計時間的上限、磁盤上模型大小的限制),這相當於選擇最大的 $ T $ 滿足您的約束。
“人們為什麼要調 $ T $ 如果這樣做是錯的?”
這純粹是推測,但我認為調整隨機森林中樹的數量仍然存在的信念與兩個事實有關:
- AdaBoost 和 XGBoost 等 Boosting 算法確實需要用戶調整集成中樹的數量,並且一些軟件用戶不夠複雜,無法區分 boosting 和 bagging。(有關 boosting 和 bagging 區別的討論,請參閱Is random forest a boosting algorithm?)
- 標準隨機森林實現,如 R
randomForest
(基本上是 Breiman 的 FORTRAN 代碼的 R 接口),僅報告錯誤率(或等效地,準確性)作為樹的函數。這是具有欺騙性的,因為準確度不是樹數的單調函數,而連續適當的評分規則(例如 Brier score 和 logloss)是單調函數。引文
- Philipp Probst & Anne-Laure Boulesteix “調整或不調整隨機森林中的樹木數量? ”