選單

隨機森林中的特徵重要性計算

由於公眾號改版不再按照作者的釋出時間進行推送,為防止各位朋友錯過月來客棧推送的最新文章,大家可以手動將公眾號設定為“

星標

⭐”以第一時間獲得推送內容,感謝各位~

1 引言

各位朋友大家好,歡迎來到月來客棧。在前面的多篇文章中筆者分別介紹了多種不同的決策樹生成演算法,從決策樹的構造原理便可以看出,

越是靠近決策樹頂端的特徵維度越能夠對不同類別的樣本進行區分,也就意味著越是接近於根節點的特徵維度越重要

。因此,在sklearn中的類裡面,同樣也有方法來輸出每個特徵的重要性值。只是透過隨機森林來進行特徵重要性評估更加準確。不過想要弄清楚隨機森林中的特徵重要性評估過程,還得從決策樹說起。

2 隨機森林

在正式介紹特徵重要性評估的計算過程之前,我們先來簡單回顧一下隨機森林的構造原理。

2。1 隨機森林原理

隨機森林本質上也就是基於決策樹的Bagging整合學習模型。因此,隨機森林的建模過程總體上可以分為三步[1]:

第一步,對原始資料集進行隨機取樣,得到多個訓練子集;

第二步,在各個訓練子集上訓練得到不同的決策樹模型;

第三步,將訓練得到的多個決策樹模型進行組合,然後得到最後的輸出結果。

如圖1所示為隨機對樣本點和特徵取樣後訓練得到的若干決策樹模型組成的隨機森林。從圖中可以看出,即使同一個樣本在不同樹中所歸屬的葉子節點也不盡相同,甚至連類別也可能不同。但是這也充分體現了Bagging整合模型的優點,透過“平均”來提高模型的泛化能力。

隨機森林中的特徵重要性計算

圖 1。 隨機森林原理圖

在圖1中,多個不同結構的決策樹模型構成了隨機森林,並且在模型輸出時將會以投票的方式決策出最終的輸出類別。同時,隨機森林與普通Bagging整合學習方法存在的一點差別就是,隨機森林中每一個決策樹在每次劃分節點的過程中,還會有一個隨機的過程[1],即只會從已有的特徵中再隨機選擇部分特徵參與節點劃分,這一過程也被稱為“Feature Bagging”。之所以要這麼做是為了減小各個樹模型之間的關聯性。例如訓練資料中存在著某些差異性較大的特徵,那麼所有的決策樹在節點劃分時就會選擇同樣的特徵,使得最終得到的決策樹之間具有較強的關聯性,即每棵樹都類似。

2。2 隨機森林示例程式碼

介紹完隨機森林的基本原理後,我們再來看一看如何透過sklearn完成隨機森林的建模任務。在sklearn中,可以透過中的模組來匯入模組隨機森林。下面先來介紹一下類中常見的重要引數及其含義。

上述程式碼是類初始化方法中的部分引數,其中表示在隨機森林中決策樹的數量;表示指定構建決策樹的演算法;表示允許決策樹的最大深度;表示節點允許繼續劃分的最少樣本數,即如果劃分後的節點中樣本數少於該值,將不會進行劃分;葉子節點所需要的最少樣本數;表示每次對節點進行劃分時候選特徵的最大數量,即節點每次在進行劃分時會先在原始特徵中隨機的選取個候選特徵,然後在候選特徵中選擇最佳特徵;表示是否對原始資料集進行取樣,如果為則所有決策樹在構造時均使用相同的樣本; 表示每個訓練子集中樣本數量的最大值(當時),其預設值為,即等於原始樣本的數量。

注意:僅僅只是表示取樣的樣本數等於原始訓練集的樣本數,不代表抽樣後的子訓練集等同於原始訓練集,因為取樣時樣本可以重複。

一般來說,在sklearn的各個模型中,對於大多數引數來說保持預設即可,對於少部分關鍵引數可採樣交叉驗證進行選擇。

下面以iris資料集為例來進行的整合學習建模任務,完整程式碼見[2]。

