決策樹——ID3、C4.5、CART

本篇開始總結(jié)一下以決策樹為基礎(chǔ)的模型,當然本篇的內(nèi)容就是決策樹了,決策樹可以用來分類也可以用來回歸,用作分類的應該更多一些,我們也先從分類問題講起。

1 決策樹思想

決策樹的分類思想很好理解,就是很多個if-then規(guī)則的集合,形成了一個從根結(jié)點出發(fā)的樹狀結(jié)構(gòu)的模型,每一個if-then都對應著樹上的一個分支,如下圖是一個用來判斷是不是加班的決策樹示例,樹中的每個內(nèi)部結(jié)點代表一個特征,每個葉子結(jié)點代表一個類別:

看到這里我們程序員們可能會想,這個東西也能做成一個算法?我分分鐘寫100個if-else。試想,如果有成千上萬個特征呢,我們怎么知道這些特征判斷的順序怎么樣會比較高效、準確呢?哪些特征可能根本沒什么用呢?哪些特征不做判斷更有利于模型的泛化呢?要解決這些問題,靠人工是很困難的,還是得用決策樹算法來操作。

要實現(xiàn)上述特征選擇的功能有多種方法,我們知道,信息越多我們做出分類判斷的不確定性就越小,這顯然是我們追求的目標,針對這一目標先后出現(xiàn)了多種決策樹算法。

2 決策樹ID3分類算法

決策樹ID3算法的核心是:使用信息增益在各個結(jié)點上選擇特征。
使用信息增益來選擇特征的思想就是:哪個特征的信息增益值最大,就認為其提供的信息的多,我們就選這個特征進行分支。

1)信息增益(information gain)

信息增益表示得知特征X的信息而使得類Y的信息的不確定性減少的程度。特征A對訓練數(shù)據(jù)集D的信息增益g(D,A)定義為:集合D的經(jīng)驗熵(香農(nóng)熵)H(D)與特征A給定條件下D的經(jīng)驗條件熵H(D|A)之差,即

g(D,A)=H(D)?H(D|A)

這個差又稱為互信息。信息增益大的特征具有更強的分類能力。

信息增益的計算:
輸入:訓練數(shù)據(jù)集D和特征A
輸出:特征A對訓練數(shù)據(jù)集D的信息增益g(D,A)
(1)計算數(shù)據(jù)集D的經(jīng)驗熵H(D)DK個類別C_k

H(D)=?\sum_{k=1}^K\frac{|C_k|}{|D|}log_2\frac{|C_k|}{|D|}

def calc_shannon_ent(dataset):
    num_entires = len(dataset)                       #數(shù)據(jù)集總數(shù)
    label_counts = {}                                #保存每個Label(類別)出現(xiàn)次數(shù)
    for row in dataset: 
        current_label = row [-1]                     #提取Label信息
        label_counts[current_label] = label_counts.get(current_label,0)+1    #Label計數(shù)
    shannon_ent = 0.0                                #經(jīng)驗熵(香農(nóng)熵)
    for key in label_counts:    
        prob = float(label_counts[key]) / num_entires #該Label的概率
        shannon_ent -= prob * log(prob, 2)
    return shannon_ent 

(2)計算特征A對數(shù)據(jù)集D的經(jīng)驗條件熵H(D|A)D_i為特征A的取值A_iD中對應的子集
H(D|A)=\sum_{i=1}^n\frac{|D_i|}{|D|}H(D_i)=?\sum_{i=1}^n\frac{|D_i|}{|D|}\sum_{k=1}^K\frac{|D_{ik}|}{|D_i|}log_2\frac{|D_{ik}|}{|D_i|}

def calc_cond_ent(dataset, fea_i, fea_i_vals):
    condition_ent = 0.0
    for value in fea_vals:
        sub_dataset = dataset[dataset[columns[fea_i]]==fea_i_vals]  # 假設(shè)數(shù)據(jù)集是一個DataFrame
        prob = len(sub_dataset ) / float(len(dataset))  # 極大似然估計概率
        conditionEnt += prob * calc_shannon_ent(sub_dataset )  # 條件熵的計算
    return condition_ent

(3)計算信息增益
g(D,A)=H(D)?H(D|A)

2)使用信息增益的決策樹ID3

決策樹ID3算法的過程為:

