随機森林是一種由決策樹構成的(并行)內建算法。本文講解随機森林算法涉及的模型內建、Bagging、算法特點及優缺點等重要知識點,最後介紹關鍵參數和參數調優。
作者:韓信子@ShowMeAI
教程位址:https://www.showmeai.tech/tutorials/34
本文位址:https://www.showmeai.tech/article-detail/191
聲明:版權所有,轉載請聯系平台與作者并注明出處
引言
随機森林是一種由決策樹構成的(并行)內建算法,屬于Bagging類型,通過組合多個弱分類器,最終結果通過投票或取均值,使得整體模型的結果具有較高的精确度和泛化性能,同時也有很好的穩定性,廣泛應用在各種業務場景中。
随機森林有如此優良的表現,主要歸功于「随機」和「森林」,一個使它具有抗過拟合能力,一個使它更加精準。我們會在下文中做更詳細的展開講解。
(本篇部分内容涉及到機器學習基礎知識、決策樹、回歸樹算法,沒有先序知識儲備的寶寶可以檢視ShowMeAI的文章 圖解機器學習 | 機器學習基礎知識、決策樹模型詳解 及 回歸樹模型詳解)。
1.內建學習
1)內建學習
學習随機森林,我們需要先了解一些概念,比如第1個大家要了解的概念是內建學習(ensemble learning):
對于訓練資料集,我們訓練一系列「個體學習器」,再通過「結合政策」将它們內建起來,形成一個更強的學習器,這就是「內建學習」在做的事情,核心思想類似「三個臭皮匠,頂個諸葛亮」。
2)個體學習器
個體學習器是相對于內建學習來說的,其實我們在之前了解到的很多模型,比如C4.5決策樹算法、邏輯回歸算法、樸素貝葉斯算法等,都是個體學習器。
- 若內建中隻包含同種類型的個體學習器,叫做「同質」內建,個體學習器稱作「基學習器」。例如随機森林中全是決策樹內建。
- 若內建中包含不同類型的個體學習器,叫做「異質」內建,個體學習器稱作「元件學習器」。例如同時包含決策樹和神經網絡進行內建。
個體學習器代表的是單個學習器,內建學習代表的是多個學習器的結合。
3)內建學習核心問題
(1)使用什麼樣的個體學習器?
- 個體學習器不能太「弱」,需要有一定的準确性。
- 個體學習器之間要具有「多樣性」,即存在差異性。
(2)如何選擇合适的結合政策建構強學習器?
- 并行組合方式,例如随機森林。
- 傳統組合方式,例如boosting樹模型。
2.Bagging
我們在這裡講到的随機森林是并行內建模型,而Bagging是并行式內建學習方法最著名的代表。
1)Bootstrap Sampling
要了解bagging,首先要了解自助采樣法(Bootstrap Sampling):
- 給定包含 \(m\) 個樣本的資料集,我們先随機取出一個樣本放入采樣集中,再把該樣本放回初始資料集,使得下次采樣時該樣本仍有可能被選中。
- 上述過程重複 \(m\) 輪,我們得到 \(m\) 個樣本的采樣集,初始訓練集中有的樣本在采樣集中多次出現,有的則從未出現,約63.2%的樣本出現在采樣集中,而未出現的約36.8%的樣本可用作驗證集來對後續的泛化性能進行「包外估計」。
2)Bagging
Bagging是Bootstrap aggregating的縮寫,是在Boostrap Sampling基礎上建構的,上述的采樣過程我們可以重複 \(T\) 次,采樣出 \(T\) 個含 \(m\) 個訓練樣本的采樣集,然後基于每個采樣集訓練出一個基學習器,然後将這些基學習器進行結合。
在對預測輸出進行結合時,Bagging通常對分類任務使用簡單投票法,對回歸任務使用簡單平均法,這就是Bagging的基本流程。
從「偏差-方差分解」的角度看,Bagging主要關注降低方差,是以它在不剪枝的決策樹、神經網絡等易受到樣本擾動的學習器上效用更明顯。
3.随機森林算法
1)随機森林算法介紹
Random Forest(随機森林,簡稱RF)是一種基于樹模型的Bagging的優化版本。核心思想依舊是Bagging,但是做了一些獨特的改進——RF使用了CART決策樹作為基學習器。具體過程如下:
- 輸入為樣本集 \(D=\left\{\left(x, y_{1}\right),\left(x_{2}, y_{2}\right), \ldots,\left(x_{m}, y_{m}\right)\right\}\)
- 對于 \(t=1,2,...,T\):
- 對訓練集進行第 \(t\) 次随機采樣,共采集 \(m\) 次,得到包含 \(m\) 個樣本的采樣集 \(D_T\)。
- 用采樣集 \(D_T\) 訓練第 \(T\) 個決策樹模型 \(G_{T} (x)\) ,在訓練決策樹模型的節點的時候,在節點上所有的樣本特征中選擇一部分樣本特征,在這些随機選擇的部分樣本特征中選擇一個最優的特征來做決策樹的左右子樹劃分。
- 分類場景,則 \(T\) 個基模型(決策樹)投出最多票數的類别為最終類别。
2)随機森林核心特點
随機森林核心點是「随機」和「森林」,也是給它帶來良好性能的最大支撐。
「随機」主要展現在兩個方面:
- 樣本擾動:直接基于自助采樣法(Bootstrap Sampling),使得初始訓練集中約63.2%的樣本出現在一個采樣集中。并帶來資料集的差異化。
- 屬性擾動:在随機森林中,對基決策樹的每個結點,先在該結點的特征屬性集合中随機選擇k個屬性,然後再從這k個屬性中選擇一個最優屬性進行劃分。這一重随機性也會帶來基模型的差異性。
「內建」展現在:根據多個(差異化)采樣集,訓練得到多個(差異化)決策樹,采用簡單投票或者平均法來提高模型穩定性和泛化能力。
3)随機森林決策邊界可視化
下面是對于同一份資料集(iris資料集),我們使用決策樹和不同樹棵樹的随機森林做分類的結果,我們對其決策邊界做了可視化。
可以很明顯地看到,随着随機森林中決策樹數量的增多,模型的泛化能力逐漸增強,決策邊界越來越趨于平滑(受到噪聲點的影響越來越小)。
4)随機森林算法優點
下面我們來總結一下随機森林的優缺點:
(1)随機森林優點
- 對于高維(特征很多)稠密型的資料适用,不用降維,無需做特征選擇。
- 建構随機森林模型的過程,亦可幫助判斷特征的重要程度。
- 可以借助模型建構組合特征。
- 并行內建,有效控制過拟合。
- 工程實作并行簡單,訓練速度快。
- 對于不平衡的資料集友好,可以平衡誤差。
- 對于特征确實魯棒性強,可以維持不錯的準确度。
(2)随機森林缺點
- 在噪聲過大的分類和回歸資料集上還是可能會過拟合。
- 相比單一決策樹,因其随機性,模型解釋會更複雜一些。
4.影響随機森林的參數與調優
上面我們已經系統了解了随機森林的原理與機制,下面我們一起來看看工程應用實踐中的一些重點,比如随機森林模型有衆多可調參數,它們有什麼影響,又如何調優。
1)核心影響參數
(1)生成單顆決策樹時的特征數(max_features)
- 增加max_features一般能提高單個決策樹模型的性能,但降低了樹和樹之間的差異性,且可能降低算法的速度。
- 太小的max_features會影響單顆樹的性能,進而影響整體的內建效果。
- 需要适當地平衡和選擇最佳的max_features。
(2)決策樹的棵樹(n_estimators)
- 較多的子樹可以讓模型有更好的穩定性和泛化能力,但同時讓模型的學習速度變慢。
- 我們會在計算資源能支撐的情況下,選擇稍大的子樹棵樹。
(3)樹深(max_depth)
- 太大的樹深,因為每顆子樹都過度學習,可能會有過拟合問題。
- 如果模型樣本量多特征多,我們會限制最大樹深,提高模型的泛化能力。
2)參數調優
(1)RF劃分時考慮的最大特征數(max_features)
- 總數的百分比,常見的選擇區間是[0.5, 0.9]。
(2)決策樹的棵樹(n_estimators)
- 可能會設定為>50的取值,可根據計算資源調整。
(3)決策樹最大深度(max_depth)
- 常見的選擇在4-12之間。
(4)内部節點再劃分所需最小樣本數(min_samples_split)
- 如果樣本量不大,不需要調整這個值。
- 如果樣本量數量級非常大,我們可能會設定這個值為16,32,64等。
(5)葉子節點最少樣本數(min_samples_leaf)
- 為了提高泛化能力,我們可能會設定這個值>1。
更多監督學習的算法模型總結可以檢視ShowMeAI的文章 AI知識技能速查 | 機器學習-監督學習。
視訊教程
可以點選 B站 檢視視訊的【雙語字幕】版本
雙語字幕+資料下載下傳】MIT 6.036 | 機器學習導論(2020·完整版)
https://www.bilibili.com/video/BV1y44y187wN?p=12
機器學習【算法】系列教程
- 圖解機器學習 | 機器學習基礎知識
- 圖解機器學習 | 模型評估方法與準則
- 圖解機器學習 | KNN算法及其應用
- 圖解機器學習 | 邏輯回歸算法詳解
- 圖解機器學習 | 樸素貝葉斯算法詳解
- 圖解機器學習 | 決策樹模型詳解
- 圖解機器學習 | 随機森林分類模型詳解
- 圖解機器學習 | 回歸樹模型詳解
- 圖解機器學習 | GBDT模型詳解
- 圖解機器學習 | XGBoost模型最全解析
- 圖解機器學習 | LightGBM模型詳解
- 圖解機器學習 | 支援向量機模型詳解
- 圖解機器學習 | 聚類算法詳解
- 圖解機器學習 | PCA降維算法詳解
機器學習【實戰】系列教程
- 機器學習實戰 | Python機器學習算法應用實踐
- 機器學習實戰 | SKLearn入門與簡單應用案例
- 機器學習實戰 | SKLearn最全應用指南
- 機器學習實戰 | XGBoost模組化應用詳解
- 機器學習實戰 | LightGBM模組化應用詳解
- 機器學習實戰 | Python機器學習綜合項目-電商銷量預估
- 機器學習實戰 | Python機器學習綜合項目-電商銷量預估<進階方案>
- 機器學習實戰 | 機器學習特征工程最全解讀
- 機器學習實戰 | 自動化特征工程工具Featuretools應用
- 機器學習實戰 | AutoML自動化機器學習模組化
ShowMeAI系列教程推薦
- 大廠技術實作方案系列
- 圖解Python程式設計:從入門到精通系列教程
- 圖解資料分析:從入門到精通系列教程
- 圖解AI數學基礎:從入門到精通系列教程
- 圖解大資料技術:從入門到精通系列教程
- 圖解機器學習算法:從入門到精通系列教程
- 機器學習實戰:手把手教你玩轉機器學習系列
- 深度學習教程:吳恩達專項課程 · 全套筆記解讀
- 自然語言處理教程:斯坦福CS224n課程 · 課程帶學與全套筆記解讀
- 深度學習與計算機視覺教程:斯坦福CS231n · 全套筆記解讀