可以看到,儘管隨機森林這麼複雜的一個模型,在sklearn中同樣可以通過幾行程式碼來完成建模。同時,在完成隨機森林的訓練後,可以透過_方法來得到所有的決策樹物件,然後分別對其進行視覺化就可以得到整個隨機森林視覺化結果。當然,最重要的是可以透過方法來得到每個特徵的重要性程度以進行特徵篩選去掉無關特徵。

3 特徵重要性評估

3。1 決策樹中的特徵評估

在sklearn中,決策樹是透過基於基尼純度的減少量來對特徵進行重要性評估,當然基尼純度也可以換成資訊增益或者是資訊增益比。具體的,對於決策樹中劃分每個節點的特徵來說,其特徵重要性計算公式為[3]

其中

表 的樣本數;

表示當前節點的樣本數;

表示當前節點的純度;

表示當前節點左孩子中的樣本數;

表示當前節點左孩子的純度;

表示當前節點右孩子中的樣本數;

表示當前節點右孩子的純度。

以上面第2節中隨機森林裡的其中一棵決策樹為例,其在每次進行節點劃分時的各項資訊如圖2所示。

隨機森林中的特徵重要性計算

圖 2。 決策樹特徵重要性評估

這裡有一個小細節需要注意的地方便是,在圖2中每個節點裡的數量指的是不重複的樣本數(因為取樣會有重複),而列表中的值則包含有重複樣本。例如在根節點中,表示一共有62個不同的樣本點,但實際上該節點中有105個樣本點,即有43個重複出現。

此時,對於特徵來說,根據式

可知其特徵重要性值為

對於特徵來說,由於其在兩次節點劃分中均有參與,所以它的特徵重要性為

對於另外兩個特徵和來說,由於兩者並沒有參與決策樹節點的劃分,所以其重要性均為0。因此,根據圖2所示的決策樹我們就得到了各個特徵的重要性評估結果。

3。2 隨機森林中的特徵評估

在介紹完決策樹中的特徵重要性評估後,再來看隨機森林中的特徵重要性評估過程就相對容易了。在sklearn中,隨機森林的特徵重要性評估主要也是基於多棵決策樹的特徵重要性結果計算而來,稱為平均純度減少量(Mean Decrease in Impurity,MDI)。MDI的主要計算過程就是將多棵決策樹的特徵重要性值取了一次平均。

對於第2節中的隨機森林來說,其另外一棵決策樹在每次進行節點劃分時的各項資訊如圖3所示。

隨機森林中的特徵重要性計算

圖 3。  隨機森林特徵重要性評估

從圖3可以看出,一共有2個特徵參與到了節點的劃分過程中。根據式

可知,特徵的重要性為

特徵的重要性為

到此為止,對於第2節中的隨機森林,其兩棵決策樹對應的計算得到特徵重要性如下表所示。

在sklearn中,對於決策樹計算得到的特徵重要性值預設情況下還會進行標準化,即每個維度均會除以所有維度的和。進一步,對於隨機森林來說,其各個特徵的重要性值則為所有決策樹對應特徵重要性的平均值在進行標準化。因此,對於上表中的結果來說,最終每個特徵重要性值如下表所示。

上述詳細的計算過程可以參見程式碼[2]。

從最後的結果可以看出,在資料集iris中對分類起決定性作用的為最後兩個特徵維度。因此,各位讀者也可以進行一個對比,只用最後兩個維度來進行分類並觀察其準確率,對比程式碼參見[2]。

4 總結

在這篇文章中,筆者首先和大家一起簡單回顧了一下隨機森林的構造原理;然後介紹了在決策樹中如何來進行特徵的重要性評估;最後詳細介紹了在隨機森林中是如何進行特徵的重要性評估計算過程。

引用

[1] https://en。wikipedia。org/wiki/Random_forest

[2] https://github。com/moon-hotel/MachineLearningWithMe

[3]https://scikit-learn。org/stable/modules/generated/sklearn。tree。DecisionTreeClassifier。html