決策樹學習是統計學、資料探勘和機器學習中使用的一種預測建模方法。它使用決策樹作為，從樣本的觀測資料（對應決策樹的分支）推斷出該樣本的預測結果（對應決策樹的葉節點）。 按預測結果的差異，決策樹學習可細分兩類。（1）分類樹，其預測結果僅限於一組離散數值。樹的每個分支對應一組由邏輯與連線的分類特徵，而該分支上的葉節點對應由上述特徵可以預測出的分類標籤。（2）迴歸樹，其預測結果為連續值（例如實數）。 在決策分析中，一棵可視的決策樹可以向使用者形象地展示決策的結果和過程。在資料探勘和機器學習中，一棵決策樹主要用於描述資料（此後亦可基於習得的預測模型去支援決策。本頁側重描述資料探勘中的決策樹。 推廣 在資料探勘中決策樹訓練是一個常用的方法。目標是建立一個模型來預測樣本的目標值。例如右圖。每個內部節點對應於一個輸入屬性，子節點代表父節點的屬性的可能取值。每個葉子節點代表輸入屬性得到的可能輸出值。 一棵樹的訓練過程為：根據一個指標，分裂訓練集為幾個子集。這個過程不斷的在產生的子集裡重複遞迴進行，即遞迴分割。當一個訓練子集的類標都相同時遞迴停止。這種 決策樹的自頂向下歸納（TDITD）Quinlan J R 1986 Induction of Decision Trees Machine Learning 1 81106 Kluwer Academic Publishers 是貪心演算法的一種，也是目前為止最為常用的一種訓練方法，但不是唯一的方法。 資料以如下方式表示 textbf xY x_1 x_2 x_3 x_k Y 其中 Y 是目標值，向量 x 由這些屬性構成，x1 x2 x3 等等，用來得到目標值。 決策樹的型別 在資料探勘中，決策樹主要有兩種型別 分類樹 的輸出是樣本的類標（例如花的分類，股票漲跌等）。 迴歸樹 的輸出是一個實數 例如房子的價格，病人待在醫院的時間等。 術語分類和迴歸樹 CART 包含了上述兩種決策樹，最先由 Breiman 等提出。分類樹和迴歸樹有些共同點和不同點 例如處理在何處分裂的問題。 有些整合的方法產生多棵樹： 裝袋演算法（Bagging） 是一個早期的整合方法，用有放回抽樣法來訓練多棵決策樹，最終結果用投票法產生。Breiman L 1996 Bagging Predictors Machine Learning 24 pp 123140 隨機森林（Random Forest） 使用多棵決策樹來改進分類效能。 提升樹（Boosting Tree） 可以用來做迴歸分析和分類決策 Friedman J H 1999 Stochastic gradient boosting Stanford UniversityHastie T Tibshirani R Friedman J H 2001 The elements of statistical learning Data mining inference and prediction New York Springer Verlag 旋轉森林（Rotation forest） 每棵樹的訓練首先使用主元分析法 PCA。Rodriguez JJ and Kuncheva LI and Alonso CJ 2006 Rotation forest A new classifier ensemble method IEEE Transactions on Pattern Analysis and Machine Intelligence 28 1016191630 還有其他很多決策樹演算法，常見的有 ID3 演算法 C45 演算法 CHisquared Automatic Interaction Detector CHAID 在生成樹的過程中用多層分裂 MARS 可以更好的處理數值型資料。 模型表示式 構建決策樹時通常採用自上而下的方法，在每一步選擇一個最好的屬性來分裂。 最好 的定義是使得子節點中的訓練集儘量的純，表示所分裂出的子節點中的集合越相近。不同的演算法使用不同的指標來定義 最好。本部分介紹一些最常見的指標。 基尼不純度指標 在 CART 演算法中，基尼不純度表示一個隨機選中的樣本在子集中被分錯的可能性。基尼不純度為這個樣本被選中的機率乘以它被分錯的機率。當一個節點中所有樣本都是一個類時，基尼不純度為零。 假設 y 的可能取值為 J 個類別，令 i in 1 2 J，p_i 表示被標定為第 i 類的機率，則基尼不純度的計算為： operatorname I_Gp sum_i1J p_i sum_kneq i p_k sum_i1J p_i 1p_i sum_i1J p_i p_i2 sum_i1J p_i sum_i1J p_i2 1 sumJ_i1 p_i2 資訊增益 ID3 C45 和 C50 決策樹的生成使用資訊增益。資訊增益是基於資訊理論中資訊熵與資訊本體理論。 資訊熵定義為： Eta T operatorname I_Eleft p_1 p_2 p_Jright sumJ_i1 p_i log_2 p_i 其中 p_1 p_2 加和為 1，表示當前節點中各個類別的百分比。 overbrace IG Tatext Information Gain overbrace Eta Ttext Entropy parent overbrace Eta Tatext Weighted Sum of Entropy Children sum_i1J p_ilog_2 p_i sum_ap asum_i1JPr ialog_2 Pr ia 例如，資料集有 4 個屬性：outlook sunny overcast rainy temperature hot mild cool humidity high normal and windy true false 目標值 play（yes no） 總共 14 個數據點。為建造決策樹，需要比較 4 棵決策樹的資訊增益，每棵決策樹用一種屬性做劃分。資訊增益最高的劃分作為第一次劃分，並在每個子節點繼續此過程，直至其資訊增益為 0。 使用屬性 windy 做劃分時，產生 2 個子節點：windy 值為真與為假。當前資料集，6 個數據點的 windy 值為真，其中 3 個點的 play 值為真，3 個點的 play 值為假；其餘 8 個數據點的 windy 為假，其中 6 個點的 play 值為真，2 個點的 play 值為假。 windytrue 的子節點的資訊熵計算為： I_E33 frac 3 6log_2 frac 3 6 frac 3 6log_2 frac 3 6 frac 1 2log_2 frac 1 2 frac 1 2log_2 frac 1 2 1 windyfalse 的子節點的資訊熵計算為： I_E62 frac 6 8log_2 frac 6 8 frac 2 8log_2 frac 2 8 frac 3 4log_2 frac 3 4 frac 1 4log_2 frac 1 4 08112781 這個劃分（使用屬性 windy）的資訊熵是兩個子節點資訊熵的加權和： I_E3362 I_Etext windy or not frac 6 14 cdot 1 frac 8 14 cdot 08112781 08921589 為計算使用屬性 windy 的資訊增益，必須先計算出最初（未劃分）的資料集的資訊熵，資料集的 play 有 9 個 yes 與 5 個 no： I_E95 frac 9 14log_2 frac 9 14 frac 5 14log_2 frac 5 14 0940286 使用屬性 windy 的資訊增益是： IG text windy I_E95 I_E3362 0940286 08921589 00481271 決策樹的優點 與其他的資料探勘演算法相比，決策樹有許多優點 易於理解和解釋，人們很容易理解決策樹的意義。 只需很少的資料準備，其他技術往往需要資料歸一化。 即可以處理數值型資料也可以處理類別變數資料。其他技術往往只能處理一種資料型別。例如關聯規則只能處理類別型的而神經網路只能處理數值型的資料。 使用模型，輸出結果容易透過模型的結構來解釋。而神經網路是黑箱模型，很難解釋輸出的結果。 可以透過測試集來驗證模型的效能。可以考慮模型的穩定性。 。對噪聲處理有好的強健性。 可以很好的處理大規模資料。 缺點 訓練一棵最優的決策樹是一個完全 NP 問題。Murthy S 1998 Automatic construction of decision trees from data A multidisciplinary survey Data Mining and Knowledge Discovery 因此，實際應用時決策樹的訓練採用啟發式搜尋演算法例如 貪心演算法來達到區域性最優。這樣的演算法沒辦法得到最優的決策樹。 決策樹建立的過度複雜會導致無法很好的預測訓練集之外的資料。這稱作過擬合。剪枝機制可以避免這種問題。 有些問題決策樹沒辦法很好的解決，例如 異或問題。解決這種問題的時候，決策樹會變得過大。 要解決這種問題，只能改變問題的領域 或者使用其他更為耗時的學習演算法 例如或者 對那些有類別型屬性的資料，資訊增益會有一定的偏置。 延伸 決策圖 在決策樹中，從根節點到葉節點的路徑採用匯合。 而在決策圖中，可以採用最小描述長度（MML）來匯合兩條或多條路徑。 用演化演算法來搜尋 演化演算法可以用來避免區域性最優的問題 Papagelis A Kalles D2001 Breeding Decision Trees Using Evolutionary Techniques Proceedings of the Eighteenth International Conference on Machine Learning p393400 June 28July 01 2001Barros Rodrigo C Basgalupp M P Carvalho A C P L F Freitas Alex A 2011 A Survey of Evolutionary Algorithms for DecisionTree Induction IEEE Transactions on Systems Man and Cybernetics Part C Applications and Reviews vol 42 n 3 p 291312 May 2012 參見 決策樹剪枝 二元決策圖 CART ID3 演算法 C45 演算法 參考資料 外部連結 Building Decision Trees in Python From OReilly An Addendum to Building Decision Trees in Python From OReilly Decision Trees page at aaaiorg a page with commented links Decision tree implementation in Ruby AI4R Building Decision Tree In Bash Category 決策樹 Category 分類演演算法