決策樹學習筆記(三):CART算法,決策樹總結

2021-03-01 Python數據科學

點擊上方「Python數據科學」,選擇「星標公眾號」

關鍵時刻,第一時間送達!

作者:xiaoyu

介紹:一個半路轉行的數據挖掘工程師

 





推薦導讀:本篇為樹模型系列第三篇,旨在從最簡單的決策樹開始學習,循序漸進,最後理解並掌握複雜模型GBDT,Xgboost,為要想要深入了解機器學習算法和參加數據挖掘競賽的朋友提供幫助。

前情回顧

前兩篇介紹了決策樹主要的三個步驟,以及ID3和C4.5算法:

本篇將繼續介紹決策的第三種算法:CART算法,它可以說是學習決策樹的核心了。高級集成學習很多複雜框架都是基於CART的。下面將詳細介紹CART算法的來龍去脈。

CART生成算法

CART剪枝算法

CART算法小結

決策樹算法優缺點總結

CART生成算法


為什麼叫CART算法呢?這還要從它的英文單詞說起。CART是 "Classification and Regression Trees" 的縮寫,意思是 "分類回歸樹"。從它的名字上就不難理解了,CART算法是既可以用於分類的,也可以用於回歸的。

很多朋友詫異於決策樹為什麼可以用於回歸,明明是if-then結構用於分類的。下面我們來分別介紹CART分類和回歸兩種情況。

分類樹生成算法

CART算法的分類樹是與ID3和C4.5有所不同。下面我們針對特徵值的類型來分別介紹CART算法是如何進行分類的,以及和C4.5有什麼異同。

如果特徵值是連續值:CART的處理思想與C4.5是相同的,即將連續特徵值離散化。唯一不同的地方是度量的標準不一樣,CART採用基尼指數,而C4.5採用信息增益比。下面舉個例子說明下:

特徵a有連續值m個,從小到大排列。m個數值就有m-1個切分點,分別使用每個切分點把連續數值離散劃分成兩類,將節點數據集按照劃分點分為D1和D2子集,然後計算每個劃分點下對應的基尼指數,對比所有基尼指數,選擇值最小的一個作為最終的特徵劃分。

基尼指數公式,以及基於特徵A劃分後的基尼指數

以上就實現了將連續特徵值離散化,但是CART與ID3,C4.5處理離散屬性不同的是:如果當前節點為連續屬性,則該屬性(剩餘的屬性值)後面還可以參與子節點的產生選擇過程。

如果特徵值是離散值:CART的處理思想與C4.5稍微所有不同。如果離散特徵值多於兩個,那麼C4.5會在節點上根據特徵值劃分出多叉樹。但是CART則不同,無論離散特徵值有幾個,在節點上都劃分成二叉樹。CART樹是如何進行分類的呢?

還是假設特徵a有m個離散值。分類標準是:每一次將其中一個特徵分為一類,其它非該特徵分為另外一類。依照這個標準遍歷所有的分類情況,計算每種分類下的基尼指數,最後選擇值最小的一個作為最終的特徵劃分。


特徵值連續和離散有各自的處理方法,不應該混淆使用。比如分類0,1,2隻代表標籤含義,如果進行加減的運算或者求平均則沒有任何意義。因此,CART分類樹會根據特徵類型選擇不同的劃分方法,並且與C4.5不同是,它永遠只有兩個分支。

李航 「統計學習方法」 中的分類樹算法流程僅僅是針對特徵是離散型的情況,並沒有提及連續值的情況。本篇根據上面我們介紹兩個特徵類型情況重新給出一個算法流程(主要就是區分兩種不同特徵類型):

輸入:訓練數據集D,停止計算的參數條件。 
輸出:CART決策樹。

根據訓練數據集,從根結點開始,
遞歸地對每個結點進行以下操作,構建二叉決策樹:

1:如果樣本個數小於閾值或者沒有特徵,
  則返回決策子樹,當前節點停止遞歸。
2:計算樣本集D的基尼係數,如果基尼係數小於閾值,
  則返回決策樹子樹,當前節點停止遞歸。
