1. 程式人生 > >決策樹(decision tree)演算法

決策樹(decision tree)演算法

*機器學習中分類和預測演算法的評估:

  • 準確率
  • 速度
  • 強壯性
  • 可規模性
  • 可解釋性

1.什麼是決策樹/判定樹(decision tree)?

       判定樹是一個類似於流程圖的樹結:其中,每個內部節點表示在一個屬性上的測試,每個分支代表一個屬性輸出,而每個樹葉節點代表類或類分佈。樹的最頂層是根節點。

2.熵(entropy)概念

      資訊是一個抽象的概念,那應該如何度量資訊呢?

      1948年,夏農提出了“資訊熵”的概念

      一條資訊的資訊量大小和他的不確定性有直接關係,要搞清楚一鍵非常非常不確定的事情或者是我們一無所知的事情,需要了解大量資訊==>資訊量的度量就等於不確定性的多少

       例子:猜世界盃冠軍,假如一無所知,才多少次?

       每一個隊奪冠的機率是不相等的

       位元(bit)來衡量資訊的多少

       在信源中,考慮的不是某一單個符號發生的不確定性,而是要考慮這個信源所有可能發生情況的平均不確定性。若信源符號有n種取值:U1…Ui…Un,對應概率為:P1…Pi…Pn,且各種符號的出現彼此獨立。這時,信源的平均不確定性應當為單個符號不確定性-logPi的統計平均值(E),可稱為資訊熵:

       式中對數一般取2為底,單位為位元。但是,也可以取其它對數底,採用其它相應的單位,它們間可用換底公式換算。

       變數的不確定越大,熵也就越大。

3.決策樹歸納演算法(ID3)

       1970-1980  J.Ross.Quinlan,ID3演算法

       選擇屬性判斷節點

       資訊獲取量(Information Gain):Gain(A)=  Info(D)- Infor_A(D)

       通過A來作為節點分類獲取了多少資訊  

  類似,Gain(income) = 0.029 ,Gain(student) = 0.151,Gain(credit_rating)=0.048

  所以,age資訊獲取量最大,選擇age作為第一個根節點。

4.ID3演算法總結 

  • 樹以代表訓練樣本的單個結點開始(步驟1)
  • 如果樣本都在同一個類,則該結點成為樹葉,並用該類標號(步驟2和3)
  • 否則,演算法使用成為資訊增益的基於熵的地量作為啟發資訊,選擇能夠最好地將樣本分類的屬性(步驟6)。該屬性成為該節點的“測試”或“判定”屬性(步驟7)。
  • 在演算法的該版本中,所有的屬性都是分類的,即離散值,連續屬性必須離散化。
  • 對測試屬性的每個已知的值,建立一個分枝,並據此劃分樣本(步驟8-10)。
  • 演算法使用同樣的過程,遞迴地形成每個劃分上的樣本判定樹,一旦一個屬性出現在一個結點上,就不必該結點的任何後代上考慮它(步驟13)。
  • 遞迴劃分步驟僅當下列條件之一成立停止:
  • (a)給定結點的所有樣本屬於同一類(步驟2和3)。
  • (b)沒有剩餘屬性可以用來進一步劃分樣本(步驟4)。在此情況下,使用多數表決(步驟5)。
  • 這涉及將給定的結點轉換成樹葉,並用樣本中的多數所在的類標記它。替換地,可以存放結點樣本的類分佈。
  • (c)分枝,test_attribute = a,沒有樣本(步驟11)。在這種情況下,以samples中的多數類建立一個樹葉(步驟12)

5.其他演算法

      C4.5 :Quinlan

      Classification and Regression Trees(CART)

      共同點:都是貪心演算法,自上而下

      區別:屬性選擇度量方法不同(C4.5->(gain ratio),CART->(gini index),ID3->(Information Gain))

      如何避免overfitting呢?—>①先剪枝,②後剪枝

6.決策樹的優點:

  • 決策樹易於理解和實現,人們在在學習過程中不需要使用者瞭解很多的背景知識,這同時是它的能夠直接體現資料的特點,只要通過解釋後都有能力去理解決策樹所表達的意義。
  • 對於決策樹,資料的準備往往是簡單或者是不必要的,而且能夠同時處理資料型和常規型屬性,在相對短的時間內能夠對大型資料來源做出可行且效果良好的結果。
  • 易於通過靜態測試來對模型進行評測,可以測定模型可信度;如果給定一個觀察的模型,那麼根據所產生的決策樹很容易推出相應的邏輯表示式。

7.決策樹的缺點:

  • 對連續性的欄位比較難預測。
  • 對有時間順序的資料,需要很多預處理的工作。
  • 當類別太多時,錯誤可能就會增加的比較快。
  • 一般的演算法分類的時候,只是根據一個欄位來分類。