英文名字: Decision Tree
決策樹是一種典型的分類方法,首先對資料進行處理,利用歸納演算法產生可讀的規則和決策樹,然後使用決策對新資料進行分析。本質上決策樹是通過一系列規則對資料進行分類的過程。
決策樹是一個監督式學習方法,主要用於分類和迴歸。 演算法的目標是通過推斷資料特徵,學習決策規則從而建立一個預測目標變數的模型。
決策樹類似if-else結構,它的結果就是你要產生這樣一個可以從樹根開始不斷判斷選擇到葉子節點的樹。 但是這裡的if-else判斷條件不是人工設定,而是電腦根據我們提供的演算法自動產生的。
決策樹組成元素
是對幾種可能方案的選擇,即最後選擇的最佳方案。如果決策屬於多級決策,則決策樹的中間可以有多個決策點,以決策樹根部的決策點為最終決策方案。
代表備選方案的經濟效果(期望值),通過各狀態節點的經濟效果的對比,按照一定的決策標準就可以選出最佳方案。由狀態節點引出的分支稱為機率枝,機率枝的數目表示可能出現的自然狀態數目每個分枝上要註明該狀態出現的機率。
將每個方案在各種自然狀態下取得的損益值標註於結果節點的右端
決策樹組優缺點
決策樹優勢
決策樹劣勢
可能會建立過於複雜的規則,即過擬合。
決策樹有時候是不穩定的,因為資料微小的變動,可能產生完全不同的決策樹。
學習最優決策樹是一個NP完全問題。 所以,實際決策樹學習演算法是基於試探性演算法,例如在每個節點實現局部最優值的貪心演算法。 這樣的演算法是無法保證返回一個全域最優的決策樹。可以通過隨機播放特徵和樣本訓練多個決策樹來緩解這個問題。
有些問題學習起來非常難,因為決策樹很難表達。如:異或問題、同位或多工器問題
如果有些因素佔據支配地位,決策樹是有偏的。因此建議在擬合決策樹之前先平衡資料的影響因子。
決策樹常見演算法
決策樹的演算法有很多,有CART、ID3、C4.5、C5.0等,其中ID3、C4.5、C5.0都是基於資訊熵的, 而CART採用的是類似於熵的指數作為分類決策,形成決策樹後之後還要進行剪枝。
熵(Entropy): 系統的淩亂程度
ID3演算法
ID3演算法是一種分類決策樹演算法。他通過一系列的規則,將資料最後分類成決策樹的形式,分類的根據是熵。
ID3演算法是一種經典的決策樹學習演算法,由Quinlan提出。 ID3演算法的基本思想是,以資訊熵為度量,用於決策樹節 點的屬性選擇,每次優先選取資訊量最多的屬性,亦即能使熵值 變為最小的屬性,以構造一顆熵值下降最快的決策樹,到葉子節 點處的熵值為0。此時,每個葉子節點對應的執行個體集中的執行個體屬於 同一類。
通過ID3演算法來實現客戶流失的預警分析,找出客戶流失的 特徵,以協助電信公司有針對性地改善客戶關係,避免客戶流失
利用決策樹方法進行資料採礦,一般有如下步驟:資料預處 理、決策樹挖掘操作,模式評估和應用。
C4.5演算法
C4.5是ID3的進一步延伸,通過將連續屬性離散化,去除了特徵的限制。C4.5將訓練樹轉換為一系列if-then的文法規則。可確定這些規則的準確性,從而決定哪些應該被採用。如果去掉某項規則,準確效能提高,則應該實行修剪。
C4.5與ID3在核心的演算法是一樣的,但是有一點所採用的辦法是不同的,C4.5採用了資訊增益率作為劃分的根據,克服了ID3演算法中採用資訊增益劃分導致屬性選擇偏向取值多的屬性。
C5.0演算法
C5.0較C4.5使用更小的記憶體,建立更小的決策規則,更加準確。
CART演算法
分類與迴歸樹(CART——Classification And Regression Tree)) 是一種非常有趣並且十分有效非參數分類和迴歸方法。它通過構建二叉樹達到預測目的。 分類與迴歸樹CART 模型最早由Breiman 等人提出,已經在統計領域和資料採礦技術中普遍使用。它採用與傳統統計學完全不同的方式構建預測準則,它是以二叉樹的形式給出,易於理解、使用和解釋。由CART 模型構建的預測樹在很多情況下比常用的統計方法構建的代數學預測準則更加準確,且資料越複雜、變數越多,演算法的優越性就越顯著。模型的關鍵是預測準則的構建,準確的。 定義: 分類和迴歸首先利用已知的多變數資料構建預測準則, 進而根據其它變數值對一個變數進行預測。在分類中, 人們往往先對某一客體進行各種測量, 然後利用一定的分類準則確定該客體歸屬那一類。例如, 給定某一化石的評鑑特徵, 預測該化石屬那一科、那一屬, 甚至那一種。另外一個例子是, 已知某一地區的地質和物化探資訊, 預測該區是否有礦。迴歸則與分類不同, 它被用來預測客體的某一數值, 而不是客體的歸類。例如, 給定某一地區的礦產資源特徵, 預測該區的資源量。
CART和C4.5很相似,但是它支援數值的目標變數(迴歸)且不產生決策規則。CART使用特徵和閾值在每個節點獲得最大的資訊增益來構建決策樹。
scikit-learn 使用的是 CART 演算法
範例程式碼:
#! /usr/bin/env python#-*- coding:utf-8 -*-from sklearn import treeimport numpy as np# scikit-learn使用的決策樹演算法是CARTX = [[0,0],[1,1]]Y = ["A","B"]clf = tree.DecisionTreeClassifier()clf = clf.fit(X,Y)data1 = np.array([2.,2.]).reshape(1,-1)print clf.predict(data1) # 預測類別 print clf.predict_proba(data1) # 預測屬於各個類的機率
好,就這些了,希望對你有協助。
本文github地址:
20170619_決策樹演算法.md
歡迎補充