輸入:訓練數(shù)據(jù)集D,每個樣本有n個離散特征,特征集合為A
輸出:決策樹T

  • 1 初始化信息增益的閾值?
  • 2 判斷樣本是否為同一類輸出C_k,如果是則返回單節(jié)點樹T,標記類別為C_k
  • 3 判斷特征A是否為空,如果是,則返回單節(jié)點樹T,標記類別為樣本中輸出類別D中實例數(shù)最多的類別C_k
  • 4 計算A中的各個特征對輸出D的信息增益(計算方法如上節(jié)所述),選擇信息增益最大的特征A_g
  • 5 如果A_g的信息增益小于閾值?,則返回單節(jié)點樹T,標記類別為樣本中輸出類別D實例數(shù)最多的類別C_k
  • 6 否則,按特征A_g的不同取值A_{gi}將對應的樣本輸出D分成不同的類別D_i。每個類別產(chǎn)生一個子節(jié)點。對應特征值為A_{gi}。返回增加了節(jié)點的數(shù)T
  • 7 對于所有的子節(jié)點,令D=D_i,A=A?{A_g}遞歸調(diào)用2-6步,得到子樹T_i并返回。

在這個過程中,如果達到了終止條件,則生成過程結(jié)束(這也算是預剪枝了,可以防止過擬合),得到最終的決策樹,其中,終止條件包括:

  • 結(jié)點的數(shù)據(jù)樣本小于閾值(提前設(shè)定),因為數(shù)據(jù)量較少時,再做分裂容易強化噪聲數(shù)據(jù)的作用;二是降低樹生長的復雜性,這樣有利于減少過擬合的風險;
  • 每個葉結(jié)點的數(shù)據(jù)樣本都只屬于一個分類,數(shù)據(jù)無法再分裂
  • 樹的層數(shù)大于閾值(提前設(shè)定),同樣可以減小決策樹的復雜度,減少過擬合的風險。
  • 所有特征已經(jīng)使用完畢,不能再繼續(xù)分裂;

3)決策樹ID3的缺點

根據(jù)以上過程就可以得到一個決策樹ID3算法模型,不過決策樹ID3算法存在一些不足之處,其缺點為:

  • 采用信息增益,在相同條件下,取值多的特征傾向于比取值少的特征信息增益大(并不是一定有這個規(guī)律),主要是因為特征的取值越多,相當于對數(shù)據(jù)集的進一步細分,那么自然是消除了更多的數(shù)據(jù)的不確定性,\frac{|D_{ik}|}{|D_i|}可能越接近1,導致H(D|A)越小,即信息增益越大;
  • 只能處理離散型特征,不能處理連續(xù)型特征,限制了其適用性;
  • 缺少對缺失值的處理;
  • 容易產(chǎn)生過擬合。

3 決策樹C4.5分類算法

為了解決上述決策樹ID3算法的缺點,使用信息增益比來選擇特征的決策樹C4.5算法出現(xiàn)了。

1)信息增益比(information gain ratio)

特征A對訓練數(shù)據(jù)集D的信息增益比g_R(D,A)定義為其信息增益g(D,A)與訓練數(shù)據(jù)集D關(guān)于特征A的值的熵H_A(D)之比,即

g_R(D,A)=\frac{g(D,A)}{H_A(D)}

其中,H_A(D)=?\sum_{i=1}^n\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|}n是特征A取值的個數(shù)。

顯然,信息增益比比信息增益多了一個H_A(D),特征的取值越多,H_A(D)越大,這個規(guī)律與g(D,A)相反,所以信息增益比相當于抵消了信息增益對取值多特征的傾向性,也就優(yōu)化了ID3的缺點1。

2)使用信息增益比的決策樹C4.5

決策樹C4.5算法的過程為:

輸入:訓練數(shù)據(jù)集D,每個樣本有n個離散特征,特征集合為A
輸出:決策樹T

  • 1 初始化信息增益的閾值?
  • 2 判斷樣本是否為同一類輸出C_k,如果是則返回單節(jié)點樹T,標記類別為C_k
  • 3 判斷特征A是否為空,如果是,則返回單節(jié)點樹T,標記類別為樣本中輸出類別D中實例數(shù)最多的類別C_k
  • 4 計算A中的各個特征對輸出D的信息增益比(計算方法如上節(jié)所述),選擇信息增益比最大的特征A_g
  • 5 如果A_g的信息增益小于閾值?,則返回單節(jié)點樹T,標記類別為樣本中輸出類別D實例數(shù)最多的類別C_k
  • 6 否則,按特征A_g的不同取值A_{gi}將對應的樣本輸出D分成不同的類別D_i。每個類別產(chǎn)生一個子節(jié)點。對應特征值為A_{gi}。返回增加了節(jié)點的數(shù)T
  • 7 對于所有的子節(jié)點,令D=D_i,A=A?{A_g}遞歸調(diào)用2-6步,得到子樹T_i并返回。

