機器學習算法——決策樹

  1. 基本概念
  • 決策樹是一種樹形結構,其中每個內部節點表示一個屬性上的測試,每個分支代表一個測試輸出,每個葉節點代表一種類別。
  • 三種結點:
    • 根結點:沒有入邊,但有零條或者多條出邊
    • 內部結點:恰有一條入邊和兩條或多條出邊
    • 葉結點:恰有一條入邊,但沒有出邊
  • 種類:
    • 分類樹:對離散變量做決策樹
    • 迴歸樹:對連續變量做決策樹
  1. 相關數學知識
  • 信息熵(entropy)

信息熵就是平均而言發生一個事件我們得到的信息量大小。所以數學上,信息熵其實是信息量的期望。(參見知乎:https://www.zhihu.com/question/22178202


理解:

熵:表示隨機變量的不確定性。

條件熵:在一個條件下,隨機變量的不確定性。

信息增益:熵- 條件熵,在一個條件下,信息不確定性減少的程度。

通俗地講,X(明天下雨)是一個隨機變量,X的熵可以算出來,Y(明天陰天)也是隨機變量,在陰天情況下下雨的信息熵我們如果也知道的話(此處需要知道其聯合概率分佈或是通過數據估計)即是條件熵。兩者相減就是信息增益!原來明天下雨例如信息熵是2,條件熵是0.01(因爲如果是陰天就下雨的概率很大,信息就少了),這樣相減後爲1.99,在獲得陰天這個信息後,下雨信息不確定性減少了1.99,是很多的,所以信息增益大。也就是說,陰天這個信息對下雨來說是很重要的!

所以在特徵選擇的時候常常用信息增益,如果IG(信息增益大)的話那麼這個特徵對於分類來說很關鍵,決策樹就是這樣來找特徵的。

(參見知乎:https://www.zhihu.com/question/22104055

  • 基尼指數:

決策樹中,使用基尼指數選擇劃分屬性。直觀來說,基尼指數反映了從數據集D中隨機抽取兩個樣本,其類別標記不一致的概率,因此,基尼指數越小,則數據集D的純度越高。於是,我們在候選屬性集合A中,選擇那個使得劃分後基尼指數最小的屬性作爲最優劃分屬性。




  1. 算法
  1. ID3
  • ID3算法就是對各個feature信息計算信息增益,然後選擇信息增益最大的feature作爲決策點將數據分成兩部分。


  • 算法不足:

使用 ID3算法構建決策樹時,若出現各屬性值取數分佈偏差大的情況類精度會打折扣;ID3算法本身並未給出處理連續數據的方;

ID3算法不能處理帶有缺失值的數據集,故在挖掘之前需要對中進行預;

ID3算法只有樹的生成 ,所以該算法產生的樹容易過擬合。

  1. C4.5
  • C4.5與ID3相比其實就是用信息增益比代替信息增益,因爲信息增益有一個缺點:信息增益選擇屬性時偏向選擇取值多的屬性,算法的整體過程其實與ID3差異不大:
  1. CART
  • CART(classification and regression tree)的算法整體過程和上面的差異不大,但是CART的決策是二叉樹的,每一個決策只能是“是”和“否”,換句話說,即使一個feature有多個可能取值,也只選擇其中一個而把數據分類兩部分而不是多個,這裏我們主要講一下分類樹,它用到的是基尼指數:


  1. python實現
    • 其中比較重要的參數:
      • criterion :規定了該決策樹所採用的的最佳分割屬性的判決方法,有兩種:“gini”,“entropy”
      • max_depth :限定了決策樹的最大深度,對於防止過擬合非常有用。
      • min_samples_leaf :限定了葉子節點包含的最小樣本數,這個屬性對於防止數據碎片問題很有作用。
    • 模塊中一些重要的屬性方法:
      • n_classes_ :決策樹中的類數量。
      • classes_ :返回決策樹中的所有種類標籤。
      • feature_importances_ feature的重要性,值越大那麼越重要。
      • fit(X, y, sample_mask=None, X_argsorted=None, check_input=True, sample_weight=None)

將數據集x,和標籤集y送入分類器進行訓練,這裏要注意一個參數是:sample_weright,它和樣本的數量一樣長,所攜帶的是每個樣本的權重。

  • get_params(deep=True) :得到決策樹的各個參數。
  • set_params(**params) :調整決策樹的各個參數。
  • predict(X) :送入樣本X,得到決策樹的預測。可以同時送入多個樣本。
  • transform(X, threshold=None) :返回X的較重要的一些feature,相當於裁剪數據。
  • score(X, y, sample_weight=None) :返回在數據集X,y上的測試分數,正確率。
  • 使用建議:
    • 當我們數據中的feature較多時,一定要有足夠的數據量來支撐我們的算法,不然的話很容易overfitting
    • PCA是一種避免高維數據overfitting的辦法。
    •  從一棵較小的樹開始探索,用export方法打印出來看看。
    • 善用max_depth參數,緩慢的增加並測試模型,找出最好的那個depth
    •  善用min_samples_splitmin_samples_leaf參數來控制葉子節點的樣本數量,防止overfitting
    • 平衡訓練數據中的各個種類的數據,防止一個種類的數據dominate

 

 

發佈了52 篇原創文章 · 獲贊 104 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章