決策樹學習總結

夜空中最亮的不咚發表於2018-04-02

機器學習的應用越來越廣泛,特別是在資料分析領域。本文是我學習決策樹演算法的一些總結。

機器學習簡介

機器學習 (Machine Learning) 是近 20 多年興起的一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、演算法複雜度理論等多門學科。簡而言之,機器學習是通過學習老知識(訓練樣本),得出自己的認知(模型),去預測未知的結果。

  • 學習方式
    • 監督式學習
      • 從給定的訓練資料集中學習出一個函式,當新的資料到來時,可以根據此函式預測結果。訓練資料集中的目標由人標註的。常見的演算法有迴歸分析和統計分類
    • 非監督式學習
      • 與監督式學習相比,訓練集沒有人為標註的結果,常見的演算法有聚類
    • 半監督式學習
      • 訓練集部分被標識,部分沒有被標識。常見的演算法有SVM
    • 強化學習
      • 輸入資料作為模型的反饋,模型對此作出調整。常見的演算法有時間差學習
  • 機器學習演算法分類
    • 決策樹演算法
      • 根據資料屬性,採用樹狀結構建立決策模型。常用來解決分類和迴歸問題。
      • 常見演算法:CART(Classification And Regression Tree),ID3,C4.5,隨機森林等
    • 迴歸演算法
      • 對連續值預測,如邏輯迴歸LR等
    • 分類演算法
      • 對離散值預測,事前已經知道分類,如k-近鄰演算法
    • 聚類演算法
      • 對離散值預測,事前對分類未知,如k-means演算法
    • 神經網路
      • 模擬生物神經網路,可以用來解決分類和迴歸問題
      • 感知器神經網路(Perceptron Neural Network) ,反向傳遞(Back Propagation)和深度學習(DL)
    • 整合演算法
      • 整合幾種學習模型進行學習,將最終預測結果進行彙總
      • Boosting、Bagging、AdaBoost、隨機森林 (Random Forest) 等

決策樹演算法

  • 初識決策樹
    決策樹演算法是藉助於樹的分支結構實現分類。以相親約會決策為例,下圖是建立好的決策樹模型,資料的屬性有4個:年齡、長相、收入、是否公務員,根據此模型,可以得到最終是見或者不見。
    這裡寫圖片描述
    這樣,我們對決策樹有個初步認識:

    • 葉子節點:存放決策結果
    • 非葉子節點:特徵屬性,及其對應輸出,按照輸出選擇分支
    • 決策過程:從根節點出發,根據資料的各個屬性,計算結果,選擇對應的輸出分支,直到到達葉子節點,得到結果
  • 構建決策樹
    通過上述例子,構建過程的關鍵步驟是選擇分裂屬性,即年齡、長相、收入、公務員這4個屬性的選擇先後次序。分裂屬性是在某個節點處按照某一特徵屬性的不同劃分構造不同的分支,其目標是讓各個分裂子集儘可能的“純”,即每個子集儘量都屬於同一分類項。分裂屬性分3種情況:

    • 屬性是離散值且不要求生成二叉樹
      • 屬性的每個值作為一個分支
    • 屬性是離散值且要求生成二叉樹
      • 按照“屬於”和“不屬於”分成2個分支
    • 屬性是連續值
      • 確定一個分裂點split_point,按照>split_point和<=split_point生成2個分支

    注意,決策樹使用自頂向下遞迴分治法,並採用不回溯的貪心策略分裂屬性的選擇演算法很多,這裡介紹3種常用的演算法:資訊增益(Information gain)、增益比率(gain ratio)、基尼指數(Gini index)

  • 資訊增益(Information Gain)
    基於香濃的資訊理論,資訊熵表示不確定度,均勻分佈時,不確定度最大,此時熵就最大。當選擇某個特徵對資料集進行分類時,資料集分類後的資訊熵會比分類前的小,其差值即為資訊增益。資訊增益可以衡量某個特徵對分類結果的影響大小,越大越好。
    • 典型演算法:ID3
    • 資料集D中,有m個類別,pi表示D中屬於類別i的概率,此資料集的資訊熵定義為:
      Info(D)=−∑_i=1mp_ilog_2(p_i)
    • 以屬性R作為分裂屬性,R有k個不同的取值,將資料D劃分成k組,按R分裂後的資料集的資訊熵為:
      Info_R(D)=∑_j=1k|D_j||D|×Info(D_j)
    • 資訊增益,即為劃分前後,資訊熵之差:
      Gain(R)=Info(D)−InfoR(D)
    • 在每層分裂時,選擇使得Gain(R)最大的屬性作為分裂屬性
    • 缺點:此公式偏向資料量多的屬性,如果樣本分佈不均,則會導致過擬合。假如上述例子中包括人名屬性,每個人名均不同,顯然以此屬性作為劃分,資訊增益最高,但是,很明顯,以此屬性作為劃分毫無意義
  • 資訊增益比率(Gain Ratio)
    針對上述方法問題,此方法引入分裂資訊
    SplitInfo_R(D)=−∑_j=1k|D_j|D×log_2(|D_j|D))

    • 典型演算法:C4.5
    • 資訊增益比率定義為:
      GainRatio(R)=Gain(R)SplitInfo_R(D)
    • 缺點:SplitInfoR(D)可能取值為0,此時無意義;當期趨於0時,GainRatio也不可信,改進措施是在分母加一個平滑,這裡加所有分裂資訊的平均值GainRatio(R)=Gain(R)SplitInfo(D)⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯+SplitInfoR(D)
  • 基尼指數(Gini index)
    另外一種資料不純度的度量方法,定義為:
    Gini(D)=1−∑_i=1mp_i2

    其中,m為資料集D中類別的個數,pi表示D中屬於類別i的概率,如果所有記錄都屬於同一個類中,則P1=1,Gini(D)=0。
    • 典型演算法:CART
    • 以屬性R作為分裂屬性,R有k個不同的取值,將資料D劃分成k組,按R分裂後的資料集的基尼指數為:
      Gini_R(D)=∑_i=1k|D_i||D|Gini(D_i)
    • 計算劃分前後基尼指數之差
      △Gini(R)=Gini(D)−Gini_R(D)
      計算Gini(R)增量最大的屬性作為最佳分裂屬性。


相關文章