根據(jù)以上過程就可以得到一個決策樹C4.5算法模型,看起來跟ID3的區(qū)別僅僅在于信息增益比,實際上還有一些對ID3缺點的特殊處理。

3)決策樹C4.5對連續(xù)特征、缺失值的處理

(1)針對ID3缺點2不能處理連續(xù)型特征

C4.5使用二分法進行連續(xù)特征離散化,其特點在于離散化中的分類點不是隨便給的,要選擇信息增益最大的點作為該連續(xù)特征的二元離散分類點,比如在一系列連續(xù)值\left\{a_1,a_2,...,a_n\right\}中取到的增益最大的點為a^*=\frac{a_4+a_5}{2}取排序后的相鄰兩樣本值的平均數(shù)作為分類點),則小于a^*的值為類別1,大于a^*的值為類別2;

(2)針對缺點3缺少對缺失值的處理

C4.5從兩個方面對其進行處理:

  • 訓練數(shù)據(jù)的特征值有缺失的情況下,如何選擇進行分裂的特征:C4.5的方案是對該有缺失值的特征,只使用其非缺失值的樣本子集進行判斷,比如10個樣本D,特征A存在兩個缺失值,那么就把這兩個樣本剔除,其他8個樣本組成樣本子集D',在D'上按正常方法計算A的信息增益,乘0.8(無缺失值樣本所占比例)得到A的信息增益Gain(D,A)=r\times Gain(D',A)
  • 已確定了分裂特征AA存在缺失值,這些缺失值樣本分到哪個分支:C4.5的方案是將缺失值的樣本劃分到所有分支子結(jié)點中,然后為該樣本在不同的子結(jié)點中賦予不同的權(quán)重,這個權(quán)重大概就是概率的意思,子結(jié)點中樣本數(shù)多的權(quán)重就大,例如A有三個取值a_1,a_2,a_3,樣本量分別為1,2,3,則一個缺失值在這三個子結(jié)點中的權(quán)值分別為:1/6,2/6,3/6。

4)決策樹C4.5的剪枝

針對缺點4容易產(chǎn)生過擬合問題,C4.5引入了正則化系數(shù)進行初步的剪枝,控制樹的復雜度。剪枝即把決策樹的分支剪掉來簡化模型,剪枝通過最小化決策樹的整體損失函數(shù)來實現(xiàn),設(shè)決策樹T的葉子結(jié)點數(shù)量為|T|,決策樹的整體損失函數(shù)為:

C_{\alpha}(T) = C(T) + \alpha |T|

C(T)表示模型對訓練數(shù)據(jù)的預測誤差,\alpha |T|表示決策樹的復雜度(葉子結(jié)點越多越復雜),\alpha用來控制二者的關(guān)系,\alpha越大,樹越簡單。

剪枝算法:

輸入:已經(jīng)生成的決策樹T,參數(shù)\alpha
輸出:剪枝后的決策樹T_{\alpha}

  • 計算每個結(jié)點的經(jīng)驗熵;
  • 遞歸的從樹的葉結(jié)點向上回縮,如果回縮后的決策樹損失函數(shù)值變小,則進行剪枝——將父結(jié)點變?yōu)樽咏Y(jié)點;
  • 回到第二步,繼續(xù)剪枝至得到損失最小的決策樹T_{\alpha}

5)決策樹C4.5的缺點

決策樹C4.5對ID3的缺點做了一定的改進,不過其仍然存在一些不足:

  • 只能用于分類,不能處理回歸問題;
  • C4.5生成的是多叉樹,計算效率不夠高;
  • C4.5生成過程中有很多對數(shù)計算,計算效率不夠高。

3 分類、回歸都行的決策樹CART

CART(Classification And Regression Tree),分類與回歸樹,顧名思義,其既可以分類又可以回歸,好神奇呦,它是最常用的決策樹算法,CART同樣由特征選擇、樹的生成及剪枝組成,為了優(yōu)化C4.5的缺點,在分類問題中,CART使用基于基尼系數(shù)的特征選擇,并使用二叉樹的結(jié)構(gòu)來簡化計算。

