如何解讀決策樹和隨機(jī)森林的內(nèi)部工作機(jī)制?
隨機(jī)森林在過去幾年里得到了蓬勃的發(fā)展。它是一種非線性的基于樹的模型,往往可以得到準(zhǔn)確的結(jié)果。但是,隨機(jī)森林的工作過程大都處于黑箱狀態(tài),往往難以解讀和完全理解。近日,Pivotal Engineering Journal 網(wǎng)站發(fā)表了一篇文章,對隨機(jī)森林的基礎(chǔ)進(jìn)行了深度解讀。該文從隨機(jī)森林的構(gòu)造模塊決策樹談起,通過生動的圖表對隨機(jī)森林的工作過程進(jìn)行了介紹,能夠幫助讀者對隨機(jī)森林的工作方式有更加透徹的認(rèn)識。本文內(nèi)容基于 Ando Saabas 的一個 GitHub 項(xiàng)目。另外,你也能在 GitHub 上找到用于創(chuàng)建本文中各種圖表的代碼。
- Ando Saabas 的項(xiàng)目:https://github.com/andosa/treeinterpreter
- 創(chuàng)建圖表的代碼:https://github.com/gregtam/interpreting-decision-trees-and-random-forests
決策樹的工作方式
決策樹可以看成為一個 if-then 規(guī)則的集合,即由決策樹的根節(jié)點(diǎn)到葉節(jié)點(diǎn)的每一條路徑構(gòu)建一條規(guī)則,路徑上內(nèi)部節(jié)點(diǎn)的特征對應(yīng)著規(guī)則的條件,而葉節(jié)點(diǎn)的類對應(yīng)于規(guī)則的結(jié)論。因此決策樹就可以看作由條件 if(內(nèi)部節(jié)點(diǎn))和滿足條件下對應(yīng)的規(guī)則 then(邊)組成。
決策樹的工作方式是以一種貪婪(greedy)的方式迭代式地將數(shù)據(jù)分成不同的子集。其中回歸樹(regression tree)的目的是最小化所有子集中的 MSE(均方誤差)或 MAE(平均絕對誤差);而分類樹(classification tree)則是對數(shù)據(jù)進(jìn)行分割,以使得所得到的子集的熵或基尼不純度(Gini impurity)最小。
結(jié)果得到的分類器可以將特征空間分成不同的子集。對某個觀察的預(yù)測將取決于該觀察所屬的子集。
圖 1:一個決策樹的迭代過程
決策樹的貢獻(xiàn)
以鮑魚數(shù)據(jù)集(https://archive.ics.uci.edu/ml/datasets/abalone)為例。我們將根據(jù)殼的重量、長度、直徑等變量來預(yù)測鮑魚殼上環(huán)的數(shù)量。為了演示,我們構(gòu)建了一個很淺的決策樹。我們可以通過將樹的***層數(shù)限制為 3 而得到這個樹。
圖 2:預(yù)測不同環(huán)數(shù)的決策樹路徑
要預(yù)測鮑魚的環(huán)的數(shù)量,決策樹將沿著樹向下移動直到到達(dá)一個葉節(jié)點(diǎn)。每一步都會將當(dāng)前的子集分成兩個。對于一次特定的分割,我們根據(jù)平均環(huán)數(shù)的改變來定義對該分割做出了貢獻(xiàn)的變量。
比如說,如果我們拿到一個殼重 0.02、長度為 0.220 的鮑魚,那么它就將落在最左邊的葉節(jié)點(diǎn)上,預(yù)測的環(huán)數(shù)是 4.4731。殼重對預(yù)測環(huán)數(shù)的貢獻(xiàn)為:
- (7.587 - 9.958) + (5.701 - 7.587) = -4.257
長度的貢獻(xiàn)為:
- (4.473 - 5.701) = -1.228
這些貢獻(xiàn)都是負(fù)數(shù),說明對于這個特定的鮑魚,殼重和長度值會使預(yù)測的環(huán)數(shù)下降。
我們可以通過運(yùn)行以下代碼得到這些貢獻(xiàn)。
- from treeinterpreter import treeinterpreter as ti dt_reg_pred, dt_reg_bias, dt_reg_contrib = ti.predict(dt_reg, X_test)
其中變量 dt_reg 是 sklearn 分類器目標(biāo),X_test 是一個 Pandas DataFrame 或 numpy 數(shù)組,包含了我們希望從中得到預(yù)測和貢獻(xiàn)的特征。其貢獻(xiàn)變量 dt_reg_contrib 是一個二維 numpy 數(shù)組 (n_obs, n_features),其中 n_obs 是觀察的數(shù)量,n_features 是特征的數(shù)量。
我們可以繪制一個給定鮑魚的這些貢獻(xiàn)的圖表,看看哪些特征對預(yù)測得到的值的影響***。我們可以從下面這幅圖表看到這個特定的鮑魚的重量和長度值對預(yù)測得到的環(huán)數(shù)所產(chǎn)生的負(fù)影響。
圖 3:一個貢獻(xiàn)圖表示例(決策樹)
我們可以使用小提琴圖表(Violin plot)將這個特定鮑魚的貢獻(xiàn)與所有鮑魚的情況進(jìn)行比較。這樣可以在這張圖表上疊加一個核密度估計(jì)。在下圖中,我們可以看到,與其它鮑魚相比,這個特定鮑魚的殼重異乎尋常地低。實(shí)際上,很多鮑魚的殼重值的貢獻(xiàn)都是正數(shù)。
圖 4:使用 violin 圖對一個觀察樣本繪制的貢獻(xiàn)圖(決策樹),文末將附上 violin 圖的基本概念與用法。
上面的圖雖然有些信息,但仍然無法讓我們完全理解一個特定變量對鮑魚所擁有的環(huán)數(shù)的影響。于是,我們可以根據(jù)一個給定特征的值繪制其貢獻(xiàn)。如果我們繪制殼重的值與其貢獻(xiàn)的比較,我們可以知道殼重的增長會導(dǎo)致貢獻(xiàn)的增長。
圖 5:貢獻(xiàn)與殼重(決策樹)
另一方面,去殼后的重量與貢獻(xiàn)的關(guān)系是非線性非單調(diào)的。更低的去殼后的重量沒有任何貢獻(xiàn),更高的去殼后的重量有負(fù)貢獻(xiàn),而在兩者之間,貢獻(xiàn)是正的。
圖 6:貢獻(xiàn)與去殼后的重量(決策樹)
擴(kuò)展成隨機(jī)森林
通過將許多決策樹組成森林并為一個變量取所有樹的平均貢獻(xiàn),這個確定特征的貢獻(xiàn)的過程可以自然地?cái)U(kuò)展成隨機(jī)森林。
圖 7:使用 violin 圖對一個觀察繪制的貢獻(xiàn)圖(隨機(jī)森林)
因?yàn)殡S機(jī)森林固有的隨機(jī)性,一個給定殼重值的貢獻(xiàn)會有所不同。但是如下圖平滑的黑色趨勢線所示,這種增長的趨勢仍然存在。就像在決策樹上一樣,我們可以看到殼重增大時,貢獻(xiàn)會更高。
圖 8:貢獻(xiàn)與殼重(隨機(jī)森林)
同樣,我們也可能會看到復(fù)雜的不單調(diào)的趨勢。直徑的貢獻(xiàn)似乎在大約 0.45 處有一處下降,而在大約 0.3 和 0.6 處各有一處峰值。除此之外,直徑和環(huán)數(shù)之間的關(guān)系基本上是增長的。
圖 9:貢獻(xiàn)與直徑(隨機(jī)森林)
分類
我們已經(jīng)看到回歸樹的特征分布源自環(huán)的平均值以及其在后續(xù)分割中的變化方式。我們可以通過檢查每個子集中某個特定類別的觀察的比例,從而將其擴(kuò)展成二項(xiàng)分類或多項(xiàng)分類。一個特征的貢獻(xiàn)就是該特征所導(dǎo)致的總的比例變化。
通過案例解釋更容易理解。假設(shè)現(xiàn)在我們的目標(biāo)是預(yù)測性別,即鮑魚是雌性、雄性還是幼體。
圖 10:多項(xiàng)分類的決策樹路徑
每個節(jié)點(diǎn)都有 3 個值——該子集中雌性、雄性和幼體各自的比例。一個臟器重量為 0.1 且殼重 0.1 的鮑魚屬于最左邊的葉節(jié)點(diǎn)(概率為 0.082、0.171 和 0.747)。適用于回歸樹的貢獻(xiàn)邏輯在這里也同樣適用。
如果這個特定鮑魚是幼體,那么臟器重量的貢獻(xiàn)為:
- (0.59 - 0.315) = 0.275
殼重的貢獻(xiàn)為:
- (0.747 - 0.59) = 0.157
我們可以為每個類別繪制一張貢獻(xiàn)圖。下面我們給出了針對幼體類別的貢獻(xiàn)圖。
圖 11:使用 violin 圖對一個幼體觀察繪制的貢獻(xiàn)圖(多類決策樹)
和之前一樣,我們也可以為每一類繪制貢獻(xiàn)與特征的圖表。殼重對鮑魚是雌性的貢獻(xiàn)會隨殼重的增長而增長,而對鮑魚是幼體的貢獻(xiàn)則會隨殼重的增長而降低。對于雄性來說,殼重的貢獻(xiàn)首先會增長,在殼重超過了 0.5 之后貢獻(xiàn)又會下降。
圖 12:每個類別的貢獻(xiàn)與殼重(隨機(jī)森林)
結(jié)語
在這篇文章中,我們表明可以通過查看路徑來獲得對決策樹和隨機(jī)森林的更加深入的理解。這對隨機(jī)森林尤其有用,因?yàn)殡S機(jī)森林是一種非常并行的而且通常性能很高的機(jī)器學(xué)習(xí)模型。為了滿足 Pivotal 客戶的業(yè)務(wù)需求,我們不僅需要提供有很高預(yù)測能力的模型,也要提供可解釋的模型。也就是說,不管效果如何,我們都不想給他們一個黑箱。當(dāng)與政府和金融領(lǐng)域的客戶做生意時,這就是一個很重要的要求,因?yàn)槲覀兊哪P托枰ㄟ^合規(guī)性檢查。
附 violin 圖基礎(chǔ)
violin 圖是繪制數(shù)字?jǐn)?shù)據(jù)的方法,它和箱線圖十分相似,但其另外展示了分布的概率密度。下面我們先了解箱線圖:
上圖這一組數(shù)據(jù)表明:
- 最小值等于 5
- ***值等于 10
- 平均值為 8
- 下四分位數(shù)為 7,即***四分位數(shù)(Q1),等于該樣本中所有數(shù)值由小到大排列后第 25% 的值。
- 中位數(shù)為 8.5,即第二四分位數(shù)(Q2),等于該樣本中所有數(shù)值由小到大排列后第 50% 的值。
- 上四分位數(shù)為 9,即第三四分位數(shù)(Q3),等于該樣本中所有數(shù)值由小到大排列后第 75% 的值。
- 四分位距為 2(即ΔQ=Q3-Q1)。
上述是箱線圖的基本參數(shù),箱線圖只顯示諸如平均值/中值和四分位數(shù)范圍的匯總統(tǒng)計(jì)數(shù)據(jù),violin 圖顯示了數(shù)據(jù)的完整分布。
violin 圖概括了箱線圖所表達(dá)的統(tǒng)計(jì)量:
- 上圖白點(diǎn)代表中位數(shù)
- 灰色的矩形代表 Q3 和 Q1 之間的四分位距
- 灰線代表 95% 的置信區(qū)間
兩邊的灰色曲線代表核密度估計(jì),其展示了數(shù)據(jù)的分布形狀。其中兩邊間距較寬的曲線段代表樣本總體取給定值有較高的概率,較窄的曲線段表明取給定值有較小的概率。
原文:http://engineering.pivotal.io/post/interpreting-decision-trees-and-random-forests/
【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號“機(jī)器之心( id: almosthuman2014)”】