決策樹相關知識小結
前言
本文是一篇關於決策樹方面知識的小結,不包含具體的例子(想看例子推薦文獻[1]的第4章),主要總結了ID3、C4.5和CART樹三者的區別,剪枝處理,連續值和缺失值的處理。
決策樹的基本演算法
決策樹的學習目的是為了產生一顆泛化能力強,即處理未見示例能力強的決策樹,其基本流程遵循“分治”的策略,基本演算法如下所示:
***********************輸入********************
訓練集 D={(x1,y1),(x2,y2),...,(xm,ym)}
x中有 (col1,col2,...,colk) 共k組特徵
每個col下有相應的屬性值(a1,a2,...,ap)
y中有 (l1,l2,...,ln) 共n種類標籤
***********************過程********************
if 資料集中的每個子項屬於同一分類 then
return 類標籤
else
尋找劃分資料集的最好特徵*
劃分資料集
建立分支結點
for 每個劃分的子集
遞迴呼叫該函式並增加返回結果到分支結點中
end for
return 分支結點
end if
***********************輸出********************
一顆決策樹
其中,最為重要的是“尋找劃分資料集的最好特徵”這一步(我特意打上了*號),這也是不同演算法的區別所在。
ID3、C4.5和CART的區別
ID3演算法
在劃分資料集的過程當中,我們希望決策樹的分支結點所包含的樣本儘可能地屬於同一類別,即結點的純度越來越高。
在ID3演算法中,利用了資訊增益這一準則來劃分資料集,要了解資訊增益,首先要知道資訊熵的概念。資訊熵是度量樣本集合純度最常用的一項指標。假設當前樣本
假定特徵
其中,
ID3就是使用資訊增益最大為準則來劃分資料集的,計算出每個
但這樣的做法為偏袒於屬性數量較多的特徵,即
C4.5演算法
與ID3演算法不同,C4.5是利用增益率來進行劃分的,其定義如下:
其中
這樣一來就可以解決ID3的弊端,然而,值得注意的是,增益率準則對屬性值數目較少的特徵有所偏好,故C4.5並不是直接取增益率最大的特徵來劃分資料集的,而是採用了一種啟發式的方法:先從資料集中找出資訊增益高於平均水平的特徵,然後從中選擇增益率最高的。
CART演算法
CART則採用了基尼指數來劃分屬性,資料集
基尼值反應了從資料集中隨機抽取兩個樣本,其類標籤不一致的概率,因此基尼值越小,資料集的純度越高。
特徵
CART就是選擇劃分後基尼指數最小的特徵為最優劃分特徵的。
剪枝
剪枝是解決過擬合問題的重要手段,主要分為“預剪枝”和“後剪枝”兩種。在剪枝的時候我們要引入驗證集用來幫助我們判斷是否需要剪枝。
預剪枝
預剪枝是邊生成決策樹邊剪枝的一種做法。基於資訊增益準則或者增益率準則或者基尼指數,我們會選出最優的特徵來進行資料集的劃分,這個時候預剪枝做的就是判斷劃分前後,驗證集的精度是否會提高,如果提高的話就進行劃分,否則不進行劃分,也就是剪枝了。
預剪枝可以降低過擬合的風險,而且還顯著減少了決策樹的訓練時間開銷和測試時間開銷。
不過,預剪枝是一種貪心的做法,有些劃分可能在當前不能提高效能,但在之後的劃分中可以顯著提高決策樹的效能,所以預剪枝有著欠擬合的風險。
後剪枝
後剪枝是先生成一顆完整的決策樹,然後自底向上地進行剪枝,判斷某個分支結點替換為葉子結點後是否會提高驗證集的精度,可以提高則將分支結點替換為葉子結點,否則不替換。
後剪枝比預剪枝保留了更多的分支,欠擬合的風險很小,泛化效能也往往優於預剪枝。但後剪枝的訓練時間開銷要比預剪枝大得多。
連續值的處理
以上討論的都是針對離散特徵進行處理的,如果遇到了屬性為連續值的特徵,往往採用二分法進行處理。
給定樣本集
之後可以基於不同的
缺失值的處理
現實資料中往往會遇到不完成的樣本,即樣本的某些值有缺失,這時候如果放棄該樣本不用則太過浪費,所以一般做如下處理。
給定訓練集
不難看出,對於特徵col,
其它的準則也可以用類似的方法進行轉換。
結束語
以上是對決策樹部分知識的小結。如有不足,還請指正~
參考文獻
[1] 周志華. 機器學習 : = Machine learning[M]. 清華大學出版社, 2016.
[2] Peter Harrington. 機器學習實戰[M]. 人民郵電出版社, 2013.
相關文章
- 相機成像相關知識總結
- 面試小知識:MySQL索引相關面試MySql索引
- 總結 MySQL 相關知識點MySql
- 資料結構相關知識資料結構
- 資訊熵相關知識總結熵
- JVM相關知識點總結JVM
- Android技能樹 — 樹基礎知識小結(一)Android
- Android技能樹 — 多程式相關小結Android
- Java 容器相關知識全面總結Java
- 關於決策樹的理解
- 決策樹學習總結
- Shell相關知識
- .net相關知識
- mobile相關知識
- rollback相關知識
- Java與Mysql鎖相關知識總結JavaMySql
- PHP物件相關知識點的總結PHP物件
- 作業系統相關知識總結作業系統
- B樹(B-tree, 平衡的多路查詢樹)的相關知識
- 決策樹
- scikit-learn決策樹演算法類庫使用小結演算法
- 音訊相關知識音訊
- Elasticsearch——search相關知識Elasticsearch
- Git相關知識點Git
- SSL相關知識科普
- Redis的相關知識Redis
- redis相關知識點Redis
- RPM相關知識
- 直播相關知識收集
- shell相關知識點
- 證書相關知識
- 網路相關知識
- Oracle 相關知識點Oracle
- oracle awr相關知識Oracle
- nohup使用相關知識
- /proc的相關知識
- web跨域及cookie相關知識總結Web跨域Cookie
- 老Python總結的字典相關知識Python