3.1 分類樹

1)基尼系數(shù)

基尼系數(shù)代表了數(shù)據(jù)集的不純度,特征分類后的數(shù)據(jù)集基尼系數(shù)越小,則不純度越低,該特征分類效果越好。在分類問題中,假設(shè)數(shù)據(jù)集有K個類別,第k個類別的概率為p_k, 則基尼系數(shù)的表達式為:

Gini(p) = \sum\limits_{k=1}^{K}p_k(1-p_k) = 1- \sum\limits_{k=1}^{K}p_k^2

可以通過下圖來理解基尼系數(shù)隨類別個數(shù)變化的關(guān)系,各個類別概率之和為1,每個類別的概率p_k的平方相當于邊長為p_k的正方形面積,類別越多,邊長為p_k的正方形越多,如下左圖所示,藍色區(qū)域面積越小,表示數(shù)據(jù)的不純度越高,當只有一個類別時藍色面積達到最大值1,此時基尼系數(shù)為0,表示數(shù)據(jù)的不純度最低:

為了簡化問題,我們將決策樹的結(jié)構(gòu)設(shè)定為二叉樹,即對任意特征來說,都只根據(jù)其取值將樣本劃分為兩個類別,對于樣本D,如果根據(jù)特征A的某個值a,把D分成D1和D2兩部分,則在特征A的條件下,D的基尼系數(shù)表達式為:

Gini(D,A) = \frac{|D_1|}{|D|}Gini(D_1) + \frac{|D_2|}{|D|}Gini(D_2)

用基尼系數(shù)來判斷特征分裂能力的好壞,如果D1和D2兩部分都包含的類別數(shù)變少,即純度增加,則基尼系數(shù)變小,所以Gini(D,A)越小的特征越好,這其實跟使用信息熵是差不多的,下圖可以發(fā)現(xiàn),在二分類的計算中,基尼系數(shù)和熵之半的曲線非常接近(對熵進行一階泰勒展開可以發(fā)現(xiàn)二者的相似之處),基尼系數(shù)可以做為熵模型的一個近似替代:

二分類中基尼指數(shù)、熵之半、分類誤差率之間的關(guān)系

2)使用基尼系數(shù)的決策樹CART

決策樹CART的生成過程:

輸入:訓練集D,終止條件(如基尼系數(shù)的閾值,樣本個數(shù)閾值)
輸出:CART決策樹T

從根節(jié)點開始,用訓練集遞歸的建立CART樹;

  1. 對于當前節(jié)點的數(shù)據(jù)集為D,如果樣本個數(shù)小于閾值或者沒有特征,則返回決策子樹,當前節(jié)點停止遞歸;
  2. 計算樣本集D的基尼系數(shù),如果基尼系數(shù)小于閾值,則返回決策樹子樹,當前節(jié)點停止遞歸;
  3. 計算當前節(jié)點現(xiàn)有的各個特征的各個特征值對數(shù)據(jù)集D的基尼系數(shù),對于離散值和連續(xù)值的處理方法和基尼系數(shù)的計算見第二節(jié)。缺失值的處理方法和上篇的C4.5算法里描述的相同;
  4. 在計算出來的各個特征的各個特征值(與ID3、C4.5不同,他們不需要找最佳特征值)對數(shù)據(jù)集D的基尼系數(shù)中,選擇基尼系數(shù)最小的特征A和對應的特征值a。根據(jù)這個最優(yōu)特征和最優(yōu)特征值,把數(shù)據(jù)集劃分成兩部分D1D2,同時建立當前節(jié)點的左右節(jié)點,做節(jié)點的數(shù)據(jù)子集為D1,右節(jié)點的數(shù)據(jù)子集為D2
  5. 對左右的子節(jié)點遞歸的調(diào)用1-4步,生成決策樹。

CART樹的生成效率高,一是因為選擇基尼系數(shù)作為分類標準,主要是乘法,沒有對數(shù)運算,提高了計算效率;二是因為CART是二叉樹,簡化了決策樹結(jié)構(gòu)。

