隨機森林是一種監督式算法,使用由眾多決策樹組成的一種集成學習方法,輸出是對問題最佳答案的共識。隨機森林可用于分類或回歸。
什么是隨機森林?
隨機森林是用于分類和回歸的一種主流集成學習方法。
集成學習方法結合了多種機器學習 (ML) 算法,以獲得更好的模型 – 應用于數據科學的群體智慧。此類學習方法基于這樣一種概念:一群對問題領域知之有限的人集思廣益,可以獲得比一個知識豐富的人更好的解決方案。
隨機森林是一組決策樹,是幾乎人人都熟悉的解決問題的比喻。決策樹通過針對數據集元素,詢問一系列回答是否的問題來得出答案。在下面的示例中,為了預測一個人的收入,決策會考慮變量(特征),例如此人是否有工作(是或否)以及此人是否有房子。在算法環境中,機器會不斷搜索特征,以允許將一組中的觀察結果按如下方式進行分割,即結果組之間盡可能不同,而每個不同子組的成員之間盡可能相似。
隨機森林使用名為“bagging”的技術,通過數據集和特征的隨機自助抽樣樣本并行構建完整的決策樹。雖然決策樹基于一組固定的特征,而且經常過擬合,但隨機性對森林的成功至關重要。
隨機性可確保單個樹之間的相關性較低,從而減少偏差風險。大量樹的存在也減少了過擬合問題,如果模型在訓練數據中加入過多“噪聲”并因此做出糟糕決策,這種問題就會出現。
使用隨機森林模型,隨著模型中不相關樹的數量增加,做出正確預測的可能性也會增加。結果的質量更高,因為它們反映了大多數樹做出的決策。此投票過程通過限制誤差來保護每個樹不互相傷害。即使有些樹錯誤,也會有一些樹正確,因此這組樹集體朝正確的方向前行。雖然隨機森林模型在考慮許多特征時可能會運行緩慢,但即使是使用有限數量特征的小模型也會產生非常好的結果。
隨機森林的工作原理是什么?
隨機森林中的每棵樹在稱為自助聚集 (bagging) 的過程中隨機對訓練數據子集進行抽樣。該模型適合這些較小的數據集,并匯總預測結果。通過有放回抽樣,可以重復使用同一數據的幾個實例,結果就是,這些樹不僅基于不同的數據集進行訓練,而且還使用不同的特性做出決策。
圖像來源:KDNuggets
用例
分類示例包括:
- 欺詐檢測
- 垃圾郵件檢測
- 文本情感分析
- 預測患者風險、敗血癥或癌癥
回歸示例包括:
- 預測欺詐數量
- 預測銷售額
為何選擇隨機森林?
隨機森林模型有五個主要優點:
- 非常適合回歸和分類問題。回歸中的輸出變量是一個數字序列,例如某個街區的房價。分類問題的輸出變量通常是一個單一答案,例如房屋的售價是否高于或低于要價。
- 可以處理缺失值并保持高準確性,即使由于 bagging 和有放回抽樣而缺失大量數據時也是如此。
- 算法由于輸出的是“多數規則”,使得模型幾乎不可能過擬合。
- 該模型可以處理包含數千個輸入變量的龐大數據集,因此成為降維的不錯工具。
- 其算法可用于從訓練數據集中識別非常重要的特征。
其也有一些缺點:
- 隨機森林優于決策樹,但其準確性低于 XGBoost 等梯度提升樹集成。
- 隨機森林包含大量樹,因此速度比 XGBoost 慢。
梯度提升決策樹
梯度提升決策樹 (GBDT) 是一種決策樹集成學習算法,類似于用于分類和回歸的隨機森林。隨機森林和 GBDT 都構建了由多個決策樹組成的模型。兩者的區別在于重建和組合的方式。
GBDT 使用一種稱為 boosting 的技術,以迭代方式訓練一組淺層決策樹,每次迭代都使用上一個模型的殘差擬合下一個模型。最終得到的預測結果是所有樹預測結果的加權總和。隨機森林 bagging 可大幅減少差異和過擬合,而 GBDT boosting 則可減少偏差和欠擬合。
XGBoost(極端梯度提升)是 GBDT 的領先、可擴展的分布式變體。使用 XGBoost 時,樹并行構建,而非順序構建。GBoost 遵循按層生長策略,掃描梯度值并使用這些部分和來評估訓練集中每個可分割點的分割質量。
XGBoost 因其廣泛的用例、可移植性、多樣化的語言支持以及云集成而廣受歡迎。
與 XGBoost 相比,隨機森林模型的準確性可能會因兩個不同的誤差來源(偏差和方差)而下降:
- 梯度提升模型通過以低學習率進行多輪提升來消除偏差和方差。
- 梯度提升模型超參數也有助于消除方差。
- 隨機森林模型使用樹深度和樹的數量消除偏差和方差。
- 隨機森林樹可能需要比梯度提升樹更深入。
- 更多數據可減少偏差和方差。
NVIDIA GPU 加速的
隨機森林、XGBOOST 和端到端數據科學
在架構方面,CPU 僅由幾個具有大緩存內存的核心組成,一次只可以處理幾個軟件線程。相比之下,GPU 由數百個核心組成,可以同時處理數千個線程。
基于 CUDA-X AI 創建的 NVIDIA RAPIDS™ 開源軟件庫套件使您完全能夠在 GPU 上執行端到端數據科學和分析流程。此套件依靠 NVIDIA CUDA 基元進行低級別計算優化,但通過用戶友好型 Python/ target=_blank class=infotextkey>Python 接口實現了 GPU 并行化和高帶寬顯存速度。
借助 RAPIDS GPU DataFrame,數據可以通過一個類似 Pandas 的接口加載到 GPU 上,然后用于各種連接的機器學習和圖形分析算法,而無需離開 GPU。這種級別的互操作性可通過 Apache Arrow 等庫實現,并且可加速端到端流程(從數據準備到機器學習,再到深度學習)。
RAPIDS 的機器學習算法和數學基元遵循熟悉的類似于 scikit-learn 的 API。單塊 GPU 和大型數據中心部署均支持 XGBoost、隨機森林等主流工具。針對大型數據集,相較于同等功效的 CPU,這些基于 GPU 的實施方案能夠以 10 到 50 倍的速度更快地完成任務。
NVIDIA RAPIDS 團隊與 DMLC XGBoost 組織建立了緊密的合作關系,而且 GPU 加速 XGBoost 現已包括無縫嵌入式 GPU 加速,可顯著加快模型訓練速度并提高準確性。對在配備 NVIDIA P100 加速器和 32 個英特爾至強 E5-2698 CPU 核心的系統上運行的 XGBoost 腳本進行的測試表明,相較于在輸出質量相同的非 GPU 系統上運行相同的測試,速度提升了 4 倍。這一點尤為重要,因為數據科學家通常會多次運行 XGBoost,以便調整參數并找到出色的準確性。