機器學習利器——決策樹和隨機森林
更多深度文章,請關注:https://yq.aliyun.com/cloud
決策樹(Decision Tree)是在已知各種情況發生概率的基礎上,通過構成決策樹來求取淨現值的期望值大於等於零的概率,評價項目風險,判斷其可行性的決策分析方法,是直觀運用概率分析的一種圖解法。由於這種決策分支畫成圖形很像一棵樹的枝幹,故稱決策樹。決策樹是一種基本的分類和回歸方法,學習通常包含三個步驟:特征選擇、決策樹的生成和決策樹的剪枝。在機器學習中,決策樹是一個預測模型,他代表的是對象屬性與對象值之間的一種映射關係。分類樹(決策樹)是一種十分常用的分類方法。數據挖掘中決策樹是一種經常要用到的技術,可以用於分析數據,同樣也可以用來做預測。
一個簡單的決策樹分類模型:紅色框出的是特征。
在機器學習中,隨機森林是一個包含多個決策樹的分類器,並且其輸出的類別是由個別樹輸出的類別的眾數而定。Leo Breiman和Adele Cutler發展出推論出隨機森林的算法。隨機森林在過去幾年一直是新興的機器學習技術。它是基於非線性的決策樹模型,通常能夠提供準確的結果。然而,隨機森林大多是黑盒子,經常難以解讀和充分理解。在這篇博客中,我們將深入介紹隨機森林的基本原理,以更好地了解它們。我們首先看看決策樹和隨機森林的構建塊。這項工作是由Ando Saabas(https://github.com/andosa/treeinterpreter)完成。可以在我的GitHub上找到在這個博客中所需的代碼。
決策樹如何工作?
決策樹以迭代地方式將數據分解成不同的子集來工作:對於回歸樹,選擇它們來最小化所有子集中的MSE(均方誤差)或MAE(平均絕對誤差)是個不錯的選擇;對於分類樹,選擇分解數據以便最小化所得到的子集中的熵或基尼雜質。所得到的分類器將特征空間分成不同的子集。根據觀察到的子集進行觀察的預測:
圖為:決策樹的迭代
決策樹的貢獻值
以鮑魚數據集為例。我們將嚐試基於貝殼重量,長度,直徑等變量來預測其頭數。為了說明的目的,我們擬合一個淺層決策樹。我們通過將樹的最大深度限製為3級來實現。
圖為:用於預測環數的決策樹路徑
為了預測鮑魚的頭數,決策樹將沿著樹向下移動,直到達到葉。每個步驟將當前子集分成兩部分。對於特定的分割,確定分割的變量的貢獻值(contributions)被定義為平均數量的變化。
例如,如果我們拿一個貝殼重量為0.02和長度為0.220的鮑魚,它將落在最左邊的葉子中,預計的頭數為4.4731。
殼重的貢獻值(contributions)結果是:
(7.587 - 9.958) + (5.701 - 7.587) = -4.257
長度的貢獻值(contributions)結果:
(4.473 - 5.701) = -1.228
這些貢獻值(contributions)結果意味著特定的殼體重量和長度值可以預測其鮑魚的頭數。
我們可以通過運行以下代碼獲得這些貢獻值(contributions)結果。
from treeinterpreter import treeinterpreter as ti
dt_reg_pred, dt_reg_bias, dt_reg_contrib = ti.predict(dt_reg, X_test)
該變量dt_reg是sklearn分類器對象,X_test是一個Pandas DataFrame或numpy數組,其中包含我們希望得出預測和貢獻值的特征。dt_reg_contrib是具有(n_obs,n_features)的2d numpy數組,其中n_obs是觀察n_features次數。
我們可以為給定的鮑魚繪製這些影響元素,以查看哪些特征最能影響其預測頭數。從下圖可以看出,這個特定的貝殼的體重和長度值對預測的頭數有很大的影響。
圖為:例子的貢獻值圖(決策樹)
我們可以通過使用小提琴圖比較特征對鮑魚頭數預測的影響。這將內核密度估計覆蓋到圖上。在下圖中,我們看到鮑魚的體重對其頭數的影響最大。實際上,殼重量值給它帶來了更大的影響。
圖為:小提琴貢獻值圖(決策樹)
上述情節雖然有洞察力,但仍不能充分了解具體變量如何影響鮑魚的頭數。相反,我們可以繪製給定特征對其值的影響程度。如果我們繪製殼重量與其影響程度的關係,我們可以獲得增加殼重量會增加影響程度的見解。
我們可以看到,減輕殼重量與影響程度具有非線性,非單調關係。
擴展到隨機森林
確定特征貢獻的過程當然可以通過對森林中所有樹木的變量進行平均貢獻來擴展到隨機森林。
圖為:小提琴貢獻值圖(隨機森林)
因為隨機森林本身是隨機的,所以在給定的殼體重量上有貢獻的變化。然而,平滑的黑色趨勢線顯示出增長趨勢。與決策樹一樣,我們看到增加的殼體重量對應於更高的貢獻值。
圖為:貢獻值與殼重的關係(隨機森林)
再次,我們可能會看到複雜的,非單調的趨勢。直徑似乎在約0.45的貢獻下降,在0.3和0.6附近的貢獻峰值。除此之外,直徑和環數之間似乎有越來越大的關係。
圖為:貢獻值與直徑的關係(隨機森林)
分類
我們已經表明,回歸樹的特征貢獻值來源於它在連續分裂中的變化。我們可以將其擴展到二項式和多項式中分類,而不是看每個子集中某個類的觀察的百分比。特征的貢獻值是觀察從該特征引起的百分比的總體變化。
這個例子更容易解釋。假設我們試圖預測性別,即鮑魚是公還是母,嬰幼兒還是成年?
圖為:多項式分類的決策樹路徑
每個節點具有3個值,子集中的雌雄,雄和嬰幼兒的百分比。內髒重量為0.1和殼重量為0.1的鮑魚最終落在最左側的葉中(概率為0.082,0.171和0.747)。
內髒重量對嬰兒鮑魚的貢獻值是:
(0.59 - 0.315) = 0.275
殼重量的貢獻值是:
(0.747 - 0.59) = 0.157
我們可以為每個貢獻值類繪製一個貢獻圖。以下是我們為嬰兒類分析的結果。
圖為:觀察的嬰兒小提琴的貢獻值圖(多類決策樹)
和以前一樣,我們還可以繪製每個特征類的貢獻。隨著殼重量的增加,鮑魚是母的幾率就增加,而作為嬰兒的幾率則下降。對於公的,當殼重超過0.5時,幾率最初增加,然後減小。
圖為:每個特征類的貢獻值與殼體重量(隨機森林)
總結:
我們可以在這篇博客中看到,通過查看路徑,我們可以更深入地了解決策樹和隨機森林。這是特別有用的,因為隨機森林是一個非常難理解的結構,通常是高性能的機器學習模型。為了滿足業務需求,我們不僅需要提供高預測性的模型,而且也是一個可以解釋的模型。也就是說,我們不想提供一個黑盒子。這個要求其實很重要,因為我們的模型可以合規性的傳遞下去,讓更多的人使用。
本文由北郵@愛可可-愛生活老師推薦,@阿裏雲雲棲社區組織翻譯。
文章原標題《interpreting-decision-trees-and-random-forests》
作者:Greg Tam Pivotal工程師 博客地址: https://engineering.pivotal.io/authors/gtam/
譯者:袁虎 審閱:
文章為簡譯,更為詳細的內容,請查看原文
最後更新:2017-09-22 09:33:17