3:識別各個特徵類型,離散值還是連續值?
  對每種類型使用相應的處理方法並計算每個切分下的基尼係數。
  缺失值的處理方法和C4.5算法裡描述的相同。
4:在計算出來的各個特徵的各個特徵值對數據集D的基尼係數中,
  選擇基尼係數最小的特徵A和對應的特徵值a。
  根據這個最優特徵和最優特徵值,把數據集劃分成兩部分D1和D2,
  同時建立當前節點的左右節點,做節點的數據集D為D1,右節點的數據集D為D2.
5:對左右的子節點遞歸的調用1-4步,生成決策樹。

算法停止計算的條件是:如步驟1,2中所示,結點中的樣本個數小於預定閾值,
或樣本集的Gini係數小於預定閾值(樣本基本屬於同一類),或者沒有更多特徵。

回歸樹生成算法


與分類樹不同,回歸樹的預測變量是連續值,比如預測一個人的年齡,又或者預測季度的銷售額等等。另外,回歸樹在選擇特徵的度量標準決策樹建立後預測的方式上也存在不同。


預測方式


一個回歸樹對應著輸入特徵空間的一個劃分,以及在劃分單元上的輸出值。先假設數據集已被劃分,R1,R2,...,Rm共m的子集,回歸樹要求每個劃分Rm中都對應一個固定的輸出值cm。

這個cm值其實就是每個子集中所有樣本的目標變量y的平均值,並以此cm作為該子集的預測值。所有分支節點都是如此,葉子節點也不例外。因此,可以知道回歸樹的預測方式是:將葉子節點中樣本的y均值作為回歸的預測值。而分類樹的預測方式則是:葉子節點中概率最大的類別作為當前節點的預測類別。

選擇特徵的度量標準

CART回歸樹對於特徵類型的處理與分類樹一樣,連續值與離散值分開對待,並只能生成二叉樹。但是CART回歸樹對於選擇特徵的度量標準則完全不同。

分類樹的特徵選擇標準使用基尼指數,而回歸樹則使用RSS殘差平方和。了解線性回歸的朋友知道,損失函數是以最小化離差平方和的形式給出的。回歸樹使用的度量標準也是一樣的,通過最小化殘差平方和作為判斷標準,公式如下:

注意:計算的是屬性劃分下樣本的目標變量y的殘差平方和,而非屬性值。

上面公式的含義是:計算所有的特徵以及相應所有切分點下的殘差平方和,找到一組(特徵j,切分點s),以滿足:分別最小化左子樹和右子樹的殘差平方和,並在此基礎上再次最小化二者之和。

其實,回歸樹也有分類的思想。所謂 「物以類聚」,相同類之間的目標變量值才會更接近,方差值也就會更小。對於回歸樹的生成算法,除了以上兩點外,其它都分類樹是相同的。

CART剪枝算法


對於決策樹剪枝,上一篇已經介紹:決策樹學習筆記(二):剪枝,ID3,C4.5。這部分重點介紹下CART是如何剪枝的?選擇的是哪種方式?

CART回歸樹和CART分類樹的剪枝策略除了在度量損失的時候一個使用均方差,一個使用基尼係數,算法基本完全一樣,因此將它們統一來說。CART採用的辦法是後剪枝法,即先生成決策樹,然後產生所有可能的剪枝後的CART樹,然後使用交叉驗證來檢驗各種剪枝的效果,選擇泛化能力最好的剪枝策略。

也就是說,CART樹的剪枝算法可以概括為兩步:

1)是從原始決策樹生成各種剪枝效果的決策樹序列。

2)是用交叉驗證來檢驗剪枝後的預測能力,選擇泛化預測能力最好的剪枝後的數作為最終的CART樹。


1)生成決策樹序列

CART採用CCP(代價複雜度)的後剪枝方法,定義了決策樹的損失函數和正則化項。公式如下:

CART剪枝與C4.5有所不同,C4.5剪枝算法是人為給定一個alpha,然後從葉結點逐漸向根節點回溯,然而CART多了一個遍歷alpha的步驟,從0~+無窮。

