
從 ID3 到 C4.5
ID3 定義
ID3 算法的核心是在決策樹(shù)各個(gè)子節(jié)點(diǎn)上應(yīng)用信息增益準(zhǔn)則選擇特征,遞歸的構(gòu)建決策樹(shù),具體方法是:從根節(jié)點(diǎn)開(kāi)始,對(duì)節(jié)點(diǎn)計(jì)算所有可能的特征的信息增益,選擇信息增益最大的特征作為節(jié)點(diǎn)的特征,由該特征的不同取值建立子節(jié)點(diǎn);再對(duì)子節(jié)點(diǎn)遞歸調(diào)用以上方法,構(gòu)建決策樹(shù)。
我們通過(guò)一個(gè)具體實(shí)例來(lái)講解如何通過(guò) ID3 算法來(lái)選擇節(jié)點(diǎn)。
求職問(wèn)題

- 第一列表示待遇高低 1 表示高 0 表示低
- 標(biāo)準(zhǔn)第二列表示崗位是否有五險(xiǎn)一金 1 表示有五險(xiǎn)一金 0 如果沒(méi)有公積金只有五險(xiǎn)用 2 來(lái)表示
- 1 表示接受 offer 0 表示沒(méi)有接受 offer
1. 1 1 => 1
2. 1 2 => 1
3. 0 0 => 0
4. 0 0 => 0
5. 1 1 => 1
6. 0 0 => 0
7. 1 2 => 1
8. 1 1 => 1
9. 0 2 => 0
10. 1 0 => 0
先復(fù)習(xí)一下什么是信息熵
- 熵概念: 信息熵是用來(lái)描述信息的混亂程度或者信息的不確定度。信息熵是可以反映集合的純度
我們要計(jì)算純度也就是計(jì)算其不確定度,不確定度大其純度就低。例如 A 和 B 兩個(gè)事件的概率都是 30% 50%,A 事件的不確定性(也就是信息熵) 要大 。算法目的通過(guò)不斷決策樹(shù)來(lái)將信息熵降低下來(lái)
我們先將公式推出。
信息增益
信息增益率
分析實(shí)例
我們以招聘為例,從樣本看接受 offer 和沒(méi)有接受 offer 各占 50% 所以他們概率分別是
-(0.5 * math.log(0.5,2) + 0.5 * math.log(0.5,2))
劃分條件為待遇情況
我們希望分支之后信息熵是降低的,我么選擇條件 C 后這兩個(gè)節(jié)點(diǎn),我們回去查表看看高薪崗位的有幾個(gè),一共有 6 個(gè)崗位。那么是高薪招聘到人是 5
| 招聘到人 | 沒(méi)有招聘到人 | |
|---|---|---|
| D1 | ||
| D2 | 0 | 1 |
-(5/6.0* math.log((5/6.0),2)) - 1/6.0 * math.log((1/6.0),2)
| 分類 | 數(shù)量 | 比例 |
|---|---|---|
| 0 | ||
| 1 | ||
| 2 |
信息增益越大越好
>>> -1/3.0 * math.log(1/3.0,2) - 2/3.0 * math.log(2/3.0,2)
0.9182958340544896
>>> 0.9182958340544896 * 0.3
0.27548875021634683
>>> 1 - 0.28
0.72
在 ID3 我們根據(jù)信息增益(越大越好)來(lái)選擇劃分條件,但是有一個(gè)問(wèn)題有關(guān)是否高薪我們有兩種結(jié)果為是高薪或者不是高薪,而對(duì)于待遇我們是有三種結(jié)果0 代表沒(méi)有五險(xiǎn)一金待遇,1 代表有五險(xiǎn)沒(méi)有一金,2 代表五險(xiǎn)一金俱全的。
也就是劃分后條件,我們?cè)贅O端點(diǎn)按 id 進(jìn)行劃分那么每一都是確定所以所有信息熵都是 0 然后 1 - 0 就是 1 ,那么按 id 劃分信息增益最高但是沒(méi)有任何作用,使用信息熵天生對(duì)多路分類進(jìn)行偏好所以。新來(lái)一個(gè)數(shù)據(jù)我們按 id 劃分是無(wú)法預(yù)測(cè)新數(shù)據(jù)類別的,而且按 id 進(jìn)行劃分說(shuō)明我們的模型比較復(fù)雜。復(fù)雜模型就很容易出現(xiàn)過(guò)擬合現(xiàn)象。為了解決這個(gè)問(wèn)題引入信息增益率*
C4.5 算法
- 信息增益率
信息增益率是在信息增益基礎(chǔ)上除以信息熵,也就是給我們?cè)黾臃诸愖芳恿艘粋€(gè)代價(jià)。也就是分類多了其分母就會(huì)變大從而將數(shù)值降低下來(lái)。
我們回頭從新整理一下公式
- 劃分條件為薪資
- (6/10.0 * math.log(6/10.0,2) + 4/10.0 * math.log(4/10.0,2))
- 劃分條件為福利待遇
-(3/10.0 * math.log(3/10.0,2) + 3/10.0*math.log(3/10.0,2)+4/10.0*math.log(4/10.0,2))
如果我們僅信息增益就會(huì)選擇C2(按待遇進(jìn)行劃分),而按信息增益率來(lái)計(jì)算我們就會(huì)選擇C1(按薪酬劃分)。
CART 算法(Classification And Regression Tree)
CART 算法不但可以處理分類問(wèn)題還可以處理回歸問(wèn)題。CART 算法與ID3 算法思路是相似的,但是具體實(shí)現(xiàn)上和應(yīng)用場(chǎng)景略有不同。
CART 算法采用基尼指數(shù)(分類樹(shù))以及方差(回歸樹(shù))作為純度的度量,而ID3 系列算法采用信息熵作為純度的度量。
CART 算法只能建立二叉樹(shù),而ID3系列算法能夠建立多叉樹(shù)。
分類樹(shù)
基尼指數(shù)越小越好
我們用根節(jié)點(diǎn)的基尼指數(shù)減去按條件劃分后基尼指數(shù),也就是結(jié)果越大那么說(shuō)明這個(gè)劃分條件越好。
回歸樹(shù)
對(duì)于連續(xù)型我們通過(guò)方差來(lái)考慮,方差越小純度越高
同樣我們用根節(jié)點(diǎn)方差減去劃分后方差,結(jié)果越大說(shuō)明劃分條件越好
優(yōu)化以及總結(jié)
| C5.0 系列 | CART | |
|---|---|---|
| 是否支持多路劃分 | 多重(有多少類別數(shù)量就有多少) | 二叉樹(shù) |
| 連續(xù)目標(biāo) | 否 | 是 |
| 決策樹(shù)分割標(biāo)準(zhǔn) | 信息增益(ID3)/信息增益率(C4.5) | Gini 系數(shù)(分類)/方差(回歸樹(shù)) |
| 剪枝 | 誤差估計(jì) | 誤差代價(jià)——復(fù)雜度 |
| 代價(jià)敏感矩陣 | 支持 | 支持 |
| Boosting | 支持 | 支持 |
我們來(lái)思考一個(gè)問(wèn)題,我們通過(guò)不斷細(xì)分一定可以把數(shù)據(jù)劃分為我們想要結(jié)果。但是這個(gè)樹(shù)并不是我們想要的模樣,因?yàn)樯厦嫖覀円呀?jīng)知道了,復(fù)雜模型帶來(lái)就是過(guò)擬合問(wèn)題。那么我們?nèi)绾卧u(píng)估一個(gè)決策樹(shù)設(shè)計(jì)好壞呢?
所以我們就需要對(duì)決策樹(shù)進(jìn)行調(diào)整和刪減不必要節(jié)點(diǎn),這個(gè)過(guò)程我們稱為剪枝,剪枝又分為預(yù)剪枝和后剪枝,在預(yù)剪枝很簡(jiǎn)單,必須保證分裂后節(jié)點(diǎn)必須保證有我們事先定義好的樣本量,如果節(jié)點(diǎn)樣本量少于指定的樣本量,我們就不進(jìn)行分支。這就是預(yù)剪枝,也就是生成節(jié)點(diǎn)如果不滿足一定條件我們就將其減掉,這個(gè)過(guò)程就是預(yù)剪枝,有了預(yù)剪枝當(dāng)然也就有后剪枝。
后剪枝
- 我們用訓(xùn)練集構(gòu)建決策樹(shù),然后我們用測(cè)試評(píng)估決策樹(shù),通過(guò)測(cè)試集后,假如父節(jié)點(diǎn)的誤差大于分支后誤差就說(shuō)明劃分是對(duì)的,相反就會(huì)減掉這個(gè)分支
- 而在C5.0會(huì)采用其他策略進(jìn)行評(píng)估,C5.0 會(huì)考慮代價(jià)。