2018 8 27 決策樹與隨機森林

2021-08-26 03:07:10 字數 3286 閱讀 6606

首先,在了解樹模型之前,自然想到樹模型和線性模型有什麼區別呢?其中最重要的是,樹形模型是乙個乙個特徵進行處理,之前線性模型是所有特徵給予權重相加得到乙個新的值。決策樹與邏輯回歸的分類區別也在於此,邏輯回歸是將所有特徵變換為概率後,通過大於某一概率閾值的劃分為一類,小於某一概率閾值的為另一類;而決策樹是對每乙個特徵做乙個劃分。另外邏輯回歸只能找到線性分割(輸入特徵x與logit之間是線性的,除非對x進行多維對映),而決策樹可以找到非線性分割。

而樹形模型更加接近人的思維方式,可以產生視覺化的分類規則,產生的模型具有可解釋性(可以抽取規則)。樹模型擬合出來的函式其實是分區間的階梯函式。

其次,需要了解幾個重要的基本概念:根節點(最重要的特徵);父節點與子節點是一對,先有父節點,才會有子節點;葉節點(最終標籤)。

一、決策樹

決策樹的生成:

決策樹思想,實際上就是尋找最純淨的劃分方法,這個最純淨在數學上叫純度,純度通俗點理解就是目標變數要分得足夠開(y=1的和y=0的混到一起就會不純)。另一種理解是分類誤差率的一種衡量。實際決策樹演算法往往用到的是,純度的另一面也即不純度,下面是不純度的公式。不純度的選取有多種方法,每種方法也就形成了不同的決策樹方法,比如id3演算法使用資訊增益作為不純度;c4.5演算法使用資訊增益率作為不純度;cart演算法使用基尼係數作為不純度。

決策樹要達到尋找最純淨劃分的目標要幹兩件事,建樹和剪枝

建樹:(1)如何按次序選擇屬性

也就是首先樹根上以及樹節點是哪個變數呢?這些變數是從最重要到次重要依次排序的,那怎麼衡量這些變數的重要性呢? id3演算法用的是資訊增益,c4.5演算法用資訊增益率;cart演算法使用基尼係數。決策樹方法是會把每個特徵都試一遍,然後選取那個,能夠使分類分的最好的特徵,也就是說將a屬性作為父節點,產生的純度增益(gaina)要大於b屬性作為父節點,則a作為優先選取的屬性。

(根據log(x)的函式可知,p值越小,熵越大,所以當分組完全是會出現p=0此時熵最大)

(2) 如何**訓練資料(對每個屬性選擇最優的分割點)

如何**資料也即**準則是什麼?依然是通過不純度來**資料的,通過比較劃分前後的不純度值,來確定如何**。

下面做具體的介紹:

——cart演算法:既可以做分類,也可以做回歸。只能形成二叉樹。

分支條件:二分類問題

分支方法:對於連續特徵的情況:比較閾值,高於某個閾值就屬於某一類,低於某個閾值屬於另一類。對於離散特徵:抽取子特徵,比如顏值這個特徵,有帥、醜、中等三個水平,可以先分為帥和不帥的,不帥的裡面再分成醜和中等的。

得分函式(y):就是上面提到的gt(x),對於分類樹取得是分類最多的那個結果(也即眾數),對於回歸樹取得是均值。

損失函式:其實這裡的損失函式,就是分類的準則,也就是求最優化的準則

對於分類樹(目標變數為離散變數):同一層所有分支假設函式的基尼係數的平均。

對於回歸樹(目標變數為連續變數):同一層所有分支假設函式的平方差損失

對於分類樹(目標變數為離散變數):使用基尼係數作為**規則。比較**前的gini和**後的gini減少多少,減少的越多,則選取該**規則,這裡的求解方法只能是離散窮舉。關於基尼係數,可以參考周志華的西瓜書決策樹那章,講得比較簡潔,也比較易懂。「直觀來說,(資料集d的基尼係數)gini(d)反映了從資料集d中隨機抽取兩個樣本,其類別標記不一致的概率,因此gini(d)越小,則資料集d的純度越高。」

具體這個的計算,我覺得有例子才好理解,下面這個紅綠球的例子很好的說明了,如何根據損失函式最小(也就是基尼係數最小)來選取**規則。最後giins2更小,因此選擇它作為分類規則。

主要優缺點如下圖。缺點補充幾點,不是很穩點,資料變化一點,你的樹就會發生變化;沒有考慮變數之間相關性,每次篩選都只考慮乙個變數(因此不需要歸一化);只能線性分割資料;貪婪演算法(可能找不到最好的樹)。優點也補充三點,同時可以處理分類變數和數值變數(但是可能決策樹對連續變數的劃分並不合理,所以可以提前先離散化);可以處理多輸出問題;另外決策樹不需要做變數篩選,它會自動篩選;適合處理高維度資料。