我們先明確幾個概念,然後將這幾個概念結合起來就可以理解整個生成決策樹序列的算法流程了。

現假設我選定了決策樹的任意一個節點t,並將節點t作為根節點。那麼這個時候我想知道節點t下的分支是否需要剪枝,怎麼辦呢?

很容易想到,我們可以對比一下剪枝以後的預測誤差和剪枝以前的預測誤差值的大小,如果不剪枝的誤差比剪枝的大,那麼我們就執行剪枝。用公式來抽象描述一下:

以t為單節點樹的損失函數,|t|=1(剪枝後)

以t為根節點的Tt損失函數(剪枝前)

現在我們有了以t為根節點剪枝前後的損失函數,我們只需要對比一下就知道了。由於alpha未確定,因此臨界的情況是:

我們把這時候的alpha臨界值稱為誤差增益率,用g(t)來表示,公示如下:

我們可以將g(t)簡單的理解為一種閾值,如果alpha大於或者等於g(t),那麼就剪枝。因為在相等的情況下,不剪枝和剪枝達到同樣的效果,也就相當於這些分支沒有什麼作用。如果alpha小於g(t),則保留,不剪枝。

考慮另外一個問題,如何選擇用哪個節點進行剪枝呢?

我們上面已經找到了對某個節點下是否該剪枝的方法了,但我們開始假設的是任意一個節點t,是一個通用的方法。對於一個生成完整的決策樹而言,是至少擁有一個節點的。如果一個決策樹有n個節點,那麼我就會有相應的n個誤差增益率g(t)

現在alpha是未知的,我們需要從零開始遍歷,直到正無窮。顯然,如果節點下的g(t)越小,alpha就會越先達到該節點的閾值,而此時的alpha大小還不足以達到其它節點的閾值。這說明g(t)越小的節點應該越先被剪枝。


如果我們將所有g(t)排序,g1(t),g2(t),...,gn(t),那麼我就會先對g1(t)對應的節點剪枝,得到一個最優子樹,和alpha區間。然後在此基礎上再對g2(t)對應的節點進行剪枝,得到第二個最優子樹,直到得到n個最優子樹的序列。


有的朋友不明白:既然是遍歷alpha,從0~+無窮,那為什麼還會得到一個alpha的區間呢?這個很好理解,因為每個alpha區間是對應一個特徵節點的,而決策樹的節點是有限的,因此我們真正的目的並不是遍歷alpha,而是通過遍歷alpha與各個g(t)比較而得到(n+1)個最優子樹序列。

交叉驗證

得到字數序列以後,我們可以使用獨立的驗證數據集,測試各子樹的平方誤差或基尼指數。平方誤差或基尼指數最小的決策樹被認為是最優的決策樹。並且,每顆子樹都對應著一個alpha,所以最優子樹確定了,alpha也就確定了。

上面已經將CART剪枝進行詳細的分析了,下面看一下CART剪枝的整個算法流程。


CART算法小結

上面我們對CART算法做了一個詳細的介紹,CART算法相比C4.5算法的分類方法,採用了簡化的二叉樹模型,同時特徵選擇採用了近似的基尼係數來簡化計算。當然CART樹最大的好處是還可以做回歸模型,這個C4.5沒有。下表給出了ID3,C4.5和CART的一個比較總結。希望可以幫助大家理解。

看起來CART算法高大上,那麼CART算法還有沒有什麼缺點呢?有,主要的缺點如下:

1)無論是ID3, C4.5還是CART,在做特徵選擇的時候都是選擇最優的一個特徵來做分類決策,但是大多數,分類決策不應該是由某一個特徵決定的,而是應該由一組特徵決定的。這樣決策得到的決策樹更加準確。這個決策樹叫做多變量決策樹(multi-variate decision tree)。在選擇最優特徵的時候,多變量決策樹不是選擇某一個最優特徵,而是選擇最優的一個特徵線性組合來做決策。這個算法的代表是OC1,這裡不多介紹。

