決策樹的理解
決策樹是一種機器學習的方法。決策樹的生成算法有ID3, C4.5和CART等。決策樹是一種樹形結構,其中每個內部節點表示一個屬性上的判斷,每個分支代表一個判斷結果的輸出,最后每個葉節點代表一種分類結果。
決策樹是一種十分常用的分類方法,需要監管學習(有教師的Supervised Learning),監管學習就是給出一堆樣本,每個樣本都有一組屬性和一個分類結果,也就是分類結果已知,那么通過學習這些樣本得到一個決策樹,這個決策樹能夠對新的數據給出正確的分類。這里通過一個簡單的例子來說明決策樹的構成思路:
給出如下的一組數據,一共有十個樣本(學生數量),每個樣本有分數,出勤率,回答問題次數,作業提交率四個屬性,最后判斷這些學生是否是好學生。最后一列給出了人工分類結果。
然后用這一組附帶分類結果的樣本可以訓練出多種多樣的決策樹,這里為了簡化過程,我們假設決策樹為二叉樹,且類似於下圖:

通過學習上表的數據,可以設置A,B,C,D,E的具體值,而A,B,C,D,E則稱為閾值。當然也可以有和上圖完全不同的樹形,比如下圖這種的:

所以決策樹的生成主要分以下兩步,這兩步通常通過學習已經知道分類結果的樣本來實現。
1. 節點的分裂:一般當一個節點所代表的屬性無法給出判斷時,則選擇將這一節點分成2個
子節點(如不是二叉樹的情況會分成n個子節點)
2. 閾值的確定:選擇適當的閾值使得分類錯誤率最小 (Training Error)。
比較常用的決策樹有ID3,C4.5和CART(Classification And Regression Tree),CART的分類效果一般優於其他決策樹。下面介紹具體步驟。
ID3:
由增熵(Entropy)原理來決定那個做父節點,那個節點需要分裂。對於一組數據,熵越小說明分類結果越好。熵定義如下:
Entropy=- sum [p(x_i) * log2(P(x_i) ]
其中p(x_i) 為x_i出現的概率。假如是2分類問題,當A類和B類各占50%的時候,
Entropy = - (0.5*log_2( 0.5)+0.5*log_2( 0.5))= 1
當只有A類,或只有B類的時候,
Entropy= - (1*log_2( 1)+0)=0
所以當Entropy最大為1的時候,是分類效果最差的狀態,當它最小為0的時候,是完全分類的狀態。因為熵等於零是理想狀態,一般實際情況下,熵介於0和1之間。
熵的不斷最小化,實際上就是提高分類正確率的過程。
比如上表中的4個屬性:單一地通過以下語句分類:
1. 分數小於70為【不是好學生】:分錯1個
2. 出勤率大於70為【好學生】:分錯3個
3. 問題回答次數大於9為【好學生】:分錯2個
4. 作業提交率大於80%為【好學生】:分錯2個
最后發現 分數小於70為【不是好學生】這條分錯最少,也就是熵最小,所以應該選擇這條為父節點進行樹的生成,當然分數也可以選擇大於71,大於72等等,出勤率也可以選擇小於60,65等等,總之會有很多類似上述1~4的條件,最后選擇分類錯最少即熵最小的那個條件。而當分裂父節點時道理也一樣,分裂有很多選擇,針對每一個選擇,與分裂前的分類錯誤率比較,留下那個提高最大的選擇,即熵減最大的選擇。
C4.5:
通過對ID3的學習,可以知道ID3存在一個問題,那就是越細小的分割分類錯誤率越小,所以ID3會越分越細,比如以第一個屬性為例:設閾值小於70可將樣本分為2組,但是分錯了1個。如果設閾值小於70,再加上閾值等於95,那么分錯率降到了0,但是這種分割顯然只對訓練數據有用,對於新的數據沒有意義,這就是所說的過度學習(Overfitting)。
分割太細了,訓練數據的分類可以達到0錯誤率,但是因為新的數據和訓練數據不同,所以面對新的數據分錯率反倒上升了。決策樹是通過分析訓練數據,得到數據的統計信息,而不是專為訓練數據量身定做。
就比如給男人做衣服,叫來10個人做參考,做出一件10個人都能穿的衣服,然后叫來另外5個和前面10個人身高差不多的,這件衣服也能穿。但是當你為10個人每人做一件正好合身的衣服,那么這10件衣服除了那個量身定做的人,別人都穿不了。
所以為了避免分割太細,c4.5對ID3進行了改進,C4.5中,優化項要除以分割太細的代價,這個比值叫做信息增益率,顯然分割太細分母增加,信息增益率會降低。除此之外,其他的原理和ID3相同。
CART:
分類回歸樹
CART是一個二叉樹,也是回歸樹,同時也是分類樹,CART的構成簡單明了。
CART只能將一個父節點分為2個子節點。CART用GINI指數來決定如何分裂:
GINI指數:總體內包含的類別越雜亂,GINI指數就越大(跟熵的概念很相似)。
a. 比如出勤率大於70%這個條件將訓練數據分成兩組:大於70%里面有兩類:【好學生】和【不是好學生】,而小於等於70%里也有兩類:【好學生】和【不是好學生】。
b. 如果用分數小於70分來分:則小於70分只有【不是好學生】一類,而大於等於70分有【好學生】和【不是好學生】兩類。
比較a和b,發現b的凌亂程度比a要小,即GINI指數b比a小,所以選擇b的方案。以此為例,將所有條件列出來,選擇GINI指數最小的方案,這個和熵的概念很類似。
CART還是一個回歸樹,回歸解析用來決定分布是否終止。理想地說每一個葉節點里都只有一個類別時分類應該停止,但是很多數據並不容易完全划分,或者完全划分需要很多次分裂,必然造成很長的運行時間,所以CART可以對每個葉節點里的數據分析其均值方差,當方差小於一定值可以終止分裂,以換取計算成本的降低。
CART和ID3一樣,存在偏向細小分割,即過度學習(過度擬合的問題),為了解決這一問題,對特別長的樹進行剪枝處理,直接剪掉。
以上的決策樹訓練的時候,一般會采取Cross-Validation法:比如一共有10組數據:
第一次. 1到9做訓練數據, 10做測試數據
第二次. 2到10做訓練數據,1做測試數據
第三次. 1,3到10做訓練數據,2做測試數據,以此類推
做10次,然后大平均錯誤率。這樣稱為 10 folds Cross-Validation。
比如 3 folds Cross-Validation 指的是數據分3份,2份做訓練,1份做測試。
決策樹的優缺點
優點
1. 決策樹易於理解和解釋,可以可視化分析,容易提取出規則;
2. 可以同時處理標稱型和數值型數據;
3. 比較適合處理有缺失屬性的樣本;
4. 能夠處理不相關的特征;
5. 測試數據集時,運行速度比較快;
6. 在相對短的時間內能夠對大型數據源做出可行且效果良好的結果。
缺點
1. 容易發生過擬合(隨機森林可以很大程度上減少過擬合);
2. 容易忽略數據集中屬性的相互關聯;
3. 對於那些各類別樣本數量不一致的數據,在決策樹中,進行屬性划分時,不同的判定准則會帶來不同的屬性選擇傾向;信息增益准則對可取數目較多的屬性有所偏好(典型代表ID3算法),而增益率准則(CART)則對可取數目較少的屬性有所偏好,但CART進行屬性划分時候不再簡單地直接利用增益率盡心划分,而是采用一種啟發式規則)(只要是使用了信息增益,都有這個缺點,如RF)。
4. ID3算法計算信息增益時結果偏向數值比較多的特征。
改進措施
1. 對決策樹進行剪枝。可以采用交叉驗證法和加入正則化的方法;
2. 使用基於決策樹的combination算法,如bagging算法,randomforest算法,可以解決過擬合的問題。
應用領域
企業管理實踐,企業投資決策,由於決策樹很好的分析能力,在用戶分群、用戶流失等領域應用較多。
1 就決策樹的這個算法而言,在非常多的行業都會有應用,是不是使用決策樹進行挖掘分析個人認為還是要看具體的應用分析目標,廣義點說任何一個行業都可能出現適合決策樹的應用分析目標,比如:在用決策樹進行用戶分級評估的時候,凡是積累了一定量的客戶資源和數據,涉及對自己行業客戶進行深入分析的企業和分析者都可能具備使用決策樹的條件。
2 一般來說決策樹的應用用往往都是和某一應用分析目標和場景相關的,比如:金融行業可以用決策樹做貸款風險評估,保險行業可以用決策樹做險種推廣預測,醫療行業可以用決策樹生成輔助診斷處置模型等等,當一個決策樹的應用分析目標和場景確定,那該應用分析目標和場景所處的行業也就自然成為了決策樹的應用領域。