决策树算法被广泛应用于数据挖掘、自然语言处理、图像处理等领域。它的优点包括易于理解和解释、计算复杂度低、具有较高的准确性等。
给定决策树:
给定数据:
年龄 | 收入 | 学历 | 是否购买 |
---|---|---|---|
25 | 高 | 本科 | |
35 | 中 | 硕士 | |
45 | 低 | 初中 | |
20 | 中 | 大专 | |
30 | 高 | 博士 |
年龄 | 收入 | 学历 | 是否购买 |
---|---|---|---|
25 | 高 | 本科 | 否 |
35 | 中 | 硕士 | 是 |
45 | 低 | 初中 | 否 |
20 | 中 | 大专 | 否 |
30 | 高 | 博士 | 是 |
通过上面的例子,我们将相关决策树的名词,给出以下定义:
最佳属性(最佳特征):在节点上,我们需要找到一个将数据集划分为最有利于分类的子集的属性。这个属性被称为最佳属性,
划分准则:划分准则是指用来衡量每个属性将数据集分成不同子集的优劣程度的方法。
子集:将数据集根据最佳属性划分后得到的数据子集。
叶节点:决策树的终止节点,表示该节点下的所有数据都属于同一类别。叶节点不再进行划分。
要生成一颗决策树,通常需要考虑以下几个方面:
数据集的选择:需要先选定用于训练决策树的数据集。这个数据集应该包含足够多的样本,能够覆盖待分类问题中的所有可能情况。
最佳属性选择:在数据集中选择最佳的属性(特征),作为节点划分准则,通常会使用信息增益、基尼不纯度等指标来衡量每个属性(特征)的重要性,以便确定最佳划分属性。
剪枝:生成的决策树可能存在过拟合的问题,需要进行剪枝以提高泛化能力。
上图针对分类问题所作的图,显然,属性选择的不同会带来分类的不同效果,从我们感官上来分析,选择特征X1要优于选择特征X2。
决策树学习采用分而治之的策略,通过贪婪搜索来识别树中的最佳分割点。然后以自上而下的递归方式重复此拆分过程,直到所有或大多数记录都已分类到特定的类别标签下。
特征的选取不同,生成的子集不同,从图上我们可以看得出来选择特征X1要强于选择特征X2,但是如何量化的划分子集的效果,通过量化后数值大小来确定特征的选择呢,哎嘿!这就需要划分准则所做的事情。
暂不考虑数据集的选择和剪枝操作,对于最佳属性选择操作所使用的划分准则不同,可以将决策树算法分为以下4种:
下面详细介绍下ID3和CART算法去生成决策树
信息增益在我另一篇博客:(引流一下)【机器学习】信息量、香农熵、信息增益
信息增益的基本思想是:选择一个能够最大化训练数据集中信息增益的特征作为划分标准。信息增益的计算公式如下:
G a i n ( D , A ) = H ( D ) − ∑ v = 1 V ∣ D v ∣ D H ( D v ) Gain(D,A)=H(D)-\sum_{v=1}^{V}\frac{|D_v|}{D}H(D_v) Gain(D,A)=H(D)−v=1∑VD∣Dv∣H(Dv)
其中, D D D 表示训练数据集, f f f 表示要计算信息增益的特征, V V V 表示特征 f f f 的取值个数, D v D^v Dv 表示在特征 f f f 取值为 v v v 时,训练数据集 D D D 的子集。 E n t ( D ) Ent(D) Ent(D) 表示训练数据集 D D D 的熵, E n t ( D v ) Ent(D^v) Ent(Dv) 表示在特征 f f f 取值为 v v v 时,训练数据集 D v D^v Dv 的熵。
那么利用信息增益,生成决策树流程为:
信息增益确定用来分裂数据集的最佳特征的过程如下:
最后,根据选择的最佳特征,将训练数据集 D D D 分成若干个子集,每个子集对应于最佳特征的一个取值。这个过程就是数据集的划分。这些子集成为决策树的分支节点,它们继续递归地执行上述过程,直到满足预定义的停止条件,例如树的深度达到一定值,节点中的样本数量小于一定值等。
接下来,需要确定决策树的叶子节点的类别。有几种方法可以实现:
最终,得到的决策树就可以用于对新样本进行分类。
数据拟定背景:小明想出去玩?
ID | Class | Wind | Temp | Outlook |
---|---|---|---|---|
1 | Play | Weak | Hot | Sunny |
2 | Play | Strong | Hot | Sunny |
3 | Stay | Weak | Hot | Rain |
4 | Play | Weak | Mid | Overcast |
5 | Stay | Strong | Cold | Rain |
6 | Play | Weak | Cold | Overcast |
7 | Stay | Strong | Cold | Rain |
8 | Play | Weak | Mid | Sunny |
9 | Play | Weak | Cold | Sunny |
10 | Play | Strong | Mid | Overcast |
11 | Stay | Weak | Mid | Sunny |
12 | Stay | Strong | Mid | Rain |
13 | Play | Weak | Hot | Overcast |
14 | Play | Weak | Cold | Rain |
Class | Count |
---|---|
play | 6 |
stay | 4 |
H ( D ) = − ∑ p ( x ) ⋅ l o g 2 p ( x ) = − ( 9 14 l o g 2 9 14 + 5 14 l o g 2 5 14 ) = 0.94 H(D)=-\sum p(x)·log_2{p(x)}=-(\frac{9}{14}log_2\frac{9}{14}+\frac{5}{14}log_2\frac{5}{14})=0.94 H(D)=−∑p(x)⋅log2p(x)=−(149log2149+145log2145)=0.94
Weak | Strong | |
---|---|---|
Play | 7 | 2 |
Stay | 2 | 3 |
H ( D w e a k ) = − ( 7 9 l o g 2 7 9 + 2 9 l o g 2 2 9 ) = 0.764 H(D_{weak})=-(\frac{7}{9}log_2\frac{7}{9}+\frac{2}{9}log_2\frac{2}{9})=0.764 H(Dweak)=−(97log297+92log292)=0.764
H ( D s t r o n g ) = − ( 2 5 l o g 2 2 5 + 3 5 l o g 2 3 5 ) = 0.970 H(D_{strong})=-(\frac{2}{5}log_2\frac{2}{5}+\frac{3}{5}log_2\frac{3}{5})=0.970 H(Dstrong)=−(52log252+53log253)=0.970
G a i n ( D , W i n d ) = H ( D ) − ∑ v = 1 V ∣ D v ∣ D H ( D v ) = H ( D ) − ( 9 14 H ( D w e a k ) + 5 14 H ( D s t r o n g ) ) = 0.102 Gain(D,Wind)=H(D)-\sum_{v=1}^{V}\frac{|D_v|}{D}H(D_v)=H(D)-(\frac{9}{14}H(D_{weak})+\frac{5}{14}H(D_{strong}))=0.102 Gain(D,Wind)=H(D)−v=1∑VD∣Dv∣H(Dv)=H(D)−(149H(Dweak)+145H(Dstrong))=0.102
Hot | Mid | Cold | |
---|---|---|---|
Play | 3 | 3 | 3 |
Stay | 1 | 2 | 2 |
H ( D H o t ) = − ( 3 4 l o g 2 3 4 + 1 4 l o g 2 1 4 ) = 0.811 H(D_{Hot})=-(\frac{3}{4}log_2\frac{3}{4}+\frac{1}{4}log_2\frac{1}{4})=0.811 H(DHot)=−(43log243+41log241)=0.811
H ( D M i d ) = − ( 3 5 l o g 2 3 5 + 2 5 l o g 2 2 5 ) = 0.970 H(D_{Mid})=-(\frac{3}{5}log_2\frac{3}{5}+\frac{2}{5}log_2\frac{2}{5})=0.970 H(DMid)=−(53log253+52log252)=0.970
H ( D C o l d ) = − ( 3 5 l o g 2 3 5 + 2 5 l o g 2 2 5 ) = 0.970 H(D_{Cold})=-(\frac{3}{5}log_2\frac{3}{5}+\frac{2}{5}log_2\frac{2}{5})=0.970 H(DCold)=−(53log253+52log252)=0.970
G a i n ( D , T e m p ) = H ( D ) − ∑ v = 1 V ∣ D v ∣ D H ( D v ) = H ( D ) − ( 4 14 H ( D H o t ) + 5 14 H ( D M i d ) + 5 14 H ( D C o l d ) ) = 0.008 Gain(D,Temp)=H(D)-\sum_{v=1}^{V}\frac{|D_v|}{D}H(D_v)=H(D)-(\frac{4}{14}H(D_{Hot})+\frac{5}{14}H(D_{Mid})+\frac{5}{14}H(D_{Cold}))=0.008 Gain(D,Temp)=H(D)−v=1∑VD∣Dv∣H(Dv)=H(D)−(144H(DHot)+145H(DMid)+145H(DCold))=0.008
Sunny | Overcast | Rain | |
---|---|---|---|
Play | 4 | 4 | 1 |
Stay | 1 | 0 | 4 |
H ( D S u n n y ) = − ( 4 5 l o g 2 4 5 + 1 5 l o g 2 1 5 ) = 0.722 H(D_{Sunny})=-(\frac{4}{5}log_2\frac{4}{5}+\frac{1}{5}log_2\frac{1}{5})=0.722 H(DSunny)=−(54log254+51log251)=0.722
H ( D O v e r c a s t ) = − ( 4 4 l o g 2 4 4 + 0 4 l o g 2 0 4 ) = 0 H(D_{Overcast})=-(\frac{4}{4}log_2\frac{4}{4}+\frac{0}{4}log_2\frac{0}{4})=0 H(DOvercast)=−(44log244+40log240)=0
H ( D R a i n ) = − ( 1 5 l o g 2 1 5 + 4 5 l o g 2 4 5 ) = 0.722 H(D_{Rain})=-(\frac{1}{5}log_2\frac{1}{5}+\frac{4}{5}log_2\frac{4}{5})=0.722 H(DRain)=−(51log251+54log254)=0.722
G a i n ( D , O u t l o o k ) = H ( D ) − ∑ v = 1 V ∣ D v ∣ D H ( D v ) = H ( D ) − ( 5 14 H ( D S u n n y ) + 4 14 H ( D O v e r c a s t ) + 5 14 H ( D R a i n ) ) = 0.424 Gain(D,Outlook)=H(D)-\sum_{v=1}^{V}\frac{|D_v|}{D}H(D_v)=H(D)-(\frac{5}{14}H(D_{Sunny})+\frac{4}{14}H(D_{Overcast})+\frac{5}{14}H(D_{Rain}))=0.424 Gain(D,Outlook)=H(D)−v=1∑VD∣Dv∣H(Dv)=H(D)−(145H(DSunny)+144H(DOvercast)+145H(DRain))=0.424
wind | Temp | Outlook | |
---|---|---|---|
信息增益 | 0.102 | 0.008 | 0.424 |
不难看出,小明去不去玩啊,温度只能减少0.008的不确定性,但是天气景观(Outlook)可以减少0.424的不确定性,那我们是不是说Outlook更重要一些,更适合作为重要决策节点。
选择标准就是:信息增益最大的那个作为决策属性,
经过第一轮的比较我们可以知道根节点就是最佳决策属性就是Outlook
接下来的步骤就是,将划分好的3个数据子集( D S u n n y 、 D O v e r c a s t 、 D R a i n D_{Sunny}、D_{Overcast}、D_{Rain} DSunny、DOvercast、DRain)分别作为下一次的数据集合,进行上述操作,直至划分的子集纯度为1(其实就是不可在分,在数据的表现就是信息增益为0),这样我们就能得到一个完整的决策树。
如果数据集中有连续变量,可以将其转换为离散变量,例如将年龄按照一定的区间划分为不同的类别。这样做可以简化计算,并且能够更好地处理离散数据。
在CART算法中,基尼系数和均方误差(MSE)都被用作度量划分质量的指标,选择最佳特征时,算法计算每个特征的基尼系数或者MSE,选择最小值对应的特征进行划分。
假设数据集 D D D 有 K K K 个类别, p k p_k pk 表示属于第 k k k 类的样本在数据集 D D D 中的比例,那么 D D D 的基尼系数可以表示为:
G i n i ( D ) = ∑ k = 1 K p k ( 1 − p k ) Gini(D)=\sum_{k=1}^Kp_k(1-p_k) Gini(D)=k=1∑Kpk(1−pk)当 D D D 中只有一种类别时,基尼系数最小,为 0。因为此时 p k = 1 p_k=1 pk=1,而其他 p j p_j pj 都等于 0,因此 1 − p k = 0 1-p_k=0 1−pk=0,整个求和式中只有一项,结果为 0。而当 D D D 中所有类别都出现相同的次数时,基尼系数最大,为 1 − 1 / K 1-1/K 1−1/K。因为此时 p k = 1 / K p_k=1/K pk=1/K,每一项的值都相等,最终求和的结果为 K × ( 1 / K ) ( 1 − 1 / K ) = 1 − 1 / K K \times (1/K)(1-1/K) = 1-1/K K×(1/K)(1−1/K)=1−1/K。
在决策树算法中,我们可以通过计算选择某个特征进行分割后子集的基尼系数来评估分割的质量,选取基尼系数最小的分割方法作为最终选择。
那么利用基尼系数,生成决策树流程为:
基于基尼系数确定用来分裂数据集的最佳特征的具体步骤如下:
其中, ∣ Y ∣ |\mathcal{Y}| ∣Y∣ 是类别的个数, p k p_k pk 是第 k k k 个类别在数据集 D D D 中出现的概率。
其中, V V V 是特征 A A A 的取值个数, D v D_v Dv 是数据集 D D D 中特征 A A A 取值为 v v v 的样本集合, ∣ D v ∣ |D_v| ∣Dv∣ 是 D v D_v Dv 中的样本个数。