在機器學習中，隨機森林是一個包含多個決策樹的分類器，並且其輸出的類別是由個別樹輸出的類別的眾數而定。 這個術語是 1995 年由貝爾實驗室的所提出的隨機決策森林（random decision forests）而來的。 然後和發展出推論出隨機森林的演演算法。而 Random Forests 是他們的商標。 這個方法則是結合 Breimans 的 Bootstrap aggregating 想法和 Ho 的 random subspace method 以建造決策樹的集合。 歷史 隨機森林的引入最初是由華裔美國人於 1995 年先提出的。然後隨機森林由 Leo Breiman 於 2001 年在一篇論文中提出的。這篇文章描述了一種結合隨機節點最佳化和 bagging，利用類 CART 過程構建不相關樹的森林的方法。此外，本文還結合了一些已知的、新穎的、構成了現代隨機森林實踐的基礎成分，特別是 使用 outofbag 誤差來代替泛化誤差 透過排列度量變數的重要性 演算法 預備：決策樹學習 決策樹是機器學習的常用方法。 Hastie 等說：樹學習是如今最能滿足於資料探勘的方法，因為它在特徵值的縮放和其他各種轉換下保持不變，對無關特徵是穩健的，而且能生成可被檢查的模型。然而，它通常並不準確。 特別的，生長很深的樹容易學習到高度不規則的模式，即過學習，在訓練集上具有低偏差和高變異數的特點。隨機森林是平均多個深決策樹以降低變異數的一種方法，其中，決策樹是在一個數據集上的不同部分進行訓練的。這是以偏差的小幅增加和一些可解釋性的喪失為代價的，但是在最終的模型中通常會大大提高效能。 Bagging 隨機森林訓練演算法把 bagging 的一般技術應用到樹學習中。給定訓練集 Xx_1dotsx_n 和目標 Yy_1dotsy_n，bagging 方法重複（B 次）從訓練集中有放回地取樣，然後在這些樣本上訓練樹模型： For 1 Sample with replacement training examples from call these Train a classification or regression tree on 在訓練結束之後，對未知樣本 x 的預測可以透過對 x 上所有單個迴歸樹的預測求平均來實現： hat f frac 1B sum_b1Bf_b x 或者在分類任務中選擇多數投票的類別。 這種 bagging 方法在不增加偏置的情況下降低了方差，從而帶來了更好的效能。這意味著，即使單個樹模型的預測對訓練集的噪聲非常敏感，但對於多個樹模型，只要這些樹並不相關，這種情況就不會出現。簡單地在同一個資料集上訓練多個樹模型會產生強相關的樹模型（甚至是完全相同的樹模型）。Bootstrap 抽樣是一種透過產生不同訓練集從而降低樹模型之間關聯性的方法。 此外，上所有單個迴歸樹的預測的標準差可以作為預測的不確定性的估計： sigma sqrt frac sum_b1B f_b x hat f2B1 樣本或者樹的數量 B 是一個自由引數。通常使用幾百到幾千棵樹，這取決於訓練集的大小和性質。使用交叉驗證，或者透過觀察 outofbag 誤差（那些不包含的抽樣集合在樣本的平均預測誤差），可以找到最優的 B 值。當一些樹訓練到一定程度之後，訓練集和測試集的誤差開始趨於平穩。 從 bagging 到隨機森林 上面的過程描述了樹的原始的 bagging 演算法。隨機森林與這個通用的方案只有一點不同：它使用一種改進的學習演算法，在學習過程中的每次候選分裂中選擇特徵的隨機子集。這個過程有時又被稱為 特徵 bagging。這樣做的原因是 bootstrap 抽樣導致的樹的相關性：如果有一些特徵預測目標值的能力很強，那麼這些特徵就會被許多樹所選擇，這樣就會導致樹的強相關性。分析了不同條件下 bagging 和隨機子空間投影對精度提高的影響。 典型地，對於一個包含 個特徵的分類問題，可以在每次劃分時使用 sqrt p 個特徵。對於迴歸問題，作者推薦 但不少於 5 個特徵。 極限樹 再加上一個隨機化步驟，就會得到極限隨機樹（extremely randomized trees），即極限樹。與普通的隨機森林相同，他們都是單個樹的整合，但也有不同：首先，每棵樹都使用整個學習樣本進行了訓練，其次，自上而下的劃分是隨機的。它並不計算每個特徵的最優劃分點（例如，基於資訊熵或者基尼不純度），而是隨機選擇劃分點。該值是從特徵經驗範圍內均勻隨機選取的。在所有隨機的劃分點中，選擇其中分數最高的作為結點的劃分點。與普通的隨機森林相似，可以指定每個節點要選擇的特徵的個數。該引數的預設值，對於分類問題，是 sqrt n，對於迴歸問題，是 n，其中 n 是模型的特徵個數。 性質 特徵的重要性 隨機森林天然可用來對迴歸或分類問題中變數的重要性進行排序。下面的技術來自 Breiman 的論文，R 語言包 randomForest 包含它的實現。 度量資料集 mathcal D_n X_i Y_i_i1n 的特徵重要性的第一步是，使用訓練集訓練一個隨機森林模型。在訓練過程中記錄下每個資料點的 outofbag 誤差，然後在整個森林上進行平均。 為了度量第 j 個特徵的重要性，第 j 個特徵的值在訓練資料中被打亂，並重新計算打亂後的資料的 outofbag 誤差。則第 j 個特徵的重要性分數可以透過計算打亂前後的 outofbag 誤差的差值的平均來得到，這個分數透過計算這些差值的標準差進行標準化。 產生更大分數的特徵比小分數的特徵更重要。這種特徵重要性的度量方法的統計定義由 Zhu et al 給出。 這種度量方法也有一些缺陷。對於包含不同取值個數的類別特徵，隨機森林更偏向於那些取值個數較多的特徵，partial permutations、growing unbiased trees 可以用來解決這個問題。如果資料包含一些相互關聯的特徵組，那麼更小的組更容易被選擇。 與最近鄰演算法的關係 Lin 和 Jeon 在 2002 年指出了隨機森林演算法和 K 近鄰演算法 NN 的關係。 事實證明，這兩種演算法都可以被看作是所謂的 加權鄰居的方案。這些在資料集 x_i y_i_i1n 上訓練的模型透過檢視一個點的鄰居來計算一個新點的預測值 hat y，並且使用權重函式對這些鄰居進行加權 hat y sum_i1n W x_i x y_i 其中， W x_i x 是第個點在同一棵樹中相對於新的資料點的非負權重。對於任一特定的點，x_i 的權重的和必須為 1。權重函式設定如下： 對於 NN 演算法，如果是距離最近的個點之一，則 W x_i x frac 1k，否則為 0。 對於樹，如果與屬於同一個包含個點的葉結點，則 W x_i x frac 1k，否則為 0。 因為森林平均了棵樹的預測，且這些樹具有獨立的權重函式 W_j，故森林的預測值是： hat y frac 1msum_j1msum_i1n W_jx_i x y_i sum_i1nleft frac 1msum_j1m W_jx_i xright y_i 上式表明了整個森林也採用了加權的鄰居方案，其中的權重是各個樹的平均。在這裡，的鄰居是那些在任一樹中屬於同一個葉節點的點 x_i。只要 x_i 與在某棵樹中屬於同一個葉節點，x_i 就是的鄰居。 基於隨機森林的非監督學習 作為構建的一部分，隨機森林預測器自然會導致觀測值之間的不相似性度量。還可以定義未標記資料之間的隨機森林差異度量：其思想是構造一個隨機森林預測器，將 觀測 資料與適當生成的合成數據區分開來。 觀察到的資料是原始的未標記資料，合成數據是從參考分佈中提取的。隨機森林的不相似性度量之所以吸引人，是因為它能很好地處理混合變數型別，對輸入變數的單調變換是不敏感的，而且在存在異常值的情況下度量結果依然可靠。由於其固有變數的選擇，隨機森林不相似性很容易處理大量的半連續變數。 學習演演算法 根據下列演演算法而建造每棵樹： 用 N 來表示訓練用例（樣本）的個數，M 表示特徵數目。 輸入特徵數目 m，用於確定決策樹上一個節點的決策結果；其中 m 應遠小於 M。 從 N 個訓練用例（樣本）中以有放回抽樣的方式，取樣 N 次，形成一個訓練集（即 bootstrap 取樣），並用未抽到的用例（樣本）作預測，評估其誤差。 對於每一個節點，隨機選擇 m 個特徵，決策樹上每個節點的決定都是基於這些特徵確定的。根據這 m 個特徵，計算其最佳的分裂方式。 每棵樹都會完整成長而不會剪枝（Pruning，這有可能在建完一棵正常樹狀分類器後會被採用）。 優點 隨機森林的優點有： 對於很多種資料，它可以產生高準確度的分類器。 它可以處理大量的輸入變數。 它可以在決定類別時，評估變數的重要性。 在建造森林時，它可以在內部對於一般化後的誤差產生不偏差的估計。 它包含一個好方法可以估計遺失的資料，並且，如果有很大一部分的資料遺失，仍可以維持準確度。 它提供一個實驗方法，可以去偵測 variable interactions。 對於不平衡的分類資料集來說，它可以平衡誤差。 它計算各例中的親近度，對於資料探勘、偵測離群點（outlier）和將資料視覺化非常有用。 使用上述。它可被延伸應用在未標記的資料上，這類資料通常是使用非監督式聚類。也可偵測偏離者和觀看資料。 學習過程是很快速的。 開源實現 The Original RF by Breiman and Cutler written in Fortran 77 ALGLIB contains a modification of the random forest in C C Pascal VBA party Implementation based on the conditional inference trees in R randomForest for classification and regression in R Python implementation with examples in scikitlearn Orange data mining suite includes random forest learner and can visualize the trained forest Matlab implementation SQP software uses random forest algorithm to predict the quality of survey questions depending on formal and linguistic characteristics of the question Weka RandomForest in Java library and GUI ranger A C implementation of random forest for classification regression probability and survival Includes interface for R 參閱 機器學習 提升方法 機器學習方法 決策樹學習 機器學習演算法 整合學習 統計與機器學習技術 無母數統計 隨機化演算法 將一定程度的隨機性作為其邏輯或程式的一部分的演算法 參考文獻 外部連結 Ho Tin Kam 1995 Random Decision Forest Proc of the 3rd Intl Conf on Document Analysis and Recognition Montreal Canada August 1418 1995 278282（Preceding Work） Ho Tin Kam 1998 The Random Subspace Method for Constructing Decision Forests IEEE Trans on Pattern Analysis and Machine Intelligence 20 8 832844（Preceding Work） Deng H Runger G Tuv Eugene 2011 Bias of importance measures for multivalued attributes and solutions Proceedings of the 21st International Conference on Artificial Neural Networks ICANN2011 Amit Yali and Geman Donald 1997 Shape quantization and recognition with randomized trees Neural Computation 9 15451588 （Preceding work） Breiman Leo Looking Inside The Black Box Wald Lecture II（Lecture） Breiman Leo 2001 Random Forests Machine Learning 45 1 532（Original Article） Random Forest classifier description（Site of Leo Breiman） Liaw Andy Wiener Matthew Classification and Regression by randomForest R News 2002 Vol 23 p 18 （Discussion of the use of the random forest package for R） Ho Tin Kam 2002 A Data Complexity Analysis of Comparative Advantages of Decision Forest Constructors Pattern Analysis and Applications 5 p 102112 （Comparison of bagging and random subspace method） Category 分類演演算法 Category 機器學習 Category 隨機性 Category 決策樹 Category 計算統計學 Category 整合學習