【5】集成學習之隨機森林

1.前言

本文參考視頻:https://www.youtube.com/watch?v=J4Wdy0Wc_xQ
視頻很好,這一個還有中文翻譯。該系列其他視頻都沒有,強烈推薦大家去看一看。不過缺點是沒有數學支撐。但是通俗易懂啊。
同時,本文還參考了周志華的《機器學習》

有時候單一的模型可能效果不夠好,或者我們想把多個效果還不錯的模型結合起來,看看能不能獲得更好的效果,於是,就誕生了集成學習。集成學習就是基於多個模型來提高整體的效果,具體根據集成的方法不同大致分爲三類:

  • boost
  • bagging
  • 隨機森林(但是隨機森林只是bagging的一個擴展變體,本質上還是bagging)

其中,bagging和隨機森林屬於一個大類:子模型之間不存在強關聯性,可同時生成的並行化方法。而boost屬於子模型之間存在強依賴關係,必須串行生成的序列化方法。

不論是上面的哪幾個大類或者小類,他們的子模型(或者說個體學習器)都是基於決策樹的。原因:

實驗證明,決策樹模型在集成之後效果最好,其他的模型也可以集成,但是效果並沒有決策樹的好

所以,你需要先了解決策樹算法。

集成學習是非常強大的,各種機器學習比賽基本上都會有很多人使用它,尤其是其中的boost,各種boost:xgboost,catboost,lgbm。但是這些乍一看可能比較難看懂,所以還是先建議學習決策樹,隨機森林,然後去學習bagging和boost的基本原理。之後學習各種boost。當然,如果只是要用的話,還是比較簡單的,幾行代碼就可以使用了。

2.隨機森林

2.1 爲什麼會有隨機森林

決策樹很容易建立,容易使用,容易解釋,但是在實際中效果可能並不好。

在這裏插入圖片描述樹的不確定性讓他們無法成爲理想的預測工具,換句話說,他們可以很好的對訓練數據進行分類,但是,到了新的數據時,效果就很一般。一部分原因是決策樹不夠靈活。而隨機森林把決策樹的簡潔性和森林的靈活性結合起來,得到了很好的提升。(暫時這樣理解吧)

2.2 建立一個隨機森林

step1:創建一個引導(bootstrapped)數據集

在這裏插入圖片描述
這是我們要使用的數據集。
爲了建立引導數據集,我們對原始數據集進行有放回的取樣,直到引導數據集樣本數和原始數據集一樣,之裏面必然會有重複的樣本。
下面是我們取樣後的引導數據集:
在這裏插入圖片描述

step2:使用引導數據集建立決策樹

傳統的決策樹會在這個數據集上進行各種增益或者基尼指數的計算,來計算處以哪一個屬性作爲根節點的劃分屬性最好。但是,隨機森林裏的決策樹不是這樣,而是隨機選取若干個(具體選幾個最好後面再說)屬性,在這裏面選出最好的作爲最優化分屬性。

比如,我們在上面的引導數據集裏選擇這兩個屬性:
在這裏插入圖片描述
並且,我們假設其中的Good Blood Circ是最優的劃分屬性,之後,在下面的結點上,再從剩下的三個屬性中隨機選擇若干個(此處還是2個)作爲待選屬性:
在這裏插入圖片描述
之後,不斷重複,每次都是隻選擇若干個(此處一直是2個)屬性,從中選擇最優的。
最後,我們就建立了一棵樹:
在這裏插入圖片描述
這棵樹的建立是我們基於:

  • 隨機選擇的引導數據集
  • 每次隨機選擇的若干個屬性,並從中選擇最優的作爲劃分屬性

這兩個準則建立起來的。

step3:重複

然後,我們不斷重複整個過程,建立引導數據集,建立樹,最後會得到很多樹:
在這裏插入圖片描述
你可以重複上百次,最後建立起來的樹都不相同(當然,你要真在上面這個這麼小的數據集上做上百次,也是有可能出現重複的)。這種多樣性使得隨機森林比單獨一顆決策樹更加有效。

2.3 怎麼使用一個隨機森林

我們在上面已經建立好了隨機森林,但是,要怎麼使用它呢?
假設我們來了一個新病人,其中屬性我們都知道了,該怎麼預測他有沒有心臟病呢:
在這裏插入圖片描述
我們把數據放到第一棵樹來跑:
在這裏插入圖片描述
然後,第一棵樹會告訴我們一個結果。現在,他告訴我們的是Yes:
在這裏插入圖片描述
之後,我們不斷重複在剩下的樹裏進行測試,並且統計yes和no的數目,結果如下:
在這裏插入圖片描述
這樣,我們就可以認爲該病人有心臟病了。

這就是很簡單的投票表決。

上面的這種建立引導數據集的做法也叫做bagging。(隨機森林本身就是bagging的一個擴展變體)隨機森林比bagging多個一個隨機選擇屬性。

3.評估隨機森林

我們建立完,也知道如何測試了。那麼,怎麼直到一個隨機森林的性能呢。

首先,從建立先導數據集開始,一般而言,原始數據集中的1/3不會出現在任何引導數據集中。這是一個簡單的求極限的問題。那些不在引導數據集中的數據成爲袋外數據(out-of-bag dataset)

我們把袋外數據在每一刻決策樹上跑一遍,然後,進行投票決策。沒有被正確分類的袋外數據所佔的比例就是袋外錯誤

4.怎麼確定選擇屬性的個數

之前,我們在引導數據集上建立決策樹的時候,每次劃分節點時隨機選取若干個屬性,從中選擇最優的。但是,這個若干到底是幾才最好呢。
之前我們選擇兩個屬性每次,然後我們知道了選擇兩個時的錯誤率。然後,我們改變選擇個數,計算一下錯誤率。多次重複,選擇錯誤率最低的一個就行了
在這裏插入圖片描述
通常,我們會第一次使用變量個數的平方根,之後嘗試這個數的上下一定範圍的數。這樣,就結束了。

5.Warning of Math

由於時間原因,先不寫了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章