2)如果樣本發生一點點的改動,就會導致樹結構的劇烈改變。這個可以通過集成學習裡面的隨機森林之類的方法解決。   


決策樹算法優缺點總結

我們前面介紹了決策樹的特徵選擇,生成,和剪枝,然後對ID3, C4.5和CART算法也分別進行了詳細的分析。下面我們來看看決策樹算法作為一個大類別的分類回歸算法的優缺點。

決策樹算法的優點


1)簡單直觀,生成的決策樹很直觀。

2)基本不需要預處理,不需要提前歸一化,處理缺失值。

3)使用決策樹預測的代價是O(log2m)O(log2m)。 m為樣本數。

4)既可以處理離散值也可以處理連續值。很多算法只是專注於離散值或者連續值。

5)可以處理多維度輸出的分類問題。

6)相比於神經網絡之類的黑盒分類模型,決策樹在邏輯上可以得到很好的解釋

7)可以交叉驗證的剪枝來選擇模型,從而提高泛化能力。

8) 對於異常點的容錯能力好,健壯性高。

決策樹算法的缺點

1)決策樹算法非常容易過擬合,導致泛化能力不強。可以通過設置節點最少樣本數量和限制決策樹深度來改進。

2)決策樹會因為樣本發生一點點的改動,就會導致樹結構的劇烈改變。這個可以通過集成學習之類的方法解決。

3)尋找最優的決策樹是一個NP難的問題,我們一般是通過啟發式方法,容易陷入局部最優。可以通過集成學習之類的方法來改善。

4)有些比較複雜的關係,決策樹很難學習,比如異或。這個就沒有辦法了,一般這種關係可以換神經網絡分類方法來解決。

5)如果某些特徵的樣本比例過大,生成決策樹容易偏向於這些特徵。這個可以通過調節樣本權重來改善。‍‍

下一篇將會介紹一個決策樹應用的實戰內容,以及如何使用sklearn進行決策樹的調參。

[1] 統計學習方法,李航,p73

[2] https://www.cnblogs.com/pinard/p/6053344.html

[3] https://blog.csdn.net/zlsjsj/article/details/81387393

推薦閱讀 

決策樹學習筆記(二):剪枝,ID3,C4.5

教程 | 十分鐘學會函數式 Python

我們分析了633個中國城市,發現五分之二都在流失人口

決策樹學習筆記(一):特徵選擇