剪樹:(2) 如何停止**

下面這六種情況都會停止**。其中第一種其實屬於樹的完全長成,但這會出現過擬合問題,所有之前很流行一種抑制這種情況的方法,叫樹的剪枝。樹的剪枝分為預剪枝和後剪枝,預剪枝,及早的停止樹增長控制樹的規模,方法可以參考如下6點停止分類的條件。後剪枝在已生成過擬合決策樹上進行剪枝,刪除沒有意義的組,可以得到簡化版的剪枝決策樹,包括rep(設定一定的誤分類率,減掉對誤分類率上公升不超過閾值的多餘樹)、pep,還有一種ccp,即給**準則—基尼係數加上懲罰項,此時樹的層數越深,基尼係數的懲罰項會越大。

二、隨機森林

儘管有剪枝等等方法,一棵樹的生成肯定還是不如多棵樹,因此就有了隨機森林,解決決策樹泛化能力弱的缺點。(可以理解成三個臭皮匠頂過諸葛亮)

而同一批資料,用同樣的演算法只能產生一棵樹,這時bagging策略可以幫助我們產生不同的資料集。bagging策略**於bootstrap aggregation:從樣本集(假設樣本集n個資料點)中重取樣選出nb個樣本(有放回的取樣,樣本資料點個數仍然不變為n),在所有樣本上,對這n個樣本建立分類器(id3\c4.5\cart\svm\logistic),重複以上兩步m次,獲得m個分類器,最後根據這m個分類器的投票結果,決定資料屬於哪一類。

隨機森林在bagging的基礎上更進一步:

樣本的隨機:從樣本集中用bootstrap隨機選取n個樣本

特徵的隨機:從所有屬性中隨機選取k個屬性,選擇最佳分割屬性作為節點建立cart決策樹(泛化的理解,這裡面也可以是其他型別的分類器,比如svm、logistics)

重複以上兩步m次,即建立了m棵cart決策樹

這m個cart形成隨機森林,通過投票表決結果,決定資料屬於哪一類(投票機制有一票否決制、少數服從多數、加權多數)

關於調參:1.如何選取k,可以考慮有n個屬性,取k=根號n

2.最大深度(不超過8層)

3.棵數

4.最小**樣本樹

5.類別比例

id3演算法:使用資訊增益作為**的規則,資訊增益越大,則選取該**規則。多分叉樹。資訊增益可以理解為,有了x以後對於標籤p的不確定性的減少,減少的越多越好,即資訊增益越大越好

c4.5演算法:使用資訊增益率作為**規則(需要用資訊增益除以,該屬性本身的熵),此方法避免了id3演算法中的歸納偏置問題,因為id3演算法會偏向於選擇類別較多的屬性(形成分支較多會導致資訊增益大)。多分叉樹。連續屬性的**只能二**,離散屬性的**可以多**,比較**前後資訊增益率,選取資訊增益率最大的

三種方法對比:

id3的缺點,傾向於選擇水平數量較多的變數,可能導致訓練得到乙個龐大且深度淺的樹;另外輸入變數必須是分類變數(連續變數必須離散化);最後無法處理空值。

c4.5選擇了資訊增益率替代資訊增益。

cart以基尼係數替代熵;最小化不純度而不是最大化資訊增益。

決策樹與隨機森林演算法

決策樹 分類樹 是一種樹形結構,其中每個內部節點表示乙個屬性上的測試,每個分支代表乙個測試輸出,每個葉節點代表一種類別。決策樹只需要構建一次,每一次 分類的最大計算次數不超過決策樹的深度。決策樹學習演算法 id3演算法 通過自頂向下構造決策樹來進行學習,構造過程是從 選取分類能力最好的屬性作為根節點...

決策樹和隨機森林

決策樹 建立決策樹的關鍵,是在當前狀態下選擇那個屬性作為分類依據。根據不同的目標函式,建立決策樹主要有三個演算法 id3 iterative dichotomiser c4.5 cart classification and regression tree 資訊增益 當熵和條件熵中的概率由資料統計得...

決策樹和隨機森林

c4.5 cart 2,工具 能夠將dot檔案轉換為pdf png 3,執行命令 缺點 改進 建立10顆決策樹,樣本,特徵大多不一樣 隨機又放回的抽樣 bootstrap boolean,optional default true 是否在構建樹時使用放回抽樣。隨機森林的優點 import panda...