還有一點區(qū)別是CART樹中的一特征可以在多處重復使用來分裂,而ID3和C4.5的離散特征只能使用一次,C4.5的連續(xù)型特征可能使用多次,本質(zhì)上來說這也不算什么區(qū)別,只不過是樹的結(jié)構(gòu)變成了二叉樹的結(jié)果,因為一個特征包含多種取值,在ID3和C4.5中因為是多叉樹,所以一次使用就已經(jīng)窮盡了這個特征的所有分類信息,即該特征已經(jīng)信息耗盡,如果再重復用他去分類是已經(jīng)沒有意義的了,而二叉樹的CART不同,一次使用并不一定能將一個特征的信息用完,所以以后還可以重復使用,同理可以知道為什么C4.5的連續(xù)型特征可能使用多次,因為連續(xù)型特征在離散化的時候?qū)嶋H上是用的二分法,沒有將其信息用盡,所以以后還可以用,所以是不是很好理解,并不是什么特別的設(shè)計。

3)決策樹CART的剪枝

我們已經(jīng)知道決策樹的整體損失函數(shù):

C_{\alpha}(T) = C(T) + \alpha |T|

\alpha用來平衡經(jīng)驗損失和樹的復雜度,\alpha越大,被剪掉的分支就越多,樹越簡單,C4.5中我們把\alpha當做參數(shù)來人工輸入,這顯然是還可以繼續(xù)優(yōu)化的,所以CART的剪枝過程有兩個問題需要解決:1、怎么確定\alpha來使得復雜度和擬合度達到最好的平衡?2、把哪些分支剪掉?

首先我們來思考一下\alpha對樹的影響,舉個例子,假設(shè)有個決策樹共4個葉子結(jié)點,樹上有個分支包含兩個葉子結(jié)點,這個分支沒剪掉之前C(T)=0,如果剪掉這個分支,經(jīng)驗損失升高C(T)=0.5,現(xiàn)在我們從0開始來增大\alpha,當\alpha=0.5時,決策樹的整體損失C_{\alpha}(T)=0+0.5*4=2,如果在此時減去這個分支得到子樹T_1,決策樹的整體損失變?yōu)?img class="math-inline" src="https://math.jianshu.com/math?formula=C_%7B%5Calpha%7D(T_1)%3D0.5%2B0.5*3%3D2" alt="C_{\alpha}(T_1)=0.5+0.5*3=2" mathimg="1">,即剪枝前后整體損失相等,此時就是剪枝的臨界點,如果不剪枝整體損失就大于剪枝的子樹了,當然,剪枝之后經(jīng)驗損失(誤差)也增大了,\alpha反映了誤差增大的大小,因此\alpha被稱作“誤差增益”。如果繼續(xù)增大\alpha,發(fā)現(xiàn)到\alpha=1時又需要剪枝了,顯然T_1是在\alpha的區(qū)間[0.5,1)中的最優(yōu)子樹,每個\alpha可以通過下式計算:

臨界點時:C_{\alpha}(T) = C(T) + \alpha |T|=C(T_1) + \alpha( |T|-1)

誤差增益:\alpha = \frac{C(T_1)-C(T)}{|T|-1}

隨著\alpha的不斷增大,我們會得到子樹序列T_0,T_1,T_2,...,T_n,每個T_{i}剪去一個分支變成T_{i+1},如果我們從樹的角度來想的話,就是每一個分支結(jié)點,都對應著一個\alpha,這個\alpha就是將它剪去的劊子手,所以我們實際操作中是根據(jù)每個結(jié)點計算\alpha,而不是真的通過增大\alpha來得到子樹,因為\alpha作為連續(xù)數(shù)值要遍歷的話是不可能的。

在我們得到所有的子樹T_0,T_1,T_2,...,T_n后,對每棵樹進行交叉驗證(即用測試集驗證),結(jié)果最好的即為泛化能力最好的決策樹。總結(jié)CART決策樹剪枝的過程:

輸入:CART算法生成的決策樹T_0
輸出:剪枝后的最優(yōu)決策樹T_{\alpha}

(1)設(shè)k=0,T=T_0
(2)設(shè)\alpha=+\infty
(3)自下而上對各內(nèi)部結(jié)點t計算C(T_t),|T_t|以及

g(t)=\frac{C(t)-C(T_t)}{|T_t|-1}

\alpha=min(g(t),\alpha)

式中,T_t表示已t為根結(jié)點的子樹,C(T_t)是其對訓練數(shù)據(jù)的預測誤差,|T_t|是葉子結(jié)點個數(shù);
(4) 對g(t)=\alpha的內(nèi)部結(jié)點t進行剪枝,并對葉結(jié)點t用多數(shù)表決法確定其類別,得到樹T
(5)設(shè)k=k+1,\alpha_k=\alpha,T_k=T
(6)如果T_k不是由根結(jié)點和兩個葉子結(jié)點構(gòu)成的樹,則回到步驟(2);否則令T_k=T_n
(7)采用交叉驗證法在子樹序列T_0,T_1,T_2,...,T_n中選取最優(yōu)子樹T_{\alpha}

