决策树基础梳理
1.信息論基礎
1.1.熵
熵是信息的關鍵度量,通常指一條信息中需要傳輸或者存儲一個信號的平均比特數。熵衡量了預測隨機變量的不確定度,不確定性越大熵越大。
針對隨機變量XX,其信息熵的定義如下:
信息熵是信源編碼中,壓縮率的下限。當我們使用少于信息熵的信息量做編碼,那么一定有信息的損失。
1.2.聯合熵
聯合熵是一集變量之間不確定的衡量手段。
1.3.條件熵
條件熵描述變量Y在變量X確定的情況下,變量Y的熵還剩多少。
聯合熵和條件熵的關系是:
1.4.信息增益
信息增益在決策樹算法中是用來選擇特征的指標,信息增益越大,則這個特征的選擇性越好,在概率中定義為:待分類的集合的熵和選定某個特征的條件熵之差(這里只的是經驗熵或經驗條件熵,由于真正的熵并不知道,是根據樣本計算出來的),公式如下:
1.5.基尼不純度
基尼不純度:將來自集合的某種結果隨機應用于某一數據項的預期誤差率。?
- (1)顯然基尼不純度越小,純度越高,集合的有序程度越高,分類的效果越好;
- (2)基尼不純度為 0 時,表示集合類別一致;
- (3)基尼不純度最高(純度最低)時,
?
?
?
?
?
2.ID3算法
2.1原理
ID3算法的核心是在決策樹各個結點上應用信息增益準則選擇特征,遞歸地構建決策樹。具體方法是:從根結點開始,對結點計算所有可能的特征的信息增益,選擇信息增益最大的特征作為結點的特征,由該特征的不同取值建立子結點;再對子結點遞歸地調用以上方法,構建決策樹;直到所有特征的信息增益均很小或沒有特征可以選擇為止。最后得到一個決策樹,ID3相當于用極大似然法進行概率模型的選擇
2.2過程
1.決策樹開始時,作為一個單個節點(根節點)包含所有訓練樣本集
2.若一個節點的樣本均為同一類別,則該節點就成為葉節點并標記為該類別。否則算法將采用信息熵(成為信息增益)作為啟發指示來幫助選擇合適的(分支)屬性,以便將樣本集劃分為若干自己。選擇能夠最好地講樣本分類的屬性。該屬性成為該節點的“測試”或“判定”屬性。在算法中,所有屬性均為離散值,若有取連續值的屬性,必須首先將其離散化。
3.對測試屬性的每個已知的值,創建一個分支,并據此劃分樣本
4.算法使用同樣的過程,遞歸的形成每個劃分上的樣本判定樹。一旦一個屬性出現在一個節點上,就不必考慮該節點的任何后代
遞歸劃分步驟僅當下列條件之一成立時立即停止:
1.給定節點的所有樣本屬于同一類
2.沒有剩余屬性可以用來進一步劃分樣本。在此情況下,使用多數表決,講給定的節點轉換成樹葉,并用樣本中的多數所在的類標記它。另外,可以存放節點樣本的類分布。
3.分支test_attribute=a(i),沒有樣本。在這種情況下,以samples中的多數類創建一個樹葉。
2.3優缺點
優點:
理論清晰,算法簡單,很有實用價值的示例學習算法;
計算時間是例子個數、特征屬性個數、節點個數之積的線性函數,總預測準確率較令人滿意
缺點:
存在偏向問題,各特征屬性的取值個數會影響互信息量的大小;
特征屬性間的相關性強調不夠,是單變元算法;
對噪聲較為敏感,訓練數據的輕微錯誤會導致結果的不同;魯棒性
結果隨訓練集記錄個數的改變而不同,不便于進行漸進學習
3.C4.5
3.1原理
C4.5算法是用于生成決策樹的一種經典算法,是ID3算法的一種延伸和優化。
C4.5算法采用PEP(Pessimistic Error Pruning)剪枝法
C4.5算法通過信息增益率選擇分裂屬性。
?? 屬性A的“分裂信息”(split information):、
?
其中,訓練數據集S通過屬性A的屬性值劃分為m個子數據集,|Sj||Sj|表示第j個子數據集中樣本數量,|S||S|表示劃分之前數據集中樣本總數量。
?? 通過屬性A分裂之后樣本集的信息增益:
?
?? 通過屬性A分裂之后樣本集的信息增益率:
?
??通過C4.5算法構造決策樹時,信息增益率最大的屬性即為當前節點的分裂屬性,隨著遞歸計算,被計算的屬性的信息增益率會變得越來越小,到后期則選擇相對比較大的信息增益率的屬性作為分裂屬性。
3.2過程
?
3.3優缺點
優點:
(1)通過信息增益率選擇分裂屬性,克服了ID3算法中通過信息增益傾向于選擇擁有多個屬性值的屬性作為分裂屬性的不足;
(2)能夠處理離散型和連續型的屬性類型,即將連續型的屬性進行離散化處理;
(3)構造決策樹之后進行剪枝操作;
(4)能夠處理具有缺失屬性值的訓練數據。
缺點:
(1)算法的計算效率較低,特別是針對含有連續屬性值的訓練樣本時表現的尤為突出。
(2)算法在選擇分裂屬性時沒有考慮到條件屬性間的相關性,只計算數據集中每一個條件屬性與決策屬性之間的期望信息,有可能影響到屬性選擇的正確性。
4.CART分類樹
4.1原理
Classification And Regression Tree(CART)是決策樹的一種,并且是非常重要的決策樹,屬于Top Ten Machine Learning Algorithm。顧名思義,CART算法既可以用于創建分類樹(Classification Tree),也可以用于創建回歸樹(Regression Tree)、模型樹(Model Tree),兩者在建樹的過程稍有差異。前文“機器學習經典算法詳解及Python實現–決策樹(Decision Tree)”詳細介紹了分類決策樹原理以及ID3、C4.5算法,本文在該文的基礎上詳述CART算法在決策樹分類以及樹回歸中的應用。?
創建分類樹遞歸過程中,CART每次都選擇當前數據集中具有最小Gini信息增益的特征作為結點劃分決策樹。ID3算法和C4.5算法雖然在對訓練樣本集的學習中可以盡可能多地挖掘信息,但其生成的決策樹分支、規模較大,CART算法的二分法可以簡化決策樹的規模,提高生成決策樹的效率。對于連續特征,CART也是采取和C4.5同樣的方法處理。為了避免過擬合(Overfitting),CART決策樹需要剪枝。預測過程當然也就十分簡單,根據產生的決策樹模型,延伸匹配特征值到最后的葉子節點即得到預測的類別。?
創建回歸樹時,觀察值取值是連續的、沒有分類標簽,只有根據觀察數據得出的值來創建一個預測的規則。在這種情況下,Classification Tree的最優劃分規則就無能為力,CART則使用最小剩余方差(Squared Residuals Minimization)來決定Regression Tree的最優劃分,該劃分準則是期望劃分之后的子樹誤差方差最小。創建模型樹,每個葉子節點則是一個機器學習模型,如線性回歸模型
CART算法的重要基礎包含以下三個方面:?
(1)二分(Binary Split):在每次判斷過程中,都是對觀察變量進行二分。?
CART算法采用一種二分遞歸分割的技術,算法總是將當前樣本集分割為兩個子樣本集,使得生成的決策樹的每個非葉結點都只有兩個分枝。因此CART算法生成的決策樹是結構簡潔的二叉樹。因此CART算法適用于樣本特征的取值為是或非的場景,對于連續特征的處理則與C4.5算法相似。?
(2)單變量分割(Split Based on One Variable):每次最優劃分都是針對單個變量。?
(3)剪枝策略:CART算法的關鍵點,也是整個Tree-Based算法的關鍵步驟。?
剪枝過程特別重要,所以在最優決策樹生成過程中占有重要地位。有研究表明,剪枝過程的重要性要比樹生成過程更為重要,對于不同的劃分標準生成的最大樹(Maximum Tree),在剪枝之后都能夠保留最重要的屬性劃分,差別不大。反而是剪枝方法對于最優樹的生成更為關鍵。
4.2過程
CART假設決策樹是二叉樹,內部結點特征的取值為“是”和“否”,左分支是取值為“是”的分支,右分支是取值為“否”的分支。這樣的決策樹等價于遞歸地二分每個特征,將輸入空間即特征空間劃分為有限個單元,并在這些單元上確定預測的概率分布,也就是在輸入給定的條件下輸出的條件概率分布。
CART算法由以下兩步組成:
1.決策樹生成:基于訓練數據集生成決策樹,生成的決策樹要盡量大;?決策樹剪枝:用驗證數據集對已生成的樹進行剪枝并選擇最優子樹,這時損失函數最小作為剪枝的標準。
2.CART決策樹的生成就是遞歸地構建二叉決策樹的過程。CART決策樹既可以用于分類也可以用于回歸。本文我們僅討論用于分類的CART。對分類樹而言,CART用Gini系數最小化準則來進行特征選擇,生成二叉樹。 CART生成算法如下:
輸入:訓練數據集D,停止計算的條件:?
輸出:CART決策樹。
根據訓練數據集,從根結點開始,遞歸地對每個結點進行以下操作,構建二叉決策樹:
設結點的訓練數據集為D,計算現有特征對該數據集的Gini系數。此時,對每一個特征A,對其可能取的每個值a,根據樣本點對A=a的測試為“是”或 “否”將D分割成D1和D2兩部分,計算A=a時的Gini系數。?
在所有可能的特征A以及它們所有可能的切分點a中,選擇Gini系數最小的特征及其對應的切分點作為最優特征與最優切分點。依最優特征與最優切分點,從現結點生成兩個子結點,將訓練數據集依特征分配到兩個子結點中去。?
對兩個子結點遞歸地調用步驟l~2,直至滿足停止條件。?
生成CART決策樹。?
算法停止計算的條件是結點中的樣本個數小于預定閾值,或樣本集的Gini系數小于預定閾值(樣本基本屬于同一類),或者沒有更多特征。
五.連續特征和離散特征處理
?
六.剪枝 模型評估
由于決策樹的建立完全是依賴于訓練樣本,因此該決策樹對訓練樣本能夠產生完美的擬合效果。但這樣的決策樹對于測試樣本來說過于龐大而復雜,可能產生較高的分類錯誤率。這種現象就稱為過擬合。因此需要將復雜的決策樹進行簡化,即去掉一些節點解決過擬合問題,這個過程稱為剪枝。
??剪枝方法分為預剪枝和后剪枝兩大類。預剪枝是在構建決策樹的過程中,提前終止決策樹的生長,從而避免過多的節點產生。預剪枝方法雖然簡單但實用性不強,因為很難精確的判斷何時終止樹的生長。后剪枝是在決策樹構建完成之后,對那些置信度不達標的節點子樹用葉子結點代替,該葉子結點的類標號用該節點子樹中頻率最高的類標記。后剪枝方法又分為兩種,一類是把訓練數據集分成樹的生長集和剪枝集;另一類算法則是使用同一數據集進行決策樹生長和剪枝。常見的后剪枝方法有CCP(Cost Complexity Pruning)、REP(Reduced Error Pruning)、PEP(Pessimistic Error Pruning)、MEP(Minimum Error Pruning)。
PEP(Pessimistic Error Pruning)剪枝法??
PEP剪枝法由Quinlan提出,是一種自上而下的剪枝法,根據剪枝前后的錯誤率來判定是否進行子樹的修剪,因此不需要單獨的剪枝數據集。
對于一個葉子節點,它覆蓋了n個樣本,其中有e個錯誤,那么該葉子節點的錯誤率為其中0.5為懲罰因子(懲罰因子一般取值為0.5)。?
?? 對于一棵子樹,它有L個葉子節點,那么該子樹的誤判率為:
其中,ei表示子樹第i個葉子節點錯誤分類的樣本數量,ni表示表示子樹第i個葉子節點中樣本的總數量。
?? 假設一棵子樹錯誤分類一個樣本取值為1,正確分類一個樣本取值為0,那么子樹的誤判次數可以認為是一個伯努利分布,因此可以得到該子樹誤判次數的均值和標準差:
?
?? 把子樹替換成葉子節點后,該葉子節點的誤判率為:
?
?
其中,
?
?
?? 同時,該葉子結點的誤判次數也是一個伯努利分布,因此該葉子節點誤判次數的均值為:
?? 剪枝的條件為:
?
滿足剪枝條件時,則將所得葉子節點替換該子樹,即為剪枝操作。
CCP(代價復雜度)剪枝法
代價復雜度選擇節點表面誤差率增益值最小的非葉子節點,刪除該非葉子節點的左右子節點,若有多個非葉子節點的表面誤差率增益值相同小,則選擇非葉子節點中子節點數最多的非葉子節點進行剪枝。
可描述如下:
令決策樹的非葉子節點為。
a)計算所有非葉子節點的表面誤差率增益值?
b)選擇表面誤差率增益值最小的非葉子節點(若多個非葉子節點具有相同小的表面誤差率增益值,選擇節點數最多的非葉子節點)。
c)對進行剪枝
表面誤差率增益值的計算公式:
?
其中:
表示葉子節點的誤差代價,?,?為節點的錯誤率,?為節點數據量的占比;
表示子樹的誤差代價,?,?為子節點i的錯誤率,?表示節點i的數據節點占比;
表示子樹節點個數。
算例:
下圖是其中一顆子樹,設決策樹的總數據量為40。
該子樹的表面誤差率增益值可以計算如下:
?
求出該子樹的表面錯誤覆蓋率為 ,只要求出其他子樹的表面誤差率增益值就可以對決策樹進行剪枝。
七.sklearn參數詳解
https://blog.csdn.net/young_gy/article/details/69666014?
?https://blog.csdn.net/u014688145/article/details/53212112?
https://blog.csdn.net/yjt13/article/details/72794557?
https://blog.csdn.net/zhihua_oba/article/details/70632622
?https://blog.csdn.net/e15273/article/details/79648502
轉載于:https://www.cnblogs.com/Sugar-Chl/p/10121953.html
總結
- 上一篇: Volatile 关键字 内存可见性
- 下一篇: windows 10占用cpu和内存过高