相關焦點

  • 【算法】決策樹與ID3算法
    2 決策樹適合解決什麼問題?1. 什麼是決策樹/判定樹(decision tree)?決策樹(Decision Tree)算法是機器學習(Machine Learning)中分類算法中的一個重要算法,屬於監督學習(Supervised Learning)算法。決策樹算法是一種逼近離散函數值的方法。它是一種典型的分類方法,首先對數據進行處理,利用歸納算法生成可讀的規則和決策樹,然後使用決策對新數據進行分析。
  • 決策樹與隨機森林(4)—— 決策樹C5.0算法
    C5.0算法通過加入自適應增強(Adaboost)算法對C4.5進行改進。這是許多決策樹構建的一個過程,然後這些決策樹通過投票表決的方法為每個案例選擇最優的分類。Question 2: 什麼叫做 Adaboost ?
  • 決策樹學習筆記(一):特徵選擇
    作者:xiaoyu介紹:一個半路轉行的數據挖掘工程師相信很多朋友已經對決策樹很熟悉了,決策樹是機器學習中的一種基本的可用於分類與回歸的方法,它是一些集成學習如GBDT,XGboost等複雜模型的基礎。這些高級模型比如XGboost可以非常好地擬合數據,在數據挖掘比賽以及工業界中都有著非常出色的表現,受到了無數愛好者的追捧。
  • 決策樹
    5.可解釋性    當算法做出特徵值的選擇或者歸類的時候,能否非常容易的解釋學習出來的模型和我們的直覺是相符合的    以上這5方面是進行算法評估和比較的時候參照的,介紹的時候可以看針對這5方面,算法表現如何二、決策樹簡介1. 什麼是決策樹/判定樹(decisiontree)?
  • 【機器學習】決策樹總結|ID3 C4.5/C5.0 CHAID CART與QUEST
    決策樹之所以排在各類機器學習算法首位更多是因為其概念簡單且容易理解,在入門以前,不需要學習者有多少算法基礎。對於決策樹,可以把它理解為一組 if-then 規則的集合,也可以認為是定義在特徵空間(自變量)與類空間(因變量)的條件概率分布。通常對於分類問題決策樹處理速度較快,其算法也有較強的可讀性。
  • 機器學習中決策樹的原理與算法 | 科普
    我們今天所要探討的就是在分類和回歸問題中所用到的一種非常基本的方法,叫決策樹。決策樹也是重要的標籤學習方法。這篇文章裡面的部分內容來自於 AI 慕課學院的《機器學習理論與實戰高級特訓班》課程筆記。從名字來看,決策的的意思就是在眾多類別中我們需要決策出我們分類的東西是屬於哪一個類別,決策離散型的值的叫決策樹,決策連續型值的叫回歸樹。用學術一點的語言就是決策樹的輸出是離散型隨機變量,回歸樹的輸出是連續型隨機變量,這篇文章的重點是講解輸出是離散型隨機變量的決策樹,當你明白決策樹的運行機理後,回歸樹也就觸類旁通了。
  • 機器學習 | 決策樹之分類樹
    今天推出機器學習系列筆記第1期,本期分享內容為:機器學習之決策樹中的分類樹。(筆者使用的是Mac系統)決策樹(Decision Tree):是一種非參數的有監督學習算法,在已知各種情況發生概率的基礎上,通過構成決策樹來取淨現值的期望值大於等於零的概率,是直觀運用概率分析的圖解法,以解決分類和回歸問題。分為分類樹和回歸樹。
  • 機器學習----回歸模型(決策樹)
    決策樹基本算法原理核心思想:相似的輸入必會產生相似的輸出。
  • 詳解決策樹 C4.5 算法
    決策樹(decision tree)算法基於特徵屬性進行分類,其主要的優點:模型具有可讀性,計算量小,分類速度快。上圖給出了(二叉)決策樹的示例。決策樹具有以下特點:1、對於二叉決策樹而言,可以看作是if-then規則集合,由決策樹的根節點到葉子節點對應於一條分類規則;2、分類規則是互斥並且完備的,所謂互斥即每一條樣本記錄不會同時匹配上兩條分類規則,所謂完備即每條樣本記錄都在決策樹中都能匹配上一條規則。
  • 好男孩的三個標準-機器學習(決策樹)
    分類樹(決策樹)是一種十分常用的分類方法。他是一種監管學習,所謂監管學習就是給定一堆樣本,每個樣本都有一組屬性和一個類別,這些類別是事先確定的,那麼通過學習得到一個分類器,這個分類器能夠對新出現的對象給出正確的分類。這樣的機器學習就被稱之為監督學習。本文約 2637字,全文閱讀約需 20 分鐘,對照練習僅需 40 分鐘決策樹是數據挖掘、機器學習的基礎概念。
  • ID3、C4.5、CART決策樹介紹
    決策樹同時也是隨機森林的基本組成部分,後者是現今最強大的機器學習算法之一。1. 簡單了解決策樹舉個例子,我們要對」這是好瓜嗎?」這樣的問題進行決策時,通常會進行一系列的判斷:我們先看"它是什麼顏色的",如果是"青綠色", 我們再看"它的根蒂是什麼形態",如果是"蜷縮",我們再判斷"它敲起來是什麼聲音",最後我們判斷它是一個好瓜。決策過程如下圖所示。
  • sklearn學習(三):決策樹
    一.決策樹原理概述樹模型        決策樹:
  • python分類-決策樹
    原理:決策樹算法相等於一個多級嵌套的選擇結構,通過一系列問題來不停地選擇樹上的路徑,最終到達一個表示某個結論或類別的葉子節點,例如有無貸款意向、是否下雨,買賣電腦價格區間等等。決策樹屬於機器學習中的監督學習算法之一,需要根據已知樣本來訓練並得到一個可以使用的模型,然後再使用該模型對未知樣本進行分類。
  • AI產品經理必懂算法:決策樹
    決策樹(Decision Tree)是一種以樹形數據結構來展示決策規則和分類結果的模型,它是將看似無序、雜亂的已知實例,通過某種技術手段將它們轉化成可以預測未知實例的樹狀模型。時隔半月,已近年關。AI產品經理必懂算法的第三篇終於來了,今天想和大家聊的是決策樹,閒言少敘,切入正題。
  • 關於「樹」的算法:現實生活中的決策樹
    圖源:unsplash就像樹木是人類生活的重要組成部分一樣,基於樹的算法也是機器學習的重要組成部分。樹的結構給了我們開發算法的靈感,並再將其反饋到機器,讓它們學習我們希望它們學習的東西,以解決現實生活中的問題。這些基於樹的學習算法被認為是最好和最常用的監督學習方法之一:決策樹、隨機森林、梯度提升等方法在各種數據科學問題中得到了廣泛應用。對於每一個機器學習的初學者來說,學習這些算法並將其用於建模非常重要。
  • 決策樹分類算法
    二、決策樹分類決策樹算法藉助於樹的分支結構實現分類。下圖是一個決策樹的示例,樹的內部結點表示對某個屬性的判斷,該結點的分支是對應的判斷結果;葉子結點代表一個類標。上表是一個預測一個人是否會購買購買電腦的決策樹,利用這棵樹,我們可以對新記錄進行分類,從根節點(年齡)開始,如果某個人的年齡為中年,我們就直接判斷這個人會買電腦,如果是青少年,則需要進一步判斷是否是學生;如果是老年則需要進一步判斷其信用等級,直到葉子結點可以判定記錄的類別。
  • 決策樹-ID3算法和C4.5算法
    它通過對已有樣本的學習生成一顆決策樹(可看成if-then規則集合),從而能對新樣本作出相應分類。本文重點闡述如何選擇特徵建立決策樹,並給出理解算法的具體實例。什麼是決策樹?ID3算法詳解2.1 什麼是熵2.2 ID3算法2.3 ID3算法的缺點C4.5算法詳解3.1 第一個問題的改進辦法3.2 第二個問題的改進辦法決策樹:通過對已知樣本的學習,一步一步將特徵進行分類,從而將整個特徵空間進行劃分,進而區分出不同類別的算法
  • 【分類算法】基於 R 語言決策樹算法介紹及應用
    機器學習理論主要是設計和分析一些讓計算機可以自動學習的算法。機器學習算法是一類從數據中自動分析獲得規律,並利用規律對未知數據進行預測的算法。因為學習算法中涉及了大量的統計學理論,機器學習與統計推斷學聯繫尤為密切,也被稱為統計學習理論。在算法設計方面,機器學習理論關注可以實現的、行之有效的學習算法。
  • 決策樹分類算法之ID3算法與C4.5算法
    而K均值(K-means clustering)聚類則是最典型的聚類算法(當然,除此之外,還有很多諸如屬於劃分法K-MEDOIDS算法、CLARANS算法;屬於層次法的BIRCH算法、CURE算法、CHAMELEON算法等;基於密度的方法:DBSCAN算法、OPTICS算法、DENCLUE算法等;基於網格的方法:STING算法、CLIQUE算法、WAVE-CLUSTER算法)。
  • 機器學習入門 12-5 CART與決策樹中的超參數
    由於決策樹算法屬於無參數學習,因此構造決策樹的過程就是決策樹的訓練過程,決策樹訓練的時間複雜度為 O(n*m*logm)。在模擬構建決策樹的過程中,需要對樣本中的每一個維度 n 和每一個樣本 m 進行遍歷,最終找到在哪個維度上的哪個閾值上進行劃分的最佳劃分點,訓練的時間複雜度相對來說還是比較高的。