機器學習——隨機森林
文章目錄
1. 整合學習
1.1 概述
整合學習並不是一個單獨的機器學習演算法,它是通過構建並結合多個機器學習器來完成學習任務。使用多個個體學習器構建一個強學習器,也就是我們常說的“三個臭皮匠,頂個諸葛亮”。整合學習可以用於分類問題整合,迴歸問題整合,特徵選取整合,異常點檢測整合等等
1.2 個體學習器
個體學習器有兩種:
- 同質:比如都是決策樹個體學習器,或者都是神經網路個體學習器。
- 異質:比如對訓練集採用支援向量機個體學習器,邏輯迴歸個體學習器和樸素貝葉斯個體學習器來學習,再通過某種結合策略來確定最終的分類強學習器。
一般我們常說的整合學習的方法都是指的同質個體學習器。而同質個體學習器使用最多的模型是CART決策樹和神經網路。同質個體學習器按照個體學習器之間是否存在依賴關係可以分為兩類:
- 第一個是個體學習器之間存在強依賴關係,一系列個體學習器基本都需要序列生成,代表演算法是boosting系列演算法
- 第二個是個體學習器之間不存在強依賴關係,一系列個體學習器可以並行生成,代表演算法是bagging和隨機森林(Random Forest)系列演算法
1.3 強學習器
個體學習器通過某種結合策略生成強學習器。
1.4 boosting(序列生成)
Boosting演算法的工作機制:
- 給訓練集樣本初始權重,訓練出一個弱學習器1
- 根據弱學習的學習誤差率表現來更新訓練樣本的權重,使得之前弱學習器1學習誤差率高的訓練樣本點的權重變高,使得這些誤差率高的點在後面的弱學習器2中得到更多的重視。
- 調整權重後的訓練集來訓練弱學習器2
- 如此重複進行,直到弱學習器數達到事先指定的數目T
- 將這T個弱學習器通過集合策略進行整合,得到最終的強學習器。
Boosting系列演算法裡最著名演算法主要有AdaBoost演算法和提升樹(boosting tree)系列演算法。提升樹系列演算法裡面應用最廣泛的是梯度提升樹(Gradient Boosting Tree)。AdaBoost和提升樹演算法的原理在後面的文章中會專門來講。
1.5 bagging(並行生成)
Bagging演算法工作機制:
- 對原始訓練集是通過隨機取樣得到取樣集1。
- 重複T次隨機取樣,我們就可以得到T個取樣集
- 對於這T個取樣集訓練出T個弱學習器
- T個弱學習器通過集合策略來得到最終的強學習器。
這裡的隨機取樣有必要做進一步的介紹,這裡一般採用的是自助取樣法(Bootstrap sampling),即有放回取樣。
隨機森林是bagging的一個特化進階版
隨機:隨機取樣訓練集+隨機選擇特徵
森林:許多決策樹
1.6 結合策略
1.6.1 平均法(常用於迴歸)
- 簡單平均
對於若干個弱學習器的輸出進行平均得到最終的預測輸出。 - 加權平均
如果每個個體學習器有一個權重w,則對輸出賦予權重,再取平均。
1.6.2 投票法(常用於分類)
- 相對多數投票
少數服從多數,如果不止一個類別獲得最高票,則隨機選擇一個做最終類別 - 絕對多數投票法
不光要求獲得最高票,還要求票過半數。否則會拒絕預測。 - 加權投票
每個弱學習器的分類票數要乘以一個權重,最終將各個類別的加權票數求和,最大的值對應的類別為最終類別。
1.6.3 學習法(stacking)
2. 隨機森林
2.1 隨機森林原理
隨機森林(RF)是Bagging演算法的進化版,其思想仍然是bagging,但是進行了獨特的改進。
RF使用的是CART決策樹作為弱學習器
在使用決策樹的基礎上,RF對決策樹的建立做了改進
普通的CART決策樹:在節點上所有的n個樣本特徵中選擇一個最優的特徵來做決策樹的左右子樹劃分
RF的CART決策樹:隨機選擇節點上的一部分樣本特徵,這個數字小於
,假設為
,然後在這些隨機選擇的
個樣本特徵中,選擇一個最優的特徵來做決策樹的左右子樹劃分。這樣進一步增強了模型的泛化能力。
如果
,則此時RF的CART決策樹和普通的CART決策樹沒有區別。
越小,則模型約健壯,當然此時對於訓練集的擬合程度會變差。也就是說
越小,模型的方差會減小,但是偏倚會增大。在實際案例中,一般會通過交叉驗證調參獲取一個合適的
的值。
2.2 隨機森林的推廣
2.2.1 extra trees
- extra trees一般不採用隨機取樣,即每個決策樹採用原始訓練集。
- extra trees比較的激進,他會隨機的選擇一個特徵值來劃分決策樹。
由於隨機選擇了特徵值的劃分點位,而不是最優點位,這樣會導致生成的決策樹的規模一般會大於RF所生成的決策樹。也就是說,模型的方差相對於RF進一步減少,但是偏倚相對於RF進一步增大。在某些時候,extra trees的泛化能力比RF更好。
2.2.2 Totally Random Trees Embedding
Totally Random Trees Embedding(以下簡稱 TRTE)是一種非監督學習的資料轉化方法
- 低維的資料集對映到高維,從而讓對映到高維的資料更好的運用於分類迴歸模型(類比支援向量機中的核方法)
舉個栗子
比如我們有3顆決策樹,每個決策樹有5個葉子節點,某個資料特徵x劃分到第一個決策樹的第2個葉子節點,第二個決策樹的第3個葉子節點,第三個決策樹的第5個葉子節點。則x對映後的特徵編碼為(0,1,0,0,0, 0,0,1,0,0, 0,0,0,0,1), 有15維的高維特徵。這裡特徵維度之間加上空格是為了強調三顆決策樹各自的子編碼。
2.2.3 Isolation Forest
Isolation Forest(以下簡稱IForest)是一種異常點檢測的方法。它也使用了類似於RF的方法來檢測異常點。
- 取樣個數要遠遠小於訓練集個數,我們的目的是異常點檢測,只需要部分的樣本我們一般就可以將異常點區別出來了
- 隨機選擇一個劃分特徵,對劃分特徵隨機選擇一個劃分閾值。
- IForest一般會選擇一個比較小的最大決策樹深度max_depth,原因同樣本採集,用少量的異常點檢測一般不需要這麼大規模的決策樹
異常點的判斷:
將測試樣本點x擬合到T顆決策樹。計算在每顆決策樹上該樣本的葉子節點的深度ht(x)。,從而可以計算出平均高度h(x)。此時我們用下面的公式計算樣本點x的異常概率:
2.3 隨機森林優缺點
RF的主要優點有:
- 訓練可以高度並行化,對於大資料時代的大樣本訓練速度有優勢。個人覺得這是的最主要的優點。
- 由於可以隨機選擇決策樹節點劃分特徵,這樣在樣本特徵維度很高的時候,仍然能高效的訓練模型。
- 在訓練後,可以給出各個特徵對於輸出的重要性
- 由於採用了隨機取樣,訓練出的模型的方差小,泛化能力強。
- 相對於Boosting系列的Adaboost和GBDT, RF實現比較簡單。
- 對部分特徵缺失不敏感。
RF的主要缺點有:
- 在某些噪音比較大的樣本集上,RF模型容易陷入過擬合。
- 取值劃分比較多的特徵容易對RF的決策產生更大的影響,從而影響擬合的模型的效果。
2.4 Sklearn 引數
RF的Sklearn引數分為RF的Bagging框架的引數和RF的決策樹引數
2.5 RF的Bagging框架的引數
引數 | 解釋 | 預設值 |
---|---|---|
n_estimators | 也就是弱學習器的最大迭代次數,或者說最大的弱學習器的個數。一般來說n_estimators太小,容易欠擬合,n_estimators太大,計算量會太大,並且n_estimators到一定的數量後,再增大n_estimators獲得的模型提升會很小,所以一般選擇一個適中的數值 | 100 |
oob_score | 是否採用袋外樣本來評估模型的好壞,袋外分數反應了一個模型擬合後的泛化能力。 | False |
criterion | CART樹做劃分時對特徵的評價標準。分類模型和迴歸模型的損失函式是不一樣的。分類RF對應的CART分類樹預設是基尼係數gini,另一個可選擇的標準是資訊增益。迴歸RF對應的CART迴歸樹預設是均方差mse,另一個可以選擇的標準是絕對值差mae。一般來說選擇預設的標準就已經很好的。 |
2.6 RF的決策樹引數
引數 | 解釋 | 預設值 |
---|---|---|
max_features | RF劃分時考慮的最大特徵數, 可以使用很多種型別的值,預設是"auto",意味著劃分時最多考慮N−−√個特徵;如果是"log2"意味著劃分時最多考慮log2N個特徵;如果是"sqrt"或者"auto"意味著劃分時最多考慮N−−√個特徵。如果是整數,代表考慮的特徵絕對數。如果是浮點數,代表考慮特徵百分比,即考慮(百分比xN)取整後的特徵數。其中N為樣本總特徵數。一般我們用預設的"auto"就可以了,如果特徵數非常多,我們可以靈活使用剛才描述的其他取值來控制劃分時考慮的最大特徵數,以控制決策樹的生成時間。 | “auto” |
max_depth | 決策樹最大深度,預設可以不輸入,如果不輸入的話,決策樹在建立子樹的時候不會限制子樹的深度。一般來說,資料少或者特徵少的時候可以不管這個值。如果模型樣本量多,特徵也多的情況下,推薦限制這個最大深度,具體的取值取決於資料的分佈。常用的可以取值10-100之間。 | None |
min_samples_split | 內部節點再劃分所需最小樣本數, 這個值限制了子樹繼續劃分的條件,如果某節點的樣本數少於min_samples_split,則不會繼續再嘗試選擇最優特徵來進行劃分。 預設是2.如果樣本量不大,不需要管這個值。如果樣本量數量級非常大,則推薦增大這個值。 | 2 |
min_samples_leaf | 葉子節點最少樣本數 這個值限制了葉子節點最少的樣本數,如果某葉子節點數目小於樣本數,則會和兄弟節點一起被剪枝。 預設是1,可以輸入最少的樣本數的整數,或者最少樣本數佔樣本總數的百分比。如果樣本量不大,不需要管這個值。如果樣本量數量級非常大,則推薦增大這個值 | 1 |
min_weight_fraction_leaf | 葉子節點最小的樣本權重這個值限制了葉子節點所有樣本權重和的最小值,如果小於這個值,則會和兄弟節點一起被剪枝。 預設是0,就是不考慮權重問題。一般來說,如果我們有較多樣本有缺失值,或者分類樹樣本的分佈類別偏差很大,就會引入樣本權重,這時我們就要注意這個值了。 | 0 |
max_leaf_nodes | 最大葉子節點數 通過限制最大葉子節點數,可以防止過擬合,預設是"None”,即不限制最大的葉子節點數。如果加了限制,演算法會建立在最大葉子節點數內最優的決策樹。如果特徵不多,可以不考慮這個值,但是如果特徵分成多的話,可以加以限制,具體的值可以通過交叉驗證得到。 | None |
min_impurity_split | 節點劃分最小不純度這個值限制了決策樹的增長,如果某節點的不純度(基於基尼係數,均方差)小於這個閾值,則該節點不再生成子節點。即為葉子節點 。一般不推薦改動預設值1e-7。 | 1e-7 |