大話機器學習之隨機森林
我們順著前一篇決策樹的文章,接著往下面講。
通過對決策樹的了解,我們發現了決策樹存在一個蠻嚴重的問題,就是它的高方差。我們回憶下決策樹是如何建立的,它遍歷訓練數據的特徵,根據信息增益等類似辦法來進行樹節點的確立。如果你拿到一份數據,隨機分成2份分別做決策樹的話,大概率得到的結果是不一樣的。為解決這個問題,bagging方法閃亮登場。
在這我先介紹下什麼是bagging,我覺得抓住以下2點基本就能理解了。
1、隨機採樣放回,每輪隨機的從M個樣本里取出N(一般N=M)個訓練樣本用於訓練,抽取後需要把這部分數據重新放回總樣本進行再次抽取。這個動作需要進行K次,從而建立了K顆獨立的決策樹。這個過程中會導致部分數據會重複的放入多顆決策樹中用於訓練,也有部分數據壓根就沒有用於訓練,這部分數據約為36.8%,我們常常稱之為袋外數據(Out Of Bag, 簡稱OOB)。這些數據沒有參與訓練集模型的擬合,因此可以用來檢測模型的泛化能力。
2、結果融合,K顆樹獲得的結果進行融合,這個過程相對簡單,分類模型用簡單投票,回歸問題求均值。
在這,我畫個圖,方便大家理解下。(我是靈魂畫師,大家將就著看)
以上部分,就是bagging的基本介紹,接下來我們來說說隨機森林模型吧。
只要能理解這個Bagging,就基本能理解隨機森林模型了,隨機森林在這個bagging的基礎上,做了一些改進,進一步提升了分類器的威力。
首先,隨機森林採樣了CART樹,而不是普通的決策樹,CART樹和我們之前提到的決策樹特性差不多,不同的地方在於CART樹是二叉樹,因此1個屬性含有多個特徵值的時候,需要計算最優的2分結果,之前提到的ID3演算法則會直接多分。其次,CART可以指定樹的深度,而使之成為比較弱的分類器。
其次,RF演算法在決策樹的子樹劃分的時候,不會拿全部的特徵(n)來計算最優的樹節點,而是隨機採用部分特徵(n_sub)來進行子樹節點的劃分。
隨機森林算是基本介紹完了,接下來我們看看隨機森林中的幾個重要參數,看看這些參數分別作用在哪些地方吧。
為了方便說明,靈魂畫師只能再出手了。
n_estimators:在利用最大投票數或平均值來預測之前,你想要建立子樹的數量。
這個參數決定模型將要建立多少顆決策樹,對應上文 建立了K顆獨立的決策樹。較多的子樹可以讓模型有更好的性能,但同時讓你的代碼變慢。你應該選擇儘可能高的值,只要你的處理器能夠承受的住,因為這使你的預測更好更穩定。
這個參數應該是用於bagging這個過程中的,因此這個值不能太小,但是太大似乎不會有太大的問題。
其餘的參數,應該是作用於CART樹上的。
max_features:隨機森林允許單個決策樹使用特徵的最大數量。
隨機森林隨機採用部分特徵(n_sub)用於決策樹訓練,這個參數決定了(n_sub)的最大值。nsub越小,則模型越健壯,當然此時對於訓練集的擬合程度會變差。也就是說nsub越小,模型的方差會減小,但是偏倚會增大。在實際案例中,一般會通過交叉驗證調參獲取一個合適的nsub的值。
min_sample_leaf:這個值限制了葉子節點最少的樣本數,如果某葉子節點數目小於樣本數,則會和兄弟節點一起被剪枝。
max_depth:樹的最大深度。
min_samples_split:這個值限制了子樹繼續劃分的條件,如果某節點的樣本數少於min_samples_split,則不會繼續再嘗試選擇最優特徵來進行劃分。
這些參數應用於控制CART樹的複雜度,其中max_depth可以控制CART樹的深度,如果不做控制,隨機森林將不會限制子樹的深度;
min_samples_split決定一個節點是否進行進一步劃分;min_samples_leaf用於控制葉子節點最少的樣本數量,葉子是一顆決策樹的最末端,這幾個參數控制了CART樹的複雜程度。正如開頭所言,隨機森林解決的是決策樹高方差的問題,CART樹複雜度的高低,影響這模型方差和偏差的大小。因此需要綜合考慮這些參數的設置。
最後總結下隨機森林的優點:
1、隨機抽樣放回,並建立獨立的決策樹,這樣的機制使得隨機森林可以並行處理,使它具備了速度優勢。
2、特徵的隨機抽取,使得隨機森林在處理高緯數據的時候,仍然具備不錯的效率。
3、bagging的特性使得模型的方差變小,從而獲得較為不錯的泛化能力。
4、可以直接輸出特徵的重要性。
5、相對演算法比較簡單吧,畢竟我這樣的半桶水也能勉強看懂。
希望大家斧正!
推薦閱讀:
※深度學習環境搭建:Ubuntu16.04+npython3.5+cuda8.0+Tensorflow1.4
※人工智慧是不是只是一場鬧劇?
※CS 294: Deep Reinforcement Learning(9)
※【七夕特輯のML初體驗】Passive Aggressive,探索因子模型的新姿勢
※機器學習實戰 | 數據探索(變數變換、生成)
TAG:机器学习 |