2.1.决策树和随机森林
2.1.決策樹和隨機森林
決策樹(Decision Tree)是在已知各種情況發生概率的基礎上,通過構成決策樹來求取凈現值的期望值大于等于零的概率,評價項目風險,判斷其可行性的決策分析方法,是直觀運用概率分析的一種圖解法。由于這種決策分支畫成圖形很像一棵樹的枝干,故稱決策樹。決策樹是一種基本的分類和回歸方法,學習通常包含三個步驟:特征選擇、決策樹的生成和決策樹的剪枝。在機器學習中,決策樹是一個預測模型,他代表的是對象屬性與對象值之間的一種映射關系。分類樹(決策樹)是一種十分常用的分類方法。數據挖掘中決策樹是一種經常要用到的技術,可以用于分析數據,同樣也可以用來做預測。
一個簡單的決策樹分類模型:紅色框出的是特征。
在機器學習中,隨機森林是一個包含多個決策樹的分類器,并且其輸出的類別是由個別樹輸出的類別的眾數而定。Leo Breiman和Adele Cutler發展出推論出隨機森林的算法。隨機森林在過去幾年一直是新興的機器學習技術。它是基于非線性的決策樹模型,通常能夠提供準確的結果。然而,隨機森林大多是黑盒子,經常難以解讀和充分理解。
2.1.1.預備知識
2.1.1.1.條件熵
在信息論中,條件熵描述了在已知第二個隨機變量X的前提下,隨機變量Y的信息熵還剩多少。基于X條件的Y的信息熵,用H(Y|X)表示。
如果H(Y|X=x)為變數Y在變數X取特定值x條件下的熵,那么H(Y|X)就是H(Y|X=x)在X取遍所有可能的x后取平均的結果。
我們可以借助上圖來幫助理解熵和條件熵:紅色的整個圓表示變量X的熵,藍色的整個圓表示變量Y的熵。
首先,熵可以理解為事件的不確定性,聯系到上面的X, Y就是H(X)表示的是未知的不確定的X(也即紅色的圓),而藍色的則表示未知不確定的Y,而條件熵表示的是在知道某一事件后對另一事件未知性的減少(前提是這兩個事件有交集)。放在上面則是知道確定了X后Y的不確定性還剩多少,也就是右側藍色的圓減去兩個圓交叉的部分后剩余的,這就是條件熵H(Y|X)。
現在理解了條件熵,那么兩事件X, Y中間的交集互信息該如何理解呢?既然條件熵是知曉了X后Y未知性還剩余的多少,那么互信息就可以理解為知曉了事件X后Y事件有多少也是可以確定的,也即X對Y造成的干擾部分,即為互信息I(X; Y)。
而聯合熵就比較好理解了,就是事件X未知性和事件Y的未知性之和減去他們的交集部分。
首先需要知道的是熵的公式:
對上式做簡單的說明:
(1)P(xi)表示事件xi的概率;
(2)-P(xi)logP(xi)表示事件xi的熵;
2.1.2.決策樹生成算法
決策樹分類從根節點開始,對實例的某一特征進行測試,根據測試結果將實例分配到其子節點。每一個子節點對應著該特征的一個取值。如此遞歸地對實例進行測試并分配,直至達到葉節點,最后將實例分配到葉節點的類中。
決策樹學習的算法通常是一個遞歸地選擇最優特征,并根據該特征對訓練數據進行劃分。如果利用一個特征進行分類的結果與隨機分類的結果沒有很大差別,則稱這個特征是沒有分類能力的。通常特征選擇的準則是信息增益或信息增益比,特征選擇的常用算法有ID3,C4.5,CART。
2.1.3.信息增益
信息增益表示得知特征A的信息而使得數據X的信息的不確定性的程度。
信息增益定義:特征A對訓練數據集D的信息增益g(D, A)定義為集合D的經驗熵H(D)與給定特征A的條件下D的經驗條件熵H(D|A)之差,即:
(信息增益,也叫作互信息)
根據信息增益選擇特征的方法是:對于給定數據集D,計算其每個特征的信息增益,并比較他們的大小,選擇信息增益最大的特征。使用信息增益選擇特征的算法稱為C3算法。
基本記號:
信息增益的計算方法:
2.1.3.1.信息增益比
信息增益值的大小是相對于訓練數據集而言的,并沒有絕對意義。在分類為題困難時,也就是說在訓練數據集的經驗熵大的時候,信息增益值會偏大。反之,信息增益值會偏小。因此,使用信息增益比可以對這一問題進行校正,這是另一種特征選擇算法,也即C4.5算法。
2.1.4.基尼系數
基尼指數是CART分類樹用來選擇最優特征的算法,同時決定了該特征的最優二值切分點。
對于給定的樣本集合D,其基尼指數為:
一個特征的信息增益/基尼系數越大,表明特征對樣本的熵減少的能力更強,這個特征使得數據由不確定性變成確定性的能力越強。
2.1.5.決策樹的剪枝
決策樹生成算法產生的決策樹對于訓練數據的分類往往很準確,但對于未知數據的分類卻沒有這么準確,即容易出現過擬合情況。解決的辦法便是考慮樹的復雜度,對已生成的樹進行剪枝簡化。
決策樹的剪枝往往通過極小化決策樹整體的損失函數來實現。
其中經驗熵為:
在損失函數式子中,等式右端第一項記作:
最后,損失函數表示為:
2.1.6.Bootstraping
2.2.課程資料
決策樹(decision tree)是一種基本的分類與回歸方法,本文主要討論用于分類的決策樹。決策樹模型呈樹形結構,在分類問題中,表示基于特征對實例進行分類的過程。它可以認為是if-then規則的集合,也可以認為是定義在特征空間與類空間上的條件概率分布,其主要優點是模型具有可讀性,分類速度快。決策樹學習通常包括三個步驟:特征選擇,決策樹的生成和決策樹的修剪。而隨機森林則是由多個決策樹所構成的一種分類器,更準確的說,隨機森林是由多個弱分類器組合形成的強分類器。
樹模型
- 決策樹:從根節點開始一步步走到葉子節點(決策)。
- 所有的數據最終都會落到葉子節點,既可以做分類也可以做回歸。
樹的組成 - 根節點:第一個選擇點
- 非葉子節點與分支:中間過程。
- 葉子節點:最終的決策結果
決策樹的訓練與測試 - 訓練階段:從給定的訓練集構造出來一棵樹(從根節點開始選擇特征,如何進行特征切分)
- 測試階段:根據構造出來的樹模型從上到下去走一遍就好了。
- 一旦構造好了決策樹,那么分類或者預測任務就很簡單了,只需要走一遍就可以了,那么難點就在于如何構造出來一顆樹,這就沒那么容易了,需要考慮的問題還有很多的!
如何切分特征(選擇節點)
- 問題:根節點的選擇該用哪個特征呢?接下來呢?如何切分呢?
- 想象一下:我們的目標應該是根節點就像是老大似的能更好的切分數據(分類的效果更好),根節點下面的節點自然就是二當家了。
- 目標:通過一種衡量標準,來計算通過不同特征進行分支選擇后的分類情況,找出最好的那個當成根節點,以此類推。
衡量標準-熵
- 熵:熵是表示隨機變量不確定性的度量
(解釋:說白了就是物體內部的混亂程度,比如雜貨市場里什么都有那肯定混亂呀,專賣店里面只賣一個牌子的那就穩定多了) - 一個例子:
A集合:[1,1,1,1,1,1,1,1,2,2]
B集合:[1,2,3,4,5,6,7,8.9,1]
顯然A集合的熵值要低,因為A里面只有兩種類別,相對穩定一些,而B中類別太多了,熵值就會大很多(在分類任務中我們希望通過節點分支后數據類別的熵值大還是小呢?)
衡量標準-熵
-
熵:不確定性越大,得到的熵值也就越大。
當p=0或p=1時,H§=0,隨機變量完全沒有不確定性。
當p=0.5時,H§=1,此時隨機變量的不確定性最大。 -
如何決策一個節點的選擇呢?
信息增益:表示特征X使得類Y的不確定性減少的程度。(分類后的專一性,希望分類后的結果是同類在一起)
決策樹構造實例 -
數據:14天打球情況
-
特征:4中環境變換
-
目標:構造決策樹
決策樹構造實例
劃分方式:4種
問題:誰當根節點呢?
依據:信息增益
決策樹構造實例
- 在歷史數據中(14天)有9天打球,5天不打球,所以此時的熵應為:
- 4個特征逐一分析,先從outlook特征開始:
Outlook = sunny時,熵值為0.971
Outlook = overcast時,熵值為0
Outlook = rainy時,熵值為0.971
決策樹構造實例
-
根據數據統計,outlook取值分別為sunny,overcast,rainy的概率分別為:
5/14, 4/14, 5/14 -
熵值計算:5/14 * 0.971 + 4/14 * 0 + 5/14 * 0.971 = 0.693
(gain(temperature)=0.029 gain(humidity)=0.152 gain(windy)=0.048) -
信息增益:系統的熵值從原始的0.940下降到了0.693,增益為0.247
-
同樣的方式可以計算出其他特征的信息增益,那么我們選擇最大的那個就可以啦,相當于是遍歷了一遍特征,找出來了大當家,然后再其余的中繼續通過信息增益找二當家!
決策樹算法
- ID3: 信息增益(有什么問題呢?)
- C4.5: 信息增益率(解決ID3問題,考慮自身熵)
- CART: 使用GINI系數來當做衡量標準。
- GINI系數:
(和熵的衡量標準類似,計算方式不相同)
連續值怎么辦?
選取(連續值的)哪個分界點?
- 貪婪算法!
排序
60 70 75 85 90 95 100 120 125 220
若進行”二分”,則可能有9個分界點(上面數據中的9個空格部分)。
- 實際上,這就是”離散化”過程
決策樹剪枝策略
- 為什么要剪枝:決策樹過擬合風險很大,理論上可以完全分得開數據。
(想象一下,如果樹足夠龐大,每個葉子節點不就一個數據了嘛) - 剪枝策略:預剪枝,后剪枝
- 預剪枝:邊建立決策樹邊進行剪枝的操作(更實用)
- 后剪枝:當建立完決策樹后來進行剪枝操作。
決策樹剪枝策略
- 預剪枝:限制深度,葉子節點個數,葉子節點樣本數,信息增益量等。
- 后剪枝:通過一定的衡量標準
(葉子節點越多,損失越大)
Ensemble learning
- 目標:讓機器學習效果更好,單個不行,群毆走起
- Bagging: 訓練多個分類器取平均
- Boosting: 從弱學習器開始加強,通過加權來進行訓練。
(加入一棵樹,要比原來強) - Stacking: 聚合多個分類或回歸模型(可以分階段來做)
Bagging模型
?全稱:bootstrap aggregation(說白了就是并行訓練一堆分類器)
?最典型的代表就是隨機深林啦
?隨機:數據采樣隨機,特征選擇隨機
?森林:很多決策樹并行放在一起
隨機森林
- 構造樹模型:
- 由于二重隨機性,使得每個樹基本上都不會一樣,最終的結果也會不一樣。
Bagging模型
- 樹模型:
- 之所以要進行隨機,是要保證泛化能力,如果樹都一樣,那就沒意義了!
隨機森林優勢
- 它能夠處理很高維度(feature很多)的數據,并且不用做特征選擇
- 在訓練完后,它能夠給出哪些feature比較重要。
- 容易做成并行化方法,速度比較快。
- 可以進行可視化展示,便于分析。
Bagging模型 - KNN模型:
- KNN就不太適合,因為很難去隨機讓泛化能力變強!
Bagging模型
- 樹模型:
- 理論上越多的樹效果會越好,但實際上基本超過一定數量就差不多上下浮動了。
Boosting算法
- 典型代表:AdaBoost, Xgboost
- Adaboost會根據前一次的分類效果調整數據權重。
- 解釋:如果某一個數據在這次分錯了,那么在下一次我就會給它更大的權重。
- 最終的結果:每個分類器根據自身的準確性來確定各自的權重,再合體。
Adaboost工作流程
- 每一次切一刀。
- 最終合在一起。
- 弱分類器這就升級了。
Stacking模型 - 堆疊:很暴力,拿來一堆直接上(各種分類器都來了)
- 可以堆疊各種各樣的分類器(KNN,SVM,RF等等)
- 分階段:第一階段得出各自結果,第二階段再用前一階段結果訓練。
- 為了刷結果,不擇手段。
Stacking模型
- 堆疊在一起確實能使得準確率提升,但是速度是問題
集成算法是競賽與論文神器,當我們更關注與結果時不妨來實時。
總結
以上是生活随笔為你收集整理的2.1.决策树和随机森林的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有什么饮料多年都没有涨价?
- 下一篇: 3.TF-IDF算法介绍、应用、NLTK