機器學習中,隨機森林是一個包含多個決策樹的分類器,並且其輸出的類別是由個別輸出的類別的眾樹而定,它有着許多的有點,能很好地處理多分類問題。
基本算法
- 原始訓練集為N,應用bootstrap法有放回的隨機抽取k個新的自助樣本集,並由構建k棵決策樹。每次未被抽到的樣本組成了k個袋外數據;
- 設有M個變量,在每一棵樹的每個節點處隨機抽取m(m<M)個變量,從m中選擇一個最具有分辨能力的變量,變量的閾值通過檢查每一個分類點確定。
- 每棵樹最大限度的生長,不做任何修剪(普通的決策樹算法需要剪枝)。
- 將生成的多棵分類樹組成隨機森林,用隨機森林分類器對新的數據進行判斷與分類,其分類結果按決策樹分類器的投票決定。
優點
- 對於很多種資料,它可以產生高准確度的分類器。
- 它可以處理大量的輸入變量。
- 可以在決定類別時,評估變量的重要性。
- 它包含一個好方法可以估計遺失的資料,並且,如果有很大一部分的資料遺失,仍可以維持准確度。
- 它提供一個實驗方法,可以去偵測variable interactions。
- 對於不平衡的分類資料集來說,它可以平衡誤差。
- 它計算各例中的近親度,對於數據挖掘、偵測偏離者(outlier)和將資料視覺化非常有用。
- 它可以延伸應用在未標記的資料上,即使用非監督式聚類方法。也可以偵測偏離者和觀看資料。
- 學習過程速度很快。
- 能夠處理很高維度的數據,並且不用做特征選擇。
- 創建隨機森林的時候,對generlization error使用的是無偏估計。
- 容易擴展到並行方法
缺點
- 在某些噪音較大的分類或回歸問題上會過擬合
- 對於有不同級別的屬性的數據,級別划分較多的屬性會對隨機森林產生更大的影響,也就是說隨機森林在這種數據上產生的屬性權值是不可信的。
簡要描述
隨機森林,是用隨機的方式建立一個森林,森林里面有很多的決策樹組成,隨機森林的每一棵之間是沒有關聯的,在得到森林之后,當有一個新的輸入樣本進入的時候,讓森林中的每一棵決策樹分別進行判斷,對其進行分類,最后預測為被選擇的最多的那一類。
建立決策樹的過程中,需要注意兩點:采樣與完全分裂。首先是兩個隨機采樣的過程,random forest對輸入的數據進行行列的采樣;這里的采樣,可能存在重復的樣本。假設有N個樣本,那么采樣的樣本也為N個,在訓練的時候,每一棵樹的輸入樣本都不是全部的樣本,使得相對不容易出現over-fitting。然后進行列采樣,從M個feature中選擇m(m<M)個,之后就是對采樣后的數據使用完全分裂的方式建立出決策樹,這樣決策樹的某一個葉子節點要么是無法繼續分裂的,要么里面所有的樣本都指向同一個分類。 一般很多的決策樹算法都有一個很重要的步驟-剪枝,這里不需要這樣做,因為之前的兩個隨機采樣的過程保證了隨機性,就算不減枝,也不會出現over-fitting。
需要注意的是: 每一棵決策樹相對是較弱的,但是將多棵決策樹結合起來就十分強大。可以這樣比喻隨機森林算法:每一棵決策樹就是一個精通某一個窄領域的專家(從M個feature中選擇m個讓每一棵決策樹進行學習),這樣在隨機森林中就有很多個精通不同領域的專家,對一個新的輸入數據,可以從不同的角度去分析,最終由各方面的專家進行投票,得到最終結果。
RF、XGB、GBDT、LigthGBM 對缺失值的敏感性;
RF:不敏感,它包含一個好方法可以估計遺失的資料,並且,如果有很大一部分的資料遺失,仍可以維持准確度
XGB:不敏感,算法中對缺失值進行了處理,對缺失特征值分裂時,左右節點都分裂,最終看哪個損失更小就分到哪邊,所以對缺失值不敏感
GBDT:對缺失值沒有對應處理,敏感
ligthGBM: 不敏感,和Xgboost是一樣的。每次分割的時候,分別把缺失值放在左右兩邊各計算一次,然后比較兩種情況的增益,擇優錄取
隨機森林做多分類:
自己的理解:
多分類:根據基尼系數最小的分裂原則,看葉子節點中,占比最高的是哪一個類別就分為哪個類別,最后多棵樹的分類結果進行投票 (或許有誤)
回歸:均方誤差損失最小化原則,就是葉子節點的均值作為回歸值,最終多棵樹再次求平均
關於XGBOOST多分類 : 回歸或者二分類,每次迭代訓練一棵樹。多分類,基於one vs all的方式訓練多棵。
多分類問題會對每個類別生成一棵樹,而分類或者回歸,每次迭代生成一棵樹,最后使用加法模型加權求和得到最終的結果。預測時一樣,用加法模型計算最終的結果。
RF和GBDT的區別
相同點:
-
都是由多棵樹組成,最終的結果都是由多棵樹一起決定。
不同點:
- 集成學習:RF屬於bagging思想,而GBDT是boosting思想
- 偏差-方差權衡:RF不斷的降低模型的方差,而GBDT不斷的降低模型的偏差
- 訓練樣本:RF每次迭代的樣本是從全部訓練集中有放回抽樣形成的,而GBDT每次使用全部樣本
- 並行性:RF的樹可以並行生成,而GBDT只能順序生成(需要等上一棵樹完全生成)
- 最終結果:RF最終是多棵樹進行多數表決(回歸問題是取平均),而GBDT是加權融合
- 數據敏感性:RF對異常值不敏感,而GBDT對異常值比較敏感
- 泛化能力:RF不易過擬合,而GBDT容易過擬合
高頻知識點
- XGB與GBDT、隨機森林等模型相比,有什么優缺點?
- XGB為什么可以並行訓練?
- XGB用二階泰勒展開的優勢在哪?
- XGB為了防止過擬合,進行了哪些設計?
- XGB如何處理缺失值?
- XGB如何分裂一個結點?如何選擇特征?
- XGB中一顆樹停止生長的條件有哪些?
- XGB葉子結點的權重有什么含義?如何計算?
- 訓練一個XGB模型,經歷了哪些過程?調參步驟是什么?
- XGB如何給特征評分?
知識點: 珍藏版 | 20道XGBoost面試題
參考:https://wustchuichui.github.io/2016/04/06/Random-forest/