分析一下這個過程,一開始設(shè)置\alpha為無窮大,然后計算所有內(nèi)部節(jié)點的\alpha,然后取一個最小的值,最小的\alpha應該對應著最少的剪枝,保存剪枝后的樹T_0;剪枝后,全部結(jié)點的\alpha都會變化,此時重新計算所有的\alpha,重復上面的操作,這一次得到的最小的\alpha會比之前的大,一直重復這一套操作直到根節(jié)點結(jié)束。

不知道大家有沒有這個疑問,直接遍歷各種剪枝的可能不行嗎,這里計算并保存\alpha有什么用呢?難道這樣按\alpha從小到大剪枝會比遍歷的運算效率高嗎,搞不懂,我猜可能是最小的\alpha沒準對應的不一定是第一層,可能是第二層第三層,如果這樣的話,那確實一下剪掉就提高了效率,純屬猜測,哪天有空了可以設(shè)計個決策樹試試看。。。

3.2 回歸樹

所謂回歸樹,就是其輸出不再是離散型的類別數(shù)據(jù),而是連續(xù)型的數(shù)值,回歸樹與分類樹的區(qū)別的根源也就在此,分類樹中的label是離散型的類別,所以我們使用信息熵啊、基尼系數(shù)啊來衡量被分開的兩波數(shù)據(jù)中類別數(shù)是不是變得更少,也就是所謂的數(shù)據(jù)更純粹、信息更多;回歸樹的label是各種數(shù)值,這樣肯定就行不通啦,我們需要衡量的是被分開的兩波數(shù)據(jù)是不是數(shù)值更相近了,也就是方差,所以回歸樹與分類樹的區(qū)別就是:1、數(shù)據(jù)分裂的評價指標不同;2、最終預測結(jié)果的獲取方式不同(要把輸出歸一到一個數(shù)值上)

  • 數(shù)據(jù)分裂選擇特征的指標:特征A中取值點s將數(shù)據(jù)集劃分成數(shù)據(jù)子集D_1D_2,使D_1D_2的均方差分別最小,同時使D_1D_2的均方差之和最小,那么A為分裂特征,s為分裂點,表達式為:

\min_{A,s}[\min_{c_1}\sum\limits_{x_i \in D_1}(y_i - c_1)^2 + \min_{c_2}\sum\limits_{x_i \in D_2}(y_i - c_2)^2]

其中,c_1D_1數(shù)據(jù)集的樣本輸出均值,c_2D_2數(shù)據(jù)集的樣本輸出均值。

  • 預測結(jié)果的獲取方式:葉子結(jié)點中數(shù)據(jù)label的均值或者中位數(shù)。

除此之外,回歸樹的生成方式與分類樹一致。

4 決策樹總結(jié)

之前我們已經(jīng)知道了邏輯回歸、SVM等多種分類算法,相比之下:

  • 決策樹的思路簡單易懂,淺層的樹可解釋性很好,并且易于可視化,這種特點使得其頗受一些傳統(tǒng)行業(yè)的青睞;
  • 同時,決策樹對數(shù)據(jù)分布沒有假設(shè),且可以處理離散型數(shù)據(jù)和連續(xù)型數(shù)據(jù),而之前那幾種分類器顯然對連續(xù)型數(shù)據(jù)更友善;
  • 決策樹可以直接實現(xiàn)多分類;
  • 對批量數(shù)據(jù)預測速度比較快,因為CART二叉樹的結(jié)果,其預測的時間復雜度為O(log_2N),其中N為數(shù)據(jù)量。

決策樹還是有其局限性及缺點的,包括:

  • 決策樹每次用一個特征分裂,容易忽略特征間的相互關(guān)聯(lián),這個問題可以通過多變量決策樹來優(yōu)化;
  • 決策樹容易發(fā)生過擬合,需要花很大功夫來調(diào)整其結(jié)構(gòu)如剪枝等來控制;
  • 決策樹容易因為樣本的小的變化而過分改變其結(jié)構(gòu),使模型穩(wěn)定性和抗震蕩性差,這個問題可使用集成模型來優(yōu)化;
  • 對缺失值的處